summaryrefslogtreecommitdiff
path: root/toolchain/uclibc/patches
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2014-04-06 14:46:57 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2014-04-06 14:46:57 +0200
commite8440b5c2722b2740b7fd444edcd7cbd531ccddb (patch)
tree64f07e9f722439e9d77bf66b4b6c8339149537a9 /toolchain/uclibc/patches
parentb5a90a6f0655899fed42ba37d7825f7709ad4dea (diff)
use lowercase directory name
Diffstat (limited to 'toolchain/uclibc/patches')
-rw-r--r--toolchain/uclibc/patches/uclibc-git-20140313.patch116105
-rw-r--r--toolchain/uclibc/patches/xxx-origin.patch177
-rw-r--r--toolchain/uclibc/patches/xxx-sparc-wait4.patch12
3 files changed, 116294 insertions, 0 deletions
diff --git a/toolchain/uclibc/patches/uclibc-git-20140313.patch b/toolchain/uclibc/patches/uclibc-git-20140313.patch
new file mode 100644
index 000000000..561c08007
--- /dev/null
+++ b/toolchain/uclibc/patches/uclibc-git-20140313.patch
@@ -0,0 +1,116105 @@
+diff -Nur uClibc-0.9.33.2/docs/man/arc4random.3 uClibc-git/docs/man/arc4random.3
+--- uClibc-0.9.33.2/docs/man/arc4random.3 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/docs/man/arc4random.3 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,110 @@
++.\" $OpenBSD: arc4random.3,v 1.19 2005/07/17 08:50:55 jaredy Exp $
++.\"
++.\" Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
++.\" All rights reserved.
++.\"
++.\" Redistribution and use in source and binary forms, with or without
++.\" modification, are permitted provided that the following conditions
++.\" are met:
++.\" 1. Redistributions of source code must retain the above copyright
++.\" notice, this list of conditions and the following disclaimer.
++.\" 2. Redistributions in binary form must reproduce the above copyright
++.\" notice, this list of conditions and the following disclaimer in the
++.\" documentation and/or other materials provided with the distribution.
++.\" 3. All advertising materials mentioning features or use of this software
++.\" must display the following acknowledgement:
++.\" This product includes software developed by Niels Provos.
++.\" 4. The name of the author may not be used to endorse or promote products
++.\" derived from this software without specific prior written permission.
++.\"
++.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
++.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
++.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
++.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
++.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++.\"
++.\" Manual page, using -mandoc macros
++.\"
++.Dd April 15, 1997
++.Dt ARC4RANDOM 3
++.Os
++.Sh NAME
++.Nm arc4random ,
++.Nm arc4random_stir ,
++.Nm arc4random_addrandom
++.Nd arc4 random number generator
++.Sh SYNOPSIS
++.Fd #include <stdlib.h>
++.Ft uint32_t
++.Fn arc4random "void"
++.Ft void
++.Fn arc4random_stir "void"
++.Ft void
++.Fn arc4random_addrandom "u_char *dat" "int datlen"
++.Sh DESCRIPTION
++The
++.Fn arc4random
++function provides a high quality 32-bit pseudo-random
++number very quickly.
++.Fn arc4random
++seeds itself on a regular basis from the kernel strong random number
++subsystem described in
++.Xr random 4 .
++On each call, an ARC4 generator is used to generate a new result.
++The
++.Fn arc4random
++function uses the ARC4 cipher key stream generator,
++which uses 8*8 8-bit S-Boxes.
++The S-Boxes can be in about (2**1700) states.
++.Pp
++.Fn arc4random
++fits into a middle ground not covered by other subsystems such as
++the strong, slow, and resource expensive random
++devices described in
++.Xr random 4
++versus the fast but poor quality interfaces described in
++.Xr rand 3 ,
++.Xr random 3 ,
++and
++.Xr drand48 3 .
++.Pp
++The
++.Fn arc4random_stir
++function reads data from a pseudo-random device, usually
++.Pa /dev/urandom,
++and uses it to permute the S-Boxes via
++.Fn arc4random_addrandom .
++.Pp
++There is no need to call
++.Fn arc4random_stir
++before using
++.Fn arc4random ,
++since
++.Fn arc4random
++automatically initializes itself.
++.Sh SEE ALSO
++.Xr rand 3 ,
++.Xr rand48 3 ,
++.Xr random 3
++.Sh HISTORY
++An algorithm called
++.Pa RC4
++was designed by RSA Data Security, Inc.
++It was considered a trade secret.
++Because it was a trade secret, it obviously could not be patented.
++A clone of this was posted anonymously to USENET and confirmed to
++be equivalent by several sources who had access to the original cipher.
++Because of the trade secret situation, RSA Data Security, Inc. can do
++nothing about the release of the ARC4 algorithm.
++Since
++.Pa RC4
++used to be a trade secret, the cipher is now referred to as
++.Pa ARC4 .
++.Pp
++These functions first appeared in
++.Ox 2.1 .
+diff -Nur uClibc-0.9.33.2/docs/PORTING uClibc-git/docs/PORTING
+--- uClibc-0.9.33.2/docs/PORTING 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/docs/PORTING 2014-02-03 12:32:56.000000000 +0100
+@@ -130,9 +130,6 @@
+ ====================
+ === Misc Cruft ===
+ ====================
+-- utils/readelf.c - not really needed generally speaking, but might as well
+- add your arch to the giant EM_* list (describe_elf_hdr)
+-
+ - MAINTAINERS - presumably you're going to submit this code back to mainline
+ and since you're the only one who cares about this arch (right now), you
+ should add yourself to the toplevel MAINTAINERS file. do it.
+diff -Nur uClibc-0.9.33.2/extra/config/check.sh uClibc-git/extra/config/check.sh
+--- uClibc-0.9.33.2/extra/config/check.sh 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/check.sh 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+ # Needed for systems without gettext
+-$* -xc -o /dev/null - > /dev/null 2>&1 << EOF
++$* -x c -o /dev/null - > /dev/null 2>&1 << EOF
+ #include <libintl.h>
+ int main()
+ {
+diff -Nur uClibc-0.9.33.2/extra/config/conf.c uClibc-git/extra/config/conf.c
+--- uClibc-0.9.33.2/extra/config/conf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/conf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,42 +10,48 @@
+ #include <string.h>
+ #include <time.h>
+ #include <unistd.h>
++#include <getopt.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
++#include <errno.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+ static void conf(struct menu *menu);
+ static void check_conf(struct menu *menu);
++static void xfgets(char *str, int size, FILE *in);
+
+-enum {
+- ask_all,
+- ask_new,
+- ask_silent,
+- set_default,
+- set_yes,
+- set_mod,
+- set_no,
+- set_random
+-} input_mode = ask_all;
+-char *defconfig_file;
++enum input_mode {
++ oldaskconfig,
++ silentoldconfig,
++ oldconfig,
++ allnoconfig,
++ allyesconfig,
++ allmodconfig,
++ alldefconfig,
++ randconfig,
++ defconfig,
++ savedefconfig,
++ listnewconfig,
++ olddefconfig,
++} input_mode = oldaskconfig;
+
+ static int indent = 1;
++static int tty_stdio;
+ static int valid_stdin = 1;
+ static int sync_kconfig;
+ static int conf_cnt;
+ static char line[128];
+ static struct menu *rootEntry;
+
+-static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
+-
+-static const char *get_help(struct menu *menu)
++static void print_help(struct menu *menu)
+ {
+- if (menu_has_help(menu))
+- return _(menu_get_help(menu));
+- else
+- return nohelp_text;
++ struct gstr help = str_new();
++
++ menu_get_ext_help(menu, &help);
++
++ printf("\n%s\n", str_get(&help));
++ str_free(&help);
+ }
+
+ static void strip(char *str)
+@@ -93,16 +99,19 @@
+ }
+
+ switch (input_mode) {
+- case ask_new:
+- case ask_silent:
++ case oldconfig:
++ case silentoldconfig:
+ if (sym_has_value(sym)) {
+ printf("%s\n", def);
+ return 0;
+ }
+ check_stdin();
+- case ask_all:
++ /* fall through */
++ case oldaskconfig:
+ fflush(stdout);
+- fgets(line, 128, stdin);
++ xfgets(line, 128, stdin);
++ if (!tty_stdio)
++ printf("\n");
+ return 1;
+ default:
+ break;
+@@ -121,7 +130,7 @@
+ return 1;
+ }
+
+-int conf_string(struct menu *menu)
++static int conf_string(struct menu *menu)
+ {
+ struct symbol *sym = menu->sym;
+ const char *def;
+@@ -140,10 +149,11 @@
+ case '?':
+ /* print help */
+ if (line[1] == '\n') {
+- printf("\n%s\n", get_help(menu));
++ print_help(menu);
+ def = NULL;
+ break;
+ }
++ /* fall through */
+ default:
+ line[strlen(line)-1] = 0;
+ def = line;
+@@ -156,14 +166,12 @@
+ static int conf_sym(struct menu *menu)
+ {
+ struct symbol *sym = menu->sym;
+- int type;
+ tristate oldval, newval;
+
+ while (1) {
+ printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
+ if (sym->name)
+ printf("(%s) ", sym->name);
+- type = sym_get_type(sym);
+ putchar('[');
+ oldval = sym_get_tristate_value(sym);
+ switch (oldval) {
+@@ -220,7 +228,7 @@
+ if (sym_set_tristate_value(sym, newval))
+ return 0;
+ help:
+- printf("\n%s\n", get_help(menu));
++ print_help(menu);
+ }
+ }
+
+@@ -228,11 +236,9 @@
+ {
+ struct symbol *sym, *def_sym;
+ struct menu *child;
+- int type;
+ bool is_new;
+
+ sym = menu->sym;
+- type = sym_get_type(sym);
+ is_new = !sym_has_value(sym);
+ if (sym_is_changable(sym)) {
+ conf_sym(menu);
+@@ -294,20 +300,21 @@
+ printf("?");
+ printf("]: ");
+ switch (input_mode) {
+- case ask_new:
+- case ask_silent:
++ case oldconfig:
++ case silentoldconfig:
+ if (!is_new) {
+ cnt = def;
+ printf("%d\n", cnt);
+ break;
+ }
+ check_stdin();
+- case ask_all:
++ /* fall through */
++ case oldaskconfig:
+ fflush(stdout);
+- fgets(line, 128, stdin);
++ xfgets(line, 128, stdin);
+ strip(line);
+ if (line[0] == '?') {
+- printf("\n%s\n", get_help(menu));
++ print_help(menu);
+ continue;
+ }
+ if (!line[0])
+@@ -330,8 +337,8 @@
+ }
+ if (!child)
+ continue;
+- if (line[strlen(line) - 1] == '?') {
+- printf("\n%s\n", get_help(child));
++ if (line[0] && line[strlen(line) - 1] == '?') {
++ print_help(child);
+ continue;
+ }
+ sym_set_choice_value(sym, child->sym);
+@@ -360,10 +367,14 @@
+
+ switch (prop->type) {
+ case P_MENU:
+- if (input_mode == ask_silent && rootEntry != menu) {
++ if ((input_mode == silentoldconfig ||
++ input_mode == listnewconfig ||
++ input_mode == olddefconfig) &&
++ rootEntry != menu) {
+ check_conf(menu);
+ return;
+ }
++ /* fall through */
+ case P_COMMENT:
+ prompt = menu_get_prompt(menu);
+ if (prompt)
+@@ -418,10 +429,16 @@
+ if (sym && !sym_has_value(sym)) {
+ if (sym_is_changable(sym) ||
+ (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
+- if (!conf_cnt++)
+- printf(_("*\n* Restart config...\n*\n"));
+- rootEntry = menu_get_parent_menu(menu);
+- conf(rootEntry);
++ if (input_mode == listnewconfig) {
++ if (sym->name && !sym_is_choice_value(sym)) {
++ printf("%s%s\n", CONFIG_, sym->name);
++ }
++ } else if (input_mode != olddefconfig) {
++ if (!conf_cnt++)
++ printf(_("*\n* Restart config...\n*\n"));
++ rootEntry = menu_get_parent_menu(menu);
++ conf(rootEntry);
++ }
+ }
+ }
+
+@@ -429,90 +446,170 @@
+ check_conf(child);
+ }
+
++#if 00 // || !defined __UCLIBC__ || \
++ (defined UCLIBC_HAS_GETOPT_LONG || defined UCLIBC_HAS_GNU_GETOPT)
++static struct option long_opts[] = {
++ {"oldaskconfig", no_argument, NULL, oldaskconfig},
++ {"oldconfig", no_argument, NULL, oldconfig},
++ {"silentoldconfig", no_argument, NULL, silentoldconfig},
++ {"defconfig", optional_argument, NULL, defconfig},
++ {"savedefconfig", required_argument, NULL, savedefconfig},
++ {"allnoconfig", no_argument, NULL, allnoconfig},
++ {"allyesconfig", no_argument, NULL, allyesconfig},
++ {"allmodconfig", no_argument, NULL, allmodconfig},
++ {"alldefconfig", no_argument, NULL, alldefconfig},
++ {"randconfig", no_argument, NULL, randconfig},
++ {"listnewconfig", no_argument, NULL, listnewconfig},
++ {"olddefconfig", no_argument, NULL, olddefconfig},
++ /*
++ * oldnoconfig is an alias of olddefconfig, because people already
++ * are dependent on its behavior(sets new symbols to their default
++ * value but not 'n') with the counter-intuitive name.
++ */
++ {"oldnoconfig", no_argument, NULL, olddefconfig},
++ {NULL, 0, NULL, 0}
++};
++
++static void conf_usage(const char *progname)
++{
++
++ printf("Usage: %s [option] <kconfig-file>\n", progname);
++ printf("[option] is _one_ of the following:\n");
++ printf(" --listnewconfig List new options\n");
++ printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
++ printf(" --oldconfig Update a configuration using a provided .config as base\n");
++ printf(" --silentoldconfig Same as oldconfig, but quietly, additionally update deps\n");
++ printf(" --olddefconfig Same as silentoldconfig but sets new symbols to their default value\n");
++ printf(" --oldnoconfig An alias of olddefconfig\n");
++ printf(" --defconfig <file> New config with default defined in <file>\n");
++ printf(" --savedefconfig <file> Save the minimal current configuration to <file>\n");
++ printf(" --allnoconfig New config where all options are answered with no\n");
++ printf(" --allyesconfig New config where all options are answered with yes\n");
++ printf(" --allmodconfig New config where all options are answered with mod\n");
++ printf(" --alldefconfig New config with all symbols set to default\n");
++ printf(" --randconfig New config with random answer to all options\n");
++}
++#else
++static void conf_usage(const char *progname)
++{
++
++ printf("Usage: %s [option] <kconfig-file>\n", progname);
++ printf("[option] is _one_ of the following:\n");
++ printf(" -a, --oldaskconfig Start a new configuration using a line-oriented program\n");
++ printf(" -s, --silentoldconfig Same as oldconfig, but quietly, additionally update deps\n");
++ printf(" -o, --oldconfig Update a configuration using a provided .config as base\n");
++ printf(" -n, --allnoconfig New config where all options are answered with no\n");
++ printf(" -y, --allyesconfig New config where all options are answered with yes\n");
++ printf(" -m, --allmodconfig New config where all options are answered with mod\n");
++ printf(" -A, --alldefconfig New config with all symbols set to default\n");
++ printf(" -r, --randconfig New config with random answer to all options\n");
++ printf(" -D, --defconfig <file> New config with default defined in <file>\n");
++ printf(" -S, --savedefconfig <file> Save the minimal current configuration to <file>\n");
++ printf(" -l, --listnewconfig List new options\n");
++ printf(" -d, --olddefconfig Same as silentoldconfig but sets new symbols to their default value\n");
++ printf(" --oldnoconfig An alias of olddefconfig\n");
++
++}
++#endif
++
+ int main(int ac, char **av)
+ {
++ const char *progname = av[0];
+ int opt;
+- const char *name;
+- const char *configname = conf_get_configname();
++ const char *name, *defconfig_file = NULL /* gcc uninit */;
+ struct stat tmpstat;
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+- while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
++ tty_stdio = isatty(0) && isatty(1) && isatty(2);
++
++#if 00// !defined __UCLIBC__ || \
++ (defined UCLIBC_HAS_GETOPT_LONG || defined UCLIBC_HAS_GNU_GETOPT)
++ while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1)
++#else
++ char *gch = "asonymArDSld";
++ while ((opt = getopt(ac, av, "asonymArD:S:ldh")) != -1)
++#endif
++ {
++ char *x = memchr(gch, opt, strlen(gch));
++ if (x == NULL)
++ opt = '?';
++ else
++ opt = x - gch;
++ input_mode = (enum input_mode)opt;
+ switch (opt) {
+- case 'o':
+- input_mode = ask_silent;
+- break;
+- case 's':
+- input_mode = ask_silent;
++ case silentoldconfig:
+ sync_kconfig = 1;
+ break;
+- case 'd':
+- input_mode = set_default;
+- break;
+- case 'D':
+- input_mode = set_default;
++ case defconfig:
++ case savedefconfig:
+ defconfig_file = optarg;
+ break;
+- case 'n':
+- input_mode = set_no;
+- break;
+- case 'm':
+- input_mode = set_mod;
+- break;
+- case 'y':
+- input_mode = set_yes;
+- break;
+- case 'r':
++ case randconfig:
+ {
+ struct timeval now;
+ unsigned int seed;
++ char *seed_env;
+
+ /*
+ * Use microseconds derived seed,
+ * compensate for systems where it may be zero
+ */
+ gettimeofday(&now, NULL);
+-
+ seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
+- srand(seed);
+
+- input_mode = set_random;
++ seed_env = getenv("KCONFIG_SEED");
++ if( seed_env && *seed_env ) {
++ char *endp;
++ int tmp = (int)strtol(seed_env, &endp, 0);
++ if (*endp == '\0') {
++ seed = tmp;
++ }
++ }
++ fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed );
++ srand(seed);
+ break;
+ }
+- case 'h':
+- printf(_("See README for usage info\n"));
+- exit(0);
++ case oldaskconfig:
++ case oldconfig:
++ case allnoconfig:
++ case allyesconfig:
++ case allmodconfig:
++ case alldefconfig:
++ case listnewconfig:
++ case olddefconfig:
+ break;
+- default:
+- fprintf(stderr, _("See README for usage info\n"));
++ case '?':
++ conf_usage(progname);
+ exit(1);
++ break;
+ }
+ }
+ if (ac == optind) {
+ printf(_("%s: Kconfig file missing\n"), av[0]);
++ conf_usage(progname);
+ exit(1);
+ }
+ name = av[optind];
+ conf_parse(name);
+ //zconfdump(stdout);
+ if (sync_kconfig) {
+- if (stat(configname, &tmpstat)) {
++ name = conf_get_configname();
++ if (stat(name, &tmpstat)) {
+ fprintf(stderr, _("***\n"
+- "*** You have not yet configured!\n"
+- "*** (missing .config file)\n"
++ "*** Configuration file \"%s\" not found!\n"
+ "***\n"
+ "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
+ "*** \"make menuconfig\" or \"make xconfig\").\n"
+- "***\n"));
++ "***\n"), name);
+ exit(1);
+ }
+ }
+
+ switch (input_mode) {
+- case set_default:
++ case defconfig:
+ if (!defconfig_file)
+ defconfig_file = conf_get_default_confname();
+ if (conf_read(defconfig_file)) {
+@@ -522,31 +619,46 @@
+ exit(1);
+ }
+ break;
+- case ask_silent:
+- case ask_all:
+- case ask_new:
++ case savedefconfig:
++ case silentoldconfig:
++ case oldaskconfig:
++ case oldconfig:
++ case listnewconfig:
++ case olddefconfig:
+ conf_read(NULL);
+ break;
+- case set_no:
+- case set_mod:
+- case set_yes:
+- case set_random:
++ case allnoconfig:
++ case allyesconfig:
++ case allmodconfig:
++ case alldefconfig:
++ case randconfig:
+ name = getenv("KCONFIG_ALLCONFIG");
+- if (name && !stat(name, &tmpstat)) {
+- conf_read_simple(name, S_DEF_USER);
++ if (!name)
++ break;
++ if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) {
++ if (conf_read_simple(name, S_DEF_USER)) {
++ fprintf(stderr,
++ _("*** Can't read seed configuration \"%s\"!\n"),
++ name);
++ exit(1);
++ }
+ break;
+ }
+ switch (input_mode) {
+- case set_no: name = "allno.config"; break;
+- case set_mod: name = "allmod.config"; break;
+- case set_yes: name = "allyes.config"; break;
+- case set_random: name = "allrandom.config"; break;
++ case allnoconfig: name = "allno.config"; break;
++ case allyesconfig: name = "allyes.config"; break;
++ case allmodconfig: name = "allmod.config"; break;
++ case alldefconfig: name = "alldef.config"; break;
++ case randconfig: name = "allrandom.config"; break;
+ default: break;
+ }
+- if (!stat(name, &tmpstat))
+- conf_read_simple(name, S_DEF_USER);
+- else if (!stat("all.config", &tmpstat))
+- conf_read_simple("all.config", S_DEF_USER);
++ if (conf_read_simple(name, S_DEF_USER) &&
++ conf_read_simple("all.config", S_DEF_USER)) {
++ fprintf(stderr,
++ _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
++ name);
++ exit(1);
++ }
+ break;
+ default:
+ break;
+@@ -557,41 +669,51 @@
+ name = getenv("KCONFIG_NOSILENTUPDATE");
+ if (name && *name) {
+ fprintf(stderr,
+- _("\n*** configuration requires explicit update.\n\n"));
++ _("\n*** The configuration requires explicit update.\n\n"));
+ return 1;
+ }
+ }
+- valid_stdin = isatty(0) && isatty(1) && isatty(2);
++ valid_stdin = tty_stdio;
+ }
+
+ switch (input_mode) {
+- case set_no:
++ case allnoconfig:
+ conf_set_all_new_symbols(def_no);
+ break;
+- case set_yes:
++ case allyesconfig:
+ conf_set_all_new_symbols(def_yes);
+ break;
+- case set_mod:
++ case allmodconfig:
+ conf_set_all_new_symbols(def_mod);
+ break;
+- case set_random:
+- conf_set_all_new_symbols(def_random);
++ case alldefconfig:
++ conf_set_all_new_symbols(def_default);
++ break;
++ case randconfig:
++ /* Really nothing to do in this loop */
++ while (conf_set_all_new_symbols(def_random)) ;
+ break;
+- case set_default:
++ case defconfig:
+ conf_set_all_new_symbols(def_default);
+ break;
+- case ask_new:
+- case ask_all:
++ case savedefconfig:
++ break;
++ case oldaskconfig:
+ rootEntry = &rootmenu;
+ conf(&rootmenu);
+- input_mode = ask_silent;
++ input_mode = silentoldconfig;
+ /* fall through */
+- case ask_silent:
++ case oldconfig:
++ case listnewconfig:
++ case olddefconfig:
++ case silentoldconfig:
+ /* Update until a loop caused no more changes */
+ do {
+ conf_cnt = 0;
+ check_conf(&rootmenu);
+- } while (conf_cnt);
++ } while (conf_cnt &&
++ (input_mode != listnewconfig &&
++ input_mode != olddefconfig));
+ break;
+ }
+
+@@ -607,7 +729,13 @@
+ fprintf(stderr, _("\n*** Error during update of the configuration.\n\n"));
+ return 1;
+ }
+- } else {
++ } else if (input_mode == savedefconfig) {
++ if (conf_write_defconfig(defconfig_file)) {
++ fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"),
++ defconfig_file);
++ return 1;
++ }
++ } else if (input_mode != listnewconfig) {
+ if (conf_write(NULL)) {
+ fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
+ exit(1);
+@@ -615,3 +743,12 @@
+ }
+ return 0;
+ }
++
++/*
++ * Helper function to facilitate fgets() by Jean Sacren.
++ */
++void xfgets(char *str, int size, FILE *in)
++{
++ if (fgets(str, size, in) == NULL)
++ fprintf(stderr, "\nError in reading or end of file.\n");
++}
+diff -Nur uClibc-0.9.33.2/extra/config/confdata.c uClibc-git/extra/config/confdata.c
+--- uClibc-0.9.33.2/extra/config/confdata.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/confdata.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,24 +5,27 @@
+
+ #include <sys/stat.h>
+ #include <ctype.h>
++#include <errno.h>
+ #include <fcntl.h>
++#include <stdarg.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <time.h>
+ #include <unistd.h>
+-#include <libgen.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+ static void conf_warning(const char *fmt, ...)
+ __attribute__ ((format (printf, 1, 2)));
+
++static void conf_message(const char *fmt, ...)
++ __attribute__ ((format (printf, 1, 2)));
++
+ static const char *conf_filename;
+ static int conf_lineno, conf_warnings, conf_unsaved;
+
+-const char conf_defname[] = "extra/Configs/defconfigs/$ARCH";
++const char conf_defname[] = "arch/$ARCH/defconfig";
+
+ static void conf_warning(const char *fmt, ...)
+ {
+@@ -35,6 +38,29 @@
+ conf_warnings++;
+ }
+
++static void conf_default_message_callback(const char *fmt, va_list ap)
++{
++ printf("#\n# ");
++ vprintf(fmt, ap);
++ printf("\n#\n");
++}
++
++static void (*conf_message_callback) (const char *fmt, va_list ap) =
++ conf_default_message_callback;
++void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
++{
++ conf_message_callback = fn;
++}
++
++static void conf_message(const char *fmt, ...)
++{
++ va_list ap;
++
++ va_start(ap, fmt);
++ if (conf_message_callback)
++ conf_message_callback(fmt, ap);
++}
++
+ const char *conf_get_configname(void)
+ {
+ char *name = getenv("KCONFIG_CONFIG");
+@@ -42,6 +68,13 @@
+ return name ? name : ".config";
+ }
+
++const char *conf_get_autoconfig_name(void)
++{
++ char *name = getenv("KCONFIG_AUTOCONFIG");
++
++ return name ? name : "include/config/auto.conf";
++}
++
+ static char *conf_expand_value(const char *in)
+ {
+ struct symbol *sym;
+@@ -95,6 +128,7 @@
+ sym->flags |= def_flags;
+ break;
+ }
++ /* fall through */
+ case S_BOOLEAN:
+ if (p[0] == 'y') {
+ sym->def[def].tri = yes;
+@@ -107,7 +141,7 @@
+ break;
+ }
+ conf_warning("symbol value '%s' invalid for %s", p, sym->name);
+- break;
++ return 1;
+ case S_OTHER:
+ if (*p != '"') {
+ for (p2 = p; *p2 && !isspace(*p2); p2++)
+@@ -115,6 +149,7 @@
+ sym->type = S_STRING;
+ goto done;
+ }
++ /* fall through */
+ case S_STRING:
+ if (*p++ != '"')
+ break;
+@@ -129,6 +164,7 @@
+ conf_warning("invalid string found");
+ return 1;
+ }
++ /* fall through */
+ case S_INT:
+ case S_HEX:
+ done:
+@@ -146,10 +182,66 @@
+ return 0;
+ }
+
++#define LINE_GROWTH 16
++static int add_byte(int c, char **lineptr, size_t slen, size_t *n)
++{
++ char *nline;
++ size_t new_size = slen + 1;
++ if (new_size > *n) {
++ new_size += LINE_GROWTH - 1;
++ new_size *= 2;
++ nline = realloc(*lineptr, new_size);
++ if (!nline)
++ return -1;
++
++ *lineptr = nline;
++ *n = new_size;
++ }
++
++ (*lineptr)[slen] = c;
++
++ return 0;
++}
++
++static ssize_t compat_getline(char **lineptr, size_t *n, FILE *stream)
++{
++ char *line = *lineptr;
++ size_t slen = 0;
++
++ for (;;) {
++ int c = getc(stream);
++
++ switch (c) {
++ case '\n':
++ if (add_byte(c, &line, slen, n) < 0)
++ goto e_out;
++ slen++;
++ /* fall through */
++ case EOF:
++ if (add_byte('\0', &line, slen, n) < 0)
++ goto e_out;
++ *lineptr = line;
++ if (slen == 0)
++ return -1;
++ return slen;
++ default:
++ if (add_byte(c, &line, slen, n) < 0)
++ goto e_out;
++ slen++;
++ }
++ }
++
++e_out:
++ line[slen-1] = '\0';
++ *lineptr = line;
++ return -1;
++}
++
+ int conf_read_simple(const char *name, int def)
+ {
+ FILE *in = NULL;
+- char line[1024];
++ char *line = NULL;
++ size_t line_asize = 0;
+ char *p, *p2;
+ struct symbol *sym;
+ int i, def_flags;
+@@ -164,8 +256,11 @@
+ if (in)
+ goto load;
+ sym_add_change_count(1);
+- if (!sym_defconfig_list)
++ if (!sym_defconfig_list) {
++ if (modules_sym)
++ sym_calc_value(modules_sym);
+ return 1;
++ }
+
+ for_all_defaults(sym_defconfig_list, prop) {
+ if (expr_calc_value(prop->visible.expr) == no ||
+@@ -174,9 +269,8 @@
+ name = conf_expand_value(prop->expr->left.sym->name);
+ in = zconf_fopen(name);
+ if (in) {
+- printf(_("#\n"
+- "# using defaults found in %s\n"
+- "#\n"), name);
++ conf_message(_("using defaults found in %s"),
++ name);
+ goto load;
+ }
+ }
+@@ -202,33 +296,33 @@
+ case S_STRING:
+ if (sym->def[def].val)
+ free(sym->def[def].val);
++ /* fall through */
+ default:
+ sym->def[def].val = NULL;
+ sym->def[def].tri = no;
+ }
+ }
+
+- while (fgets(line, sizeof(line), in)) {
++ while (compat_getline(&line, &line_asize, in) != -1) {
+ conf_lineno++;
+ sym = NULL;
+- switch (line[0]) {
+- case '#':
+- if (line[1] != ' ')
++ if (line[0] == '#') {
++ if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
+ continue;
+- p = strchr(line + 2, ' ');
++ p = strchr(line + 2 + strlen(CONFIG_), ' ');
+ if (!p)
+ continue;
+ *p++ = 0;
+ if (strncmp(p, "is not set", 10))
+ continue;
+ if (def == S_DEF_USER) {
+- sym = sym_find(line + 2);
++ sym = sym_find(line + 2 + strlen(CONFIG_));
+ if (!sym) {
+ sym_add_change_count(1);
+- break;
++ goto setsym;
+ }
+ } else {
+- sym = sym_lookup(line + 2, 0);
++ sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
+ if (sym->type == S_UNKNOWN)
+ sym->type = S_BOOLEAN;
+ }
+@@ -244,13 +338,10 @@
+ default:
+ ;
+ }
+- break;
+- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+- p = strchr(line, '=');
+- if (!p) {
+- conf_warning("unexpected data '%s'", line);
++ } else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) {
++ p = strchr(line + strlen(CONFIG_), '=');
++ if (!p)
+ continue;
+- }
+ *p++ = 0;
+ p2 = strchr(p, '\n');
+ if (p2) {
+@@ -259,13 +350,13 @@
+ *p2 = 0;
+ }
+ if (def == S_DEF_USER) {
+- sym = sym_find(line);
++ sym = sym_find(line + strlen(CONFIG_));
+ if (!sym) {
+ sym_add_change_count(1);
+- break;
++ goto setsym;
+ }
+ } else {
+- sym = sym_lookup(line, 0);
++ sym = sym_lookup(line + strlen(CONFIG_), 0);
+ if (sym->type == S_UNKNOWN)
+ sym->type = S_OTHER;
+ }
+@@ -274,14 +365,12 @@
+ }
+ if (conf_set_sym_val(sym, def, def_flags, p))
+ continue;
+- break;
+- case '\r':
+- case '\n':
+- break;
+- default:
+- conf_warning("unexpected data");
++ } else {
++ if (line[0] != '\r' && line[0] != '\n')
++ conf_warning("unexpected data");
+ continue;
+ }
++setsym:
+ if (sym && sym_is_choice_value(sym)) {
+ struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
+ switch (sym->def[def].tri) {
+@@ -302,6 +391,7 @@
+ cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri);
+ }
+ }
++ free(line);
+ fclose(in);
+
+ if (modules_sym)
+@@ -311,10 +401,8 @@
+
+ int conf_read(const char *name)
+ {
+- struct symbol *sym, *choice_sym;
+- struct property *prop;
+- struct expr *e;
+- int i, flags;
++ struct symbol *sym;
++ int i;
+
+ sym_set_change_count(0);
+
+@@ -324,7 +412,7 @@
+ for_all_symbols(i, sym) {
+ sym_calc_value(sym);
+ if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
+- goto sym_ok;
++ continue;
+ if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
+ /* check that calculated value agrees with saved value */
+ switch (sym->type) {
+@@ -333,29 +421,18 @@
+ if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
+ break;
+ if (!sym_is_choice(sym))
+- goto sym_ok;
++ continue;
++ /* fall through */
+ default:
+ if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
+- goto sym_ok;
++ continue;
+ break;
+ }
+ } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
+ /* no previous value and not saved */
+- goto sym_ok;
++ continue;
+ conf_unsaved++;
+ /* maybe print value in verbose mode... */
+- sym_ok:
+- if (!sym_is_choice(sym))
+- continue;
+- /* The choice symbol only has a set value (and thus is not new)
+- * if all its visible childs have values.
+- */
+- prop = sym_get_choice_prop(sym);
+- flags = sym->flags;
+- expr_list_for_each_sym(prop->expr, e, choice_sym)
+- if (choice_sym->visible != no)
+- flags &= choice_sym->flags;
+- sym->flags &= flags | ~SYMBOL_DEF_USER;
+ }
+
+ for_all_symbols(i, sym) {
+@@ -388,43 +465,300 @@
+ return 0;
+ }
+
++/*
++ * Kconfig configuration printer
++ *
++ * This printer is used when generating the resulting configuration after
++ * kconfig invocation and `defconfig' files. Unset symbol might be omitted by
++ * passing a non-NULL argument to the printer.
++ *
++ */
++static void
++kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
++{
++
++ switch (sym->type) {
++ case S_BOOLEAN:
++ case S_TRISTATE:
++ if (*value == 'n') {
++ bool skip_unset = (arg != NULL);
++
++ if (!skip_unset)
++ fprintf(fp, "# %s%s is not set\n",
++ CONFIG_, sym->name);
++ return;
++ }
++ break;
++ default:
++ break;
++ }
++
++ fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
++}
++
++static void
++kconfig_print_comment(FILE *fp, const char *value, void *arg)
++{
++ const char *p = value;
++ size_t l;
++
++ for (;;) {
++ l = strcspn(p, "\n");
++ fprintf(fp, "#");
++ if (l) {
++ fprintf(fp, " ");
++ xfwrite(p, l, 1, fp);
++ p += l;
++ }
++ fprintf(fp, "\n");
++ if (*p++ == '\0')
++ break;
++ }
++}
++
++static struct conf_printer kconfig_printer_cb =
++{
++ .print_symbol = kconfig_print_symbol,
++ .print_comment = kconfig_print_comment,
++};
++
++/*
++ * Header printer
++ *
++ * This printer is used when generating the `include/generated/autoconf.h' file.
++ */
++static void
++header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
++{
++
++ switch (sym->type) {
++ case S_BOOLEAN:
++ case S_TRISTATE: {
++ const char *suffix = "";
++
++ switch (*value) {
++ case 'n':
++ break;
++ case 'm':
++ suffix = "_MODULE";
++ /* fall through */
++ default:
++ fprintf(fp, "#define %s%s%s 1\n",
++ CONFIG_, sym->name, suffix);
++ }
++ break;
++ }
++ case S_HEX: {
++ const char *prefix = "";
++
++ if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
++ prefix = "0x";
++ fprintf(fp, "#define %s%s %s%s\n",
++ CONFIG_, sym->name, prefix, value);
++ break;
++ }
++ case S_STRING:
++ case S_INT:
++ fprintf(fp, "#define %s%s %s\n",
++ CONFIG_, sym->name, value);
++ break;
++ default:
++ break;
++ }
++
++}
++
++static void
++header_print_comment(FILE *fp, const char *value, void *arg)
++{
++ const char *p = value;
++ size_t l;
++
++ fprintf(fp, "/*\n");
++ for (;;) {
++ l = strcspn(p, "\n");
++ fprintf(fp, " *");
++ if (l) {
++ fprintf(fp, " ");
++ xfwrite(p, l, 1, fp);
++ p += l;
++ }
++ fprintf(fp, "\n");
++ if (*p++ == '\0')
++ break;
++ }
++ fprintf(fp, " */\n");
++}
++
++static struct conf_printer header_printer_cb =
++{
++ .print_symbol = header_print_symbol,
++ .print_comment = header_print_comment,
++};
++
++/*
++ * Tristate printer
++ *
++ * This printer is used when generating the `include/config/tristate.conf' file.
++ */
++static void
++tristate_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
++{
++
++ if (sym->type == S_TRISTATE && *value != 'n')
++ fprintf(fp, "%s%s=%c\n", CONFIG_, sym->name, (char)toupper(*value));
++}
++
++static struct conf_printer tristate_printer_cb =
++{
++ .print_symbol = tristate_print_symbol,
++ .print_comment = kconfig_print_comment,
++};
++
++static void conf_write_symbol(FILE *fp, struct symbol *sym,
++ struct conf_printer *printer, void *printer_arg)
++{
++ const char *str;
++
++ switch (sym->type) {
++ case S_OTHER:
++ case S_UNKNOWN:
++ break;
++ case S_STRING:
++ str = sym_get_string_value(sym);
++ str = sym_escape_string_value(str);
++ printer->print_symbol(fp, sym, str, printer_arg);
++ free((void *)str);
++ break;
++ default:
++ str = sym_get_string_value(sym);
++ printer->print_symbol(fp, sym, str, printer_arg);
++ }
++}
++
++static void
++conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg)
++{
++ char buf[256];
++
++ snprintf(buf, sizeof(buf),
++ "\n"
++ "Automatically generated file; DO NOT EDIT.\n"
++ "%s\n",
++ rootmenu.prompt->text);
++
++ printer->print_comment(fp, buf, printer_arg);
++}
++
++/*
++ * Write out a minimal config.
++ * All values that has default values are skipped as this is redundant.
++ */
++int conf_write_defconfig(const char *filename)
++{
++ struct symbol *sym;
++ struct menu *menu;
++ FILE *out;
++
++ out = fopen(filename, "w");
++ if (!out)
++ return 1;
++
++ sym_clear_all_valid();
++
++ /* Traverse all menus to find all relevant symbols */
++ menu = rootmenu.list;
++
++ while (menu != NULL)
++ {
++ sym = menu->sym;
++ if (sym == NULL) {
++ if (!menu_is_visible(menu))
++ goto next_menu;
++ } else if (!sym_is_choice(sym)) {
++ sym_calc_value(sym);
++ if (!(sym->flags & SYMBOL_WRITE))
++ goto next_menu;
++ sym->flags &= ~SYMBOL_WRITE;
++ /* If we cannot change the symbol - skip */
++ if (!sym_is_changable(sym))
++ goto next_menu;
++ /* If symbol equals to default value - skip */
++ if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0)
++ goto next_menu;
++
++ /*
++ * If symbol is a choice value and equals to the
++ * default for a choice - skip.
++ * But only if value is bool and equal to "y" and
++ * choice is not "optional".
++ * (If choice is "optional" then all values can be "n")
++ */
++ if (sym_is_choice_value(sym)) {
++ struct symbol *cs;
++ struct symbol *ds;
++
++ cs = prop_get_symbol(sym_get_choice_prop(sym));
++ ds = sym_choice_default(cs);
++ if (!sym_is_optional(cs) && sym == ds) {
++ if ((sym->type == S_BOOLEAN) &&
++ sym_get_tristate_value(sym) == yes)
++ goto next_menu;
++ }
++ }
++ conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
++ }
++next_menu:
++ if (menu->list != NULL) {
++ menu = menu->list;
++ }
++ else if (menu->next != NULL) {
++ menu = menu->next;
++ } else {
++ while ((menu = menu->parent)) {
++ if (menu->next != NULL) {
++ menu = menu->next;
++ break;
++ }
++ }
++ }
++ }
++ fclose(out);
++ return 0;
++}
++
+ int conf_write(const char *name)
+ {
+ FILE *out;
+ struct symbol *sym;
+ struct menu *menu;
+ const char *basename;
+- char dirname[128], tmpname[128], newname[128];
+- int type, l;
+ const char *str;
+- time_t now;
+- int use_timestamp = 1;
+- char *env;
++ char tmpname[PATH_MAX+1], newname[PATH_MAX+1];
++ char *env, *dirname = NULL;
+
+- dirname[0] = 0;
+- if (name == NULL)
+- name = conf_get_configname();
+ if (name && name[0]) {
+ struct stat st;
+ char *slash;
+
+ if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
+- strcpy(dirname, name);
++ dirname = strndup(name, strlen(name) + 1);
+ strcat(dirname, "/");
+ basename = conf_get_configname();
+ } else if ((slash = strrchr(name, '/'))) {
+ int size = slash - name + 1;
+- memcpy(dirname, name, size);
+- dirname[size] = 0;
++ dirname = strndup(name, size);
+ if (slash[1])
+ basename = slash + 1;
+ else
+ basename = conf_get_configname();
+ } else
+ basename = name;
+- } else
+- basename = conf_get_configname();
+-
++ } else {
++ dirname = strdup(conf_get_configname());
++ basename = strdup(base_name(dirname));
++ dirname = dir_name(dirname);
++ }
+ sprintf(newname, "%s%s", dirname, basename);
+ env = getenv("KCONFIG_OVERWRITECONFIG");
+ if (!env || !*env) {
+@@ -434,24 +768,11 @@
+ *tmpname = 0;
+ out = fopen(newname, "w");
+ }
++ free(dirname);
+ if (!out)
+ return 1;
+
+- sym = sym_lookup("VERSION", 0);
+- sym_calc_value(sym);
+- time(&now);
+- env = getenv("KCONFIG_NOTIMESTAMP");
+- if (env && *env)
+- use_timestamp = 0;
+-
+- fprintf(out, _("#\n"
+- "# Automatically generated make config: don't edit\n"
+- "# Version: %s\n"
+- "%s%s"
+- "#\n"),
+- sym_get_string_value(sym),
+- use_timestamp ? "# " : "",
+- use_timestamp ? ctime(&now) : "");
++ conf_write_heading(out, &kconfig_printer_cb, NULL);
+
+ if (!conf_get_changed())
+ sym_clear_all_valid();
+@@ -472,56 +793,11 @@
+ if (!(sym->flags & SYMBOL_WRITE))
+ goto next;
+ sym->flags &= ~SYMBOL_WRITE;
+- type = sym->type;
+- if (type == S_TRISTATE) {
+- sym_calc_value(modules_sym);
+- if (modules_sym->curr.tri == no)
+- type = S_BOOLEAN;
+- }
+- switch (type) {
+- case S_BOOLEAN:
+- case S_TRISTATE:
+- switch (sym_get_tristate_value(sym)) {
+- case no:
+- fprintf(out, "# %s is not set\n", sym->name);
+- break;
+- case mod:
+- fprintf(out, "%s=m\n", sym->name);
+- break;
+- case yes:
+- fprintf(out, "%s=y\n", sym->name);
+- break;
+- }
+- break;
+- case S_STRING:
+- str = sym_get_string_value(sym);
+- fprintf(out, "%s=\"", sym->name);
+- while (1) {
+- l = strcspn(str, "\"\\");
+- if (l) {
+- fwrite(str, l, 1, out);
+- str += l;
+- }
+- if (!*str)
+- break;
+- fprintf(out, "\\%c", *str++);
+- }
+- fputs("\"\n", out);
+- break;
+- case S_HEX:
+- str = sym_get_string_value(sym);
+- if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
+- fprintf(out, "%s=%s\n", sym->name, str);
+- break;
+- }
+- case S_INT:
+- str = sym_get_string_value(sym);
+- fprintf(out, "%s=%s\n", sym->name, str);
+- break;
+- }
++
++ conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
+ }
+
+- next:
++next:
+ if (menu->list) {
+ menu = menu->list;
+ continue;
+@@ -538,38 +814,39 @@
+ fclose(out);
+
+ if (*tmpname) {
+- strcat(dirname, basename);
++ dirname = strndup(basename, strlen(basename) + 4);
+ strcat(dirname, ".old");
+ rename(newname, dirname);
++ free(dirname);
+ if (rename(tmpname, newname))
+ return 1;
+ }
+
+- printf(_("#\n"
+- "# configuration written to %s\n"
+- "#\n"), newname);
++ conf_message(_("configuration written to %s"), newname);
+
+ sym_set_change_count(0);
+
+ return 0;
+ }
+
+-int conf_split_config(void)
++static int conf_split_config(void)
+ {
+- char *name, path[128], opwd[512];
++ const char *name;
++ char path[PATH_MAX+1], opwd[PATH_MAX+1];
+ char *s, *d, c;
+ struct symbol *sym;
+ struct stat sb;
+ int res, i, fd;
+
+- name = getenv("KCONFIG_AUTOCONFIG");
+- if (!name)
+- name = "include/config/auto.conf";
+- conf_read_simple(name, S_DEF_AUTO);
+-
+ if (getcwd(opwd, sizeof(opwd)) == NULL)
+ return 1;
+- if (chdir(dirname(strdup(name))))
++ name = conf_get_autoconfig_name();
++ conf_read_simple(name, S_DEF_AUTO);
++
++ strcpy(path, name);
++ dir_name(path);
++
++ if (chdir(path))
+ return 1;
+
+ res = 0;
+@@ -671,126 +948,85 @@
+
+ int conf_write_autoconf(void)
+ {
+- char opwd[512];
+ struct symbol *sym;
+- const char *str;
+- char *name;
+- FILE *out, *out_h;
+- time_t now;
+- int i, l;
++ const char *name;
++ char cfg_fname[PATH_MAX+1], tristate_fname[PATH_MAX+1],
++ cfgh_fname[PATH_MAX+1];
++ char *dirname;
++ FILE *out, *tristate, *out_h;
++ int i;
+
+- if (getcwd(opwd, sizeof(opwd)) == NULL)
+- return 1;
+- if (chdir(dirname(strdup(conf_get_configname()))))
+- return 1;
+ sym_clear_all_valid();
+
+- file_write_dep("include/config/auto.conf.cmd");
++ sprintf(cfg_fname, "%s.cmd", conf_get_autoconfig_name());
++ file_write_dep(cfg_fname);
+
+ if (conf_split_config())
+ return 1;
+
+- out = fopen(".tmpconfig", "w");
++ dirname = dir_name(strdup(conf_get_configname()));
++ sprintf(cfg_fname, "%s.tmpconfig", dirname);
++ sprintf(tristate_fname, "%s.tmpconfig_tristate", dirname);
++ sprintf(cfgh_fname, "%s.tmpconfig.h", dirname);
++ free(dirname);
++
++ out = fopen(cfg_fname, "w");
+ if (!out)
+ return 1;
+
+- out_h = fopen(".tmpconfig.h", "w");
++ tristate = fopen(tristate_fname, "w");
++ if (!tristate) {
++ fclose(out);
++ return 1;
++ }
++
++ out_h = fopen(cfgh_fname, "w");
+ if (!out_h) {
+ fclose(out);
++ fclose(tristate);
+ return 1;
+ }
+
+- sym = sym_lookup("VERSION", 0);
+- sym_calc_value(sym);
+- time(&now);
+- fprintf(out, "#\n"
+- "# Automatically generated make config: don't edit\n"
+- "# Version: %s\n"
+- "# %s"
+- "#\n",
+- sym_get_string_value(sym), ctime(&now));
+- fprintf(out_h, "/*\n"
+- " * Automatically generated C config: don't edit\n"
+- " * Version: %s\n"
+- " * %s"
+- " */\n"
+- "#define AUTOCONF_INCLUDED\n",
+- sym_get_string_value(sym), ctime(&now));
++ conf_write_heading(out, &kconfig_printer_cb, NULL);
++
++ conf_write_heading(tristate, &tristate_printer_cb, NULL);
++
++ conf_write_heading(out_h, &header_printer_cb, NULL);
+
+ for_all_symbols(i, sym) {
+ sym_calc_value(sym);
+ if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
+ continue;
+- switch (sym->type) {
+- case S_BOOLEAN:
+- case S_TRISTATE:
+- switch (sym_get_tristate_value(sym)) {
+- case no:
+- break;
+- case mod:
+- fprintf(out, "CONFIG_%s=m\n", sym->name);
+- fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
+- break;
+- case yes:
+- fprintf(out, "%s=y\n", sym->name);
+- fprintf(out_h, "#define %s 1\n", sym->name);
+- break;
+- }
+- break;
+- case S_STRING:
+- str = sym_get_string_value(sym);
+- fprintf(out, "%s=\"", sym->name);
+- fprintf(out_h, "#define %s \"", sym->name);
+- while (1) {
+- l = strcspn(str, "\"\\");
+- if (l) {
+- fwrite(str, l, 1, out);
+- fwrite(str, l, 1, out_h);
+- str += l;
+- }
+- if (!*str)
+- break;
+- fprintf(out, "\\%c", *str);
+- fprintf(out_h, "\\%c", *str);
+- str++;
+- }
+- fputs("\"\n", out);
+- fputs("\"\n", out_h);
+- break;
+- case S_HEX:
+- str = sym_get_string_value(sym);
+- if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
+- fprintf(out, "%s=%s\n", sym->name, str);
+- fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
+- break;
+- }
+- case S_INT:
+- str = sym_get_string_value(sym);
+- fprintf(out, "%s=%s\n", sym->name, str);
+- fprintf(out_h, "#define %s %s\n", sym->name, str);
+- break;
+- default:
+- break;
+- }
++
++ /* write symbol to auto.conf, tristate and header files */
++ conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
++
++ conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
++
++ conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
+ }
+ fclose(out);
++ fclose(tristate);
+ fclose(out_h);
+
+ name = getenv("KCONFIG_AUTOHEADER");
+ if (!name)
+- name = "include/config/autoconf.h";
+- if (rename(".tmpconfig.h", name))
++ name = "include/generated/autoconf.h";
++ if (rename(cfgh_fname, name))
+ return 1;
+- name = getenv("KCONFIG_AUTOCONFIG");
++ name = getenv("KCONFIG_TRISTATE");
+ if (!name)
+- name = "include/config/auto.conf";
++ name = "include/config/tristate.conf";
++ if (rename(tristate_fname, name))
++ return 1;
++ name = conf_get_autoconfig_name();
+ /*
+ * This must be the last step, kbuild has a dependency on auto.conf
+ * and this marks the successful completion of the previous steps.
+ */
+- if (rename(".tmpconfig", name))
++ if (rename(cfg_fname, name))
+ return 1;
+- chdir(opwd);
++
+ return 0;
+ }
+
+@@ -821,20 +1057,131 @@
+ conf_changed_callback = fn;
+ }
+
++static bool randomize_choice_values(struct symbol *csym)
++{
++ struct property *prop;
++ struct symbol *sym;
++ struct expr *e;
++ int cnt, def;
+
+-void conf_set_all_new_symbols(enum conf_def_mode mode)
++ /*
++ * If choice is mod then we may have more items selected
++ * and if no then no-one.
++ * In both cases stop.
++ */
++ if (csym->curr.tri != yes)
++ return false;
++
++ prop = sym_get_choice_prop(csym);
++
++ /* count entries in choice block */
++ cnt = 0;
++ expr_list_for_each_sym(prop->expr, e, sym)
++ cnt++;
++
++ /*
++ * find a random value and set it to yes,
++ * set the rest to no so we have only one set
++ */
++ def = (rand() % cnt);
++
++ cnt = 0;
++ expr_list_for_each_sym(prop->expr, e, sym) {
++ if (def == cnt++) {
++ sym->def[S_DEF_USER].tri = yes;
++ csym->def[S_DEF_USER].val = sym;
++ }
++ else {
++ sym->def[S_DEF_USER].tri = no;
++ }
++ sym->flags |= SYMBOL_DEF_USER;
++ /* clear VALID to get value calculated */
++ sym->flags &= ~SYMBOL_VALID;
++ }
++ csym->flags |= SYMBOL_DEF_USER;
++ /* clear VALID to get value calculated */
++ csym->flags &= ~(SYMBOL_VALID);
++
++ return true;
++}
++
++void set_all_choice_values(struct symbol *csym)
+ {
+- struct symbol *sym, *csym;
+ struct property *prop;
++ struct symbol *sym;
+ struct expr *e;
+- int i, cnt, def;
++
++ prop = sym_get_choice_prop(csym);
++
++ /*
++ * Set all non-assinged choice values to no
++ */
++ expr_list_for_each_sym(prop->expr, e, sym) {
++ if (!sym_has_value(sym))
++ sym->def[S_DEF_USER].tri = no;
++ }
++ csym->flags |= SYMBOL_DEF_USER;
++ /* clear VALID to get value calculated */
++ csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
++}
++
++bool conf_set_all_new_symbols(enum conf_def_mode mode)
++{
++ struct symbol *sym, *csym;
++ int i, cnt, pby, pty, ptm; /* pby: probability of boolean = y
++ * pty: probability of tristate = y
++ * ptm: probability of tristate = m
++ */
++
++ pby = 50; pty = ptm = 33; /* can't go as the default in switch-case
++ * below, otherwise gcc whines about
++ * -Wmaybe-uninitialized */
++ if (mode == def_random) {
++ int n, p[3];
++ char *env = getenv("KCONFIG_PROBABILITY");
++ n = 0;
++ while( env && *env ) {
++ char *endp;
++ int tmp = strtol( env, &endp, 10 );
++ if( tmp >= 0 && tmp <= 100 ) {
++ p[n++] = tmp;
++ } else {
++ errno = ERANGE;
++ perror( "KCONFIG_PROBABILITY" );
++ exit( 1 );
++ }
++ env = (*endp == ':') ? endp+1 : endp;
++ if( n >=3 ) {
++ break;
++ }
++ }
++ switch( n ) {
++ case 1:
++ pby = p[0]; ptm = pby/2; pty = pby-ptm;
++ break;
++ case 2:
++ pty = p[0]; ptm = p[1]; pby = pty + ptm;
++ break;
++ case 3:
++ pby = p[0]; pty = p[1]; ptm = p[2];
++ break;
++ }
++
++ if( pty+ptm > 100 ) {
++ errno = ERANGE;
++ perror( "KCONFIG_PROBABILITY" );
++ exit( 1 );
++ }
++ }
++ bool has_changed = false;
+
+ for_all_symbols(i, sym) {
+- if (sym_has_value(sym))
++ if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
+ continue;
+ switch (sym_get_type(sym)) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
++ has_changed = true;
+ switch (mode) {
+ case def_yes:
+ sym->def[S_DEF_USER].tri = yes;
+@@ -846,7 +1193,15 @@
+ sym->def[S_DEF_USER].tri = no;
+ break;
+ case def_random:
+- sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
++ sym->def[S_DEF_USER].tri = no;
++ cnt = rand() % 100;
++ if (sym->type == S_TRISTATE) {
++ if (cnt < pty)
++ sym->def[S_DEF_USER].tri = yes;
++ else if (cnt < (pty+ptm))
++ sym->def[S_DEF_USER].tri = mod;
++ } else if (cnt < pby)
++ sym->def[S_DEF_USER].tri = yes;
+ break;
+ default:
+ continue;
+@@ -862,51 +1217,35 @@
+
+ sym_clear_all_valid();
+
+- if (mode != def_random)
+- return;
+ /*
+ * We have different type of choice blocks.
+- * If curr.tri equal to mod then we can select several
++ * If curr.tri equals to mod then we can select several
+ * choice symbols in one block.
+ * In this case we do nothing.
+- * If curr.tri equal yes then only one symbol can be
++ * If curr.tri equals yes then only one symbol can be
+ * selected in a choice block and we set it to yes,
+ * and the rest to no.
+ */
++ if (mode != def_random) {
++ for_all_symbols(i, csym) {
++ if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
++ sym_is_choice_value(csym))
++ csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
++ }
++ }
++
+ for_all_symbols(i, csym) {
+ if (sym_has_value(csym) || !sym_is_choice(csym))
+ continue;
+
+ sym_calc_value(csym);
+-
+- if (csym->curr.tri != yes)
+- continue;
+-
+- prop = sym_get_choice_prop(csym);
+-
+- /* count entries in choice block */
+- cnt = 0;
+- expr_list_for_each_sym(prop->expr, e, sym)
+- cnt++;
+-
+- /*
+- * find a random value and set it to yes,
+- * set the rest to no so we have only one set
+- */
+- def = (rand() % cnt);
+-
+- cnt = 0;
+- expr_list_for_each_sym(prop->expr, e, sym) {
+- if (def == cnt++) {
+- sym->def[S_DEF_USER].tri = yes;
+- csym->def[S_DEF_USER].val = sym;
+- }
+- else {
+- sym->def[S_DEF_USER].tri = no;
+- }
++ if (mode == def_random)
++ has_changed = randomize_choice_values(csym);
++ else {
++ set_all_choice_values(csym);
++ has_changed = true;
+ }
+- csym->flags |= SYMBOL_DEF_USER;
+- /* clear VALID to get value calculated */
+- csym->flags &= ~(SYMBOL_VALID);
+ }
++
++ return has_changed;
+ }
+diff -Nur uClibc-0.9.33.2/extra/config/expr.c uClibc-git/extra/config/expr.c
+--- uClibc-0.9.33.2/extra/config/expr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/expr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,15 +7,13 @@
+ #include <stdlib.h>
+ #include <string.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+ #define DEBUG_EXPR 0
+
+ struct expr *expr_alloc_symbol(struct symbol *sym)
+ {
+- struct expr *e = malloc(sizeof(*e));
+- memset(e, 0, sizeof(*e));
++ struct expr *e = xcalloc(1, sizeof(*e));
+ e->type = E_SYMBOL;
+ e->left.sym = sym;
+ return e;
+@@ -23,8 +21,7 @@
+
+ struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
+ {
+- struct expr *e = malloc(sizeof(*e));
+- memset(e, 0, sizeof(*e));
++ struct expr *e = xcalloc(1, sizeof(*e));
+ e->type = type;
+ e->left.expr = ce;
+ return e;
+@@ -32,8 +29,7 @@
+
+ struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
+ {
+- struct expr *e = malloc(sizeof(*e));
+- memset(e, 0, sizeof(*e));
++ struct expr *e = xcalloc(1, sizeof(*e));
+ e->type = type;
+ e->left.expr = e1;
+ e->right.expr = e2;
+@@ -42,8 +38,7 @@
+
+ struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
+ {
+- struct expr *e = malloc(sizeof(*e));
+- memset(e, 0, sizeof(*e));
++ struct expr *e = xcalloc(1, sizeof(*e));
+ e->type = type;
+ e->left.sym = s1;
+ e->right.sym = s2;
+@@ -64,14 +59,14 @@
+ return e2 ? expr_alloc_two(E_OR, e1, e2) : e1;
+ }
+
+-struct expr *expr_copy(struct expr *org)
++struct expr *expr_copy(const struct expr *org)
+ {
+ struct expr *e;
+
+ if (!org)
+ return NULL;
+
+- e = malloc(sizeof(*org));
++ e = xmalloc(sizeof(*org));
+ memcpy(e, org, sizeof(*org));
+ switch (org->type) {
+ case E_SYMBOL:
+@@ -348,7 +343,7 @@
+ /*
+ * e1 || e2 -> ?
+ */
+-struct expr *expr_join_or(struct expr *e1, struct expr *e2)
++static struct expr *expr_join_or(struct expr *e1, struct expr *e2)
+ {
+ struct expr *tmp;
+ struct symbol *sym1, *sym2;
+@@ -412,7 +407,7 @@
+ return NULL;
+ }
+
+-struct expr *expr_join_and(struct expr *e1, struct expr *e2)
++static struct expr *expr_join_and(struct expr *e1, struct expr *e2)
+ {
+ struct expr *tmp;
+ struct symbol *sym1, *sym2;
+@@ -1013,6 +1008,48 @@
+ #endif
+ }
+
++static inline struct expr *
++expr_get_leftmost_symbol(const struct expr *e)
++{
++
++ if (e == NULL)
++ return NULL;
++
++ while (e->type != E_SYMBOL)
++ e = e->left.expr;
++
++ return expr_copy(e);
++}
++
++/*
++ * Given expression `e1' and `e2', returns the leaf of the longest
++ * sub-expression of `e1' not containing 'e2.
++ */
++struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2)
++{
++ struct expr *ret;
++
++ switch (e1->type) {
++ case E_OR:
++ return expr_alloc_and(
++ expr_simplify_unmet_dep(e1->left.expr, e2),
++ expr_simplify_unmet_dep(e1->right.expr, e2));
++ case E_AND: {
++ struct expr *e;
++ e = expr_alloc_and(expr_copy(e1), expr_copy(e2));
++ e = expr_eliminate_dups(e);
++ ret = (!expr_eq(e, e1)) ? e1 : NULL;
++ expr_free(e);
++ break;
++ }
++ default:
++ ret = e1;
++ break;
++ }
++
++ return expr_get_leftmost_symbol(ret);
++}
++
+ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)
+ {
+ if (!e) {
+@@ -1087,7 +1124,7 @@
+
+ static void expr_print_file_helper(void *data, struct symbol *sym, const char *str)
+ {
+- fwrite(str, strlen(str), 1, data);
++ xfwrite(str, strlen(str), 1, data);
+ }
+
+ void expr_fprint(struct expr *e, FILE *out)
+@@ -1097,7 +1134,32 @@
+
+ static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str)
+ {
+- str_append((struct gstr*)data, str);
++ struct gstr *gs = (struct gstr*)data;
++ const char *sym_str = NULL;
++
++ if (sym)
++ sym_str = sym_get_string_value(sym);
++
++ if (gs->max_width) {
++ unsigned extra_length = strlen(str);
++ const char *last_cr = strrchr(gs->s, '\n');
++ unsigned last_line_length;
++
++ if (sym_str)
++ extra_length += 4 + strlen(sym_str);
++
++ if (!last_cr)
++ last_cr = gs->s;
++
++ last_line_length = strlen(gs->s) - (last_cr - gs->s);
++
++ if ((last_line_length + extra_length) > gs->max_width)
++ str_append(gs, "\\\n");
++ }
++
++ str_append(gs, str);
++ if (sym && sym->type != S_UNKNOWN)
++ str_printf(gs, " [=%s]", sym_str);
+ }
+
+ void expr_gstr_print(struct expr *e, struct gstr *gs)
+diff -Nur uClibc-0.9.33.2/extra/config/expr.h uClibc-git/extra/config/expr.h
+--- uClibc-0.9.33.2/extra/config/expr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/expr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -10,7 +10,9 @@
+ extern "C" {
+ #endif
+
++#include <assert.h>
+ #include <stdio.h>
++#include "list.h"
+ #ifndef __cplusplus
+ #include <stdbool.h>
+ #endif
+@@ -18,14 +20,10 @@
+ struct file {
+ struct file *next;
+ struct file *parent;
+- char *name;
++ const char *name;
+ int lineno;
+- int flags;
+ };
+
+-#define FILE_BUSY 0x0001
+-#define FILE_SCANNED 0x0002
+-
+ typedef enum tristate {
+ no, mod, yes
+ } tristate;
+@@ -83,10 +81,11 @@
+ tristate visible;
+ int flags;
+ struct property *prop;
++ struct expr_value dir_dep;
+ struct expr_value rev_dep;
+ };
+
+-#define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
++#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
+
+ #define SYMBOL_CONST 0x0001 /* symbol is const */
+ #define SYMBOL_CHECK 0x0008 /* used during dependency checking */
+@@ -107,9 +106,11 @@
+ #define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */
+ #define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */
+
++/* choice values need to be set before calculating this symbol value */
++#define SYMBOL_NEED_SET_CHOICE_VALUES 0x100000
++
+ #define SYMBOL_MAXLENGTH 256
+-#define SYMBOL_HASHSIZE 257
+-#define SYMBOL_HASHMASK 0xff
++#define SYMBOL_HASHSIZE 9973
+
+ /* A property represent the config options that can be associated
+ * with a config "symbol".
+@@ -132,6 +133,7 @@
+ P_SELECT, /* select BAR */
+ P_RANGE, /* range 7..100 (for a symbol) */
+ P_ENV, /* value from environment variable */
++ P_SYMBOL, /* where a symbol is defined */
+ };
+
+ struct property {
+@@ -163,6 +165,7 @@
+ struct menu *list;
+ struct symbol *sym;
+ struct property *prompt;
++ struct expr *visibility;
+ struct expr *dep;
+ unsigned int flags;
+ char *help;
+@@ -174,7 +177,14 @@
+ #define MENU_CHANGED 0x0001
+ #define MENU_ROOT 0x0002
+
+-#ifndef SWIG
++struct jump_key {
++ struct list_head entries;
++ size_t offset;
++ struct menu *target;
++ int index;
++};
++
++#define JUMP_NB 9
+
+ extern struct file *file_list;
+ extern struct file *current_file;
+@@ -190,7 +200,7 @@
+ struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
+ struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
+ struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
+-struct expr *expr_copy(struct expr *org);
++struct expr *expr_copy(const struct expr *org);
+ void expr_free(struct expr *e);
+ int expr_eq(struct expr *e1, struct expr *e2);
+ void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
+@@ -205,6 +215,7 @@
+ struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
+ void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
+ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
++struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2);
+
+ void expr_fprint(struct expr *e, FILE *out);
+ struct gstr; /* forward */
+@@ -219,7 +230,6 @@
+ {
+ return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
+ }
+-#endif
+
+ #ifdef __cplusplus
+ }
+diff -Nur uClibc-0.9.33.2/extra/config/gconf.c uClibc-git/extra/config/gconf.c
+--- uClibc-0.9.33.2/extra/config/gconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/gconf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,7 @@
+ # include <config.h>
+ #endif
+
++#include <stdlib.h>
+ #include "lkc.h"
+ #include "images.c"
+
+@@ -22,7 +23,6 @@
+ #include <string.h>
+ #include <unistd.h>
+ #include <time.h>
+-#include <stdlib.h>
+
+ //#define DEBUG
+
+@@ -30,13 +30,16 @@
+ SINGLE_VIEW, SPLIT_VIEW, FULL_VIEW
+ };
+
++enum {
++ OPT_NORMAL, OPT_ALL, OPT_PROMPT
++};
++
+ static gint view_mode = FULL_VIEW;
+ static gboolean show_name = TRUE;
+ static gboolean show_range = TRUE;
+ static gboolean show_value = TRUE;
+-static gboolean show_all = FALSE;
+-static gboolean show_debug = FALSE;
+ static gboolean resizeable = FALSE;
++static int opt_mode = OPT_NORMAL;
+
+ GtkWidget *main_wnd = NULL;
+ GtkWidget *tree1_w = NULL; // left frame
+@@ -76,36 +79,7 @@
+
+ /* Helping/Debugging Functions */
+
+-
+-const char *dbg_print_stype(int val)
+-{
+- static char buf[256];
+-
+- bzero(buf, 256);
+-
+- if (val == S_UNKNOWN)
+- strcpy(buf, "unknown");
+- if (val == S_BOOLEAN)
+- strcpy(buf, "boolean");
+- if (val == S_TRISTATE)
+- strcpy(buf, "tristate");
+- if (val == S_INT)
+- strcpy(buf, "int");
+- if (val == S_HEX)
+- strcpy(buf, "hex");
+- if (val == S_STRING)
+- strcpy(buf, "string");
+- if (val == S_OTHER)
+- strcpy(buf, "other");
+-
+-#ifdef DEBUG
+- printf("%s", buf);
+-#endif
+-
+- return buf;
+-}
+-
+-const char *dbg_print_flags(int val)
++const char *dbg_sym_flags(int val)
+ {
+ static char buf[256];
+
+@@ -131,40 +105,10 @@
+ strcat(buf, "auto/");
+
+ buf[strlen(buf) - 1] = '\0';
+-#ifdef DEBUG
+- printf("%s", buf);
+-#endif
+
+ return buf;
+ }
+
+-const char *dbg_print_ptype(int val)
+-{
+- static char buf[256];
+-
+- bzero(buf, 256);
+-
+- if (val == P_UNKNOWN)
+- strcpy(buf, "unknown");
+- if (val == P_PROMPT)
+- strcpy(buf, "prompt");
+- if (val == P_COMMENT)
+- strcpy(buf, "comment");
+- if (val == P_MENU)
+- strcpy(buf, "menu");
+- if (val == P_DEFAULT)
+- strcpy(buf, "default");
+- if (val == P_CHOICE)
+- strcpy(buf, "choice");
+-
+-#ifdef DEBUG
+- printf("%s", buf);
+-#endif
+-
+- return buf;
+-}
+-
+-
+ void replace_button_icon(GladeXML * xml, GdkDrawable * window,
+ GtkStyle * style, gchar * btn_name, gchar ** xpm)
+ {
+@@ -189,7 +133,6 @@
+ GladeXML *xml;
+ GtkWidget *widget;
+ GtkTextBuffer *txtbuf;
+- char title[256];
+ GtkStyle *style;
+
+ xml = glade_xml_new(glade_file, "window1", NULL);
+@@ -266,9 +209,7 @@
+ /*"style", PANGO_STYLE_OBLIQUE, */
+ NULL);
+
+- sprintf(title, _("uClibc v%s Configuration"),
+- getenv("VERSION"));
+- gtk_window_set_title(GTK_WINDOW(main_wnd), title);
++ gtk_window_set_title(GTK_WINDOW(main_wnd), rootmenu.prompt->text);
+
+ gtk_widget_show(main_wnd);
+ }
+@@ -312,7 +253,7 @@
+
+ gtk_tree_view_set_model(view, model1);
+ gtk_tree_view_set_headers_visible(view, TRUE);
+- gtk_tree_view_set_rules_hint(view, FALSE);
++ gtk_tree_view_set_rules_hint(view, TRUE);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_append_column(view, column);
+@@ -344,8 +285,6 @@
+ static void renderer_edited(GtkCellRendererText * cell,
+ const gchar * path_string,
+ const gchar * new_text, gpointer user_data);
+-static void renderer_toggled(GtkCellRendererToggle * cellrenderertoggle,
+- gchar * arg1, gpointer user_data);
+
+ void init_right_tree(void)
+ {
+@@ -357,7 +296,7 @@
+
+ gtk_tree_view_set_model(view, model2);
+ gtk_tree_view_set_headers_visible(view, TRUE);
+- gtk_tree_view_set_rules_hint(view, FALSE);
++ gtk_tree_view_set_rules_hint(view, TRUE);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_append_column(view, column);
+@@ -379,8 +318,6 @@
+ "inconsistent", COL_BTNINC,
+ "visible", COL_BTNVIS,
+ "radio", COL_BTNRAD, NULL);
+- /*g_signal_connect(G_OBJECT(renderer), "toggled",
+- G_CALLBACK(renderer_toggled), NULL); */
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
+ renderer, FALSE);
+@@ -456,19 +393,9 @@
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ const char *prompt = _(menu_get_prompt(menu));
+- gchar *name;
+- const char *help;
+-
+- help = menu_get_help(menu);
+-
+- /* Gettextize if the help text not empty */
+- if ((help != 0) && (help[0] != 0))
+- help = _(help);
++ struct gstr help = str_new();
+
+- if (menu->sym && menu->sym->name)
+- name = g_strdup_printf(menu->sym->name);
+- else
+- name = g_strdup("");
++ menu_get_ext_help(menu, &help);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
+ gtk_text_buffer_get_bounds(buffer, &start, &end);
+@@ -478,14 +405,11 @@
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ gtk_text_buffer_insert_with_tags(buffer, &end, prompt, -1, tag1,
+ NULL);
+- gtk_text_buffer_insert_at_cursor(buffer, " ", 1);
+- gtk_text_buffer_get_end_iter(buffer, &end);
+- gtk_text_buffer_insert_with_tags(buffer, &end, name, -1, tag1,
+- NULL);
+ gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);
+ gtk_text_buffer_get_end_iter(buffer, &end);
+- gtk_text_buffer_insert_with_tags(buffer, &end, help, -1, tag2,
++ gtk_text_buffer_insert_with_tags(buffer, &end, str_get(&help), -1, tag2,
+ NULL);
++ str_free(&help);
+ }
+
+
+@@ -710,20 +634,29 @@
+
+
+ void
+-on_show_all_options1_activate(GtkMenuItem * menuitem, gpointer user_data)
++on_set_option_mode1_activate(GtkMenuItem *menuitem, gpointer user_data)
+ {
+- show_all = GTK_CHECK_MENU_ITEM(menuitem)->active;
++ opt_mode = OPT_NORMAL;
++ gtk_tree_store_clear(tree2);
++ display_tree(&rootmenu); /* instead of update_tree to speed-up */
++}
+
++
++void
++on_set_option_mode2_activate(GtkMenuItem *menuitem, gpointer user_data)
++{
++ opt_mode = OPT_ALL;
+ gtk_tree_store_clear(tree2);
+- display_tree(&rootmenu); // instead of update_tree to speed-up
++ display_tree(&rootmenu); /* instead of update_tree to speed-up */
+ }
+
+
+ void
+-on_show_debug_info1_activate(GtkMenuItem * menuitem, gpointer user_data)
++on_set_option_mode3_activate(GtkMenuItem *menuitem, gpointer user_data)
+ {
+- show_debug = GTK_CHECK_MENU_ITEM(menuitem)->active;
+- update_tree(&rootmenu, NULL);
++ opt_mode = OPT_PROMPT;
++ gtk_tree_store_clear(tree2);
++ display_tree(&rootmenu); /* instead of update_tree to speed-up */
+ }
+
+
+@@ -732,7 +665,6 @@
+ GtkWidget *dialog;
+ const gchar *intro_text = _(
+ "Welcome to gkc, the GTK+ graphical configuration tool\n"
+- "for uClibc.\n"
+ "For each option, a blank box indicates the feature is disabled, a\n"
+ "check indicates it is enabled, and a dot indicates that it is to\n"
+ "be compiled as a module. Clicking on the box will cycle through the three states.\n"
+@@ -751,7 +683,7 @@
+ dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+- GTK_BUTTONS_CLOSE, intro_text);
++ GTK_BUTTONS_CLOSE, "%s", intro_text);
+ g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(dialog));
+@@ -769,7 +701,7 @@
+ dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+- GTK_BUTTONS_CLOSE, about_text);
++ GTK_BUTTONS_CLOSE, "%s", about_text);
+ g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(dialog));
+@@ -788,7 +720,7 @@
+ dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+- GTK_BUTTONS_CLOSE, license_text);
++ GTK_BUTTONS_CLOSE, "%s", license_text);
+ g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(dialog));
+@@ -820,7 +752,6 @@
+ void on_single_clicked(GtkButton * button, gpointer user_data)
+ {
+ view_mode = SINGLE_VIEW;
+- gtk_paned_set_position(GTK_PANED(hpaned), 0);
+ gtk_widget_hide(tree1_w);
+ current = &rootmenu;
+ display_tree_part();
+@@ -846,7 +777,6 @@
+ void on_full_clicked(GtkButton * button, gpointer user_data)
+ {
+ view_mode = FULL_VIEW;
+- gtk_paned_set_position(GTK_PANED(hpaned), 0);
+ gtk_widget_hide(tree1_w);
+ if (tree2)
+ gtk_tree_store_clear(tree2);
+@@ -900,7 +830,7 @@
+ static void change_sym_value(struct menu *menu, gint col)
+ {
+ struct symbol *sym = menu->sym;
+- tristate oldval, newval;
++ tristate newval;
+
+ if (!sym)
+ return;
+@@ -917,7 +847,6 @@
+ switch (sym_get_type(sym)) {
+ case S_BOOLEAN:
+ case S_TRISTATE:
+- oldval = sym_get_tristate_value(sym);
+ if (!sym_tristate_within_range(sym, newval))
+ newval = yes;
+ sym_set_tristate_value(sym, newval);
+@@ -954,35 +883,6 @@
+ display_tree_part(); //fixme: keep exp/coll
+ }
+
+-static void renderer_toggled(GtkCellRendererToggle * cell,
+- gchar * path_string, gpointer user_data)
+-{
+- GtkTreePath *path, *sel_path = NULL;
+- GtkTreeIter iter, sel_iter;
+- GtkTreeSelection *sel;
+- struct menu *menu;
+-
+- path = gtk_tree_path_new_from_string(path_string);
+- if (!gtk_tree_model_get_iter(model2, &iter, path))
+- return;
+-
+- sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree2_w));
+- if (gtk_tree_selection_get_selected(sel, NULL, &sel_iter))
+- sel_path = gtk_tree_model_get_path(model2, &sel_iter);
+- if (!sel_path)
+- goto out1;
+- if (gtk_tree_path_compare(path, sel_path))
+- goto out2;
+-
+- gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
+- toggle_sym_value(menu);
+-
+- out2:
+- gtk_tree_path_free(sel_path);
+- out1:
+- gtk_tree_path_free(path);
+-}
+-
+ static gint column2index(GtkTreeViewColumn * column)
+ {
+ gint i;
+@@ -1174,9 +1074,12 @@
+
+ row[COL_OPTION] =
+ g_strdup_printf("%s %s", _(menu_get_prompt(menu)),
+- sym && sym_has_value(sym) ? "(NEW)" : "");
++ sym && !sym_has_value(sym) ? "(NEW)" : "");
+
+- if (show_all && !menu_is_visible(menu))
++ if (opt_mode == OPT_ALL && !menu_is_visible(menu))
++ row[COL_COLOR] = g_strdup("DarkGray");
++ else if (opt_mode == OPT_PROMPT &&
++ menu_has_prompt(menu) && !menu_is_visible(menu))
+ row[COL_COLOR] = g_strdup("DarkGray");
+ else
+ row[COL_COLOR] = g_strdup("Black");
+@@ -1235,6 +1138,7 @@
+ row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
+ if (sym_is_choice(sym))
+ break;
++ /* fall through */
+ case S_TRISTATE:
+ val = sym_get_tristate_value(sym);
+ switch (val) {
+@@ -1373,7 +1277,6 @@
+ gboolean valid;
+ GtkTreeIter *sibling;
+ struct symbol *sym;
+- struct property *prop;
+ struct menu *menu1, *menu2;
+
+ if (src == &rootmenu)
+@@ -1382,7 +1285,6 @@
+ valid = gtk_tree_model_iter_children(model2, child2, dst);
+ for (child1 = src->list; child1; child1 = child1->next) {
+
+- prop = child1->prompt;
+ sym = child1->sym;
+
+ reparse:
+@@ -1399,16 +1301,20 @@
+ menu2 ? menu_get_prompt(menu2) : "nil");
+ #endif
+
+- if (!menu_is_visible(child1) && !show_all) { // remove node
++ if ((opt_mode == OPT_NORMAL && !menu_is_visible(child1)) ||
++ (opt_mode == OPT_PROMPT && !menu_has_prompt(child1)) ||
++ (opt_mode == OPT_ALL && !menu_get_prompt(child1))) {
++
++ /* remove node */
+ if (gtktree_iter_find_node(dst, menu1) != NULL) {
+ memcpy(&tmp, child2, sizeof(GtkTreeIter));
+ valid = gtk_tree_model_iter_next(model2,
+ child2);
+ gtk_tree_store_remove(tree2, &tmp);
+ if (!valid)
+- return; // next parent
++ return; /* next parent */
+ else
+- goto reparse; // next child
++ goto reparse; /* next child */
+ } else
+ continue;
+ }
+@@ -1477,17 +1383,19 @@
+ && (tree == tree2))
+ continue;
+
+- if (menu_is_visible(child) || show_all)
++ if ((opt_mode == OPT_NORMAL && menu_is_visible(child)) ||
++ (opt_mode == OPT_PROMPT && menu_has_prompt(child)) ||
++ (opt_mode == OPT_ALL && menu_get_prompt(child)))
+ place_node(child, fill_row(child));
+ #ifdef DEBUG
+ printf("%*c%s: ", indent, ' ', menu_get_prompt(child));
+ printf("%s", child->flags & MENU_ROOT ? "rootmenu | " : "");
+- dbg_print_ptype(ptype);
++ printf("%s", prop_get_type_name(ptype));
+ printf(" | ");
+ if (sym) {
+- dbg_print_stype(sym->type);
++ printf("%s", sym_type_name(sym->type));
+ printf(" | ");
+- dbg_print_flags(sym->flags);
++ printf("%s", dbg_sym_flags(sym->flags));
+ printf("\n");
+ } else
+ printf("\n");
+@@ -1499,6 +1407,12 @@
+ if (((menu != &rootmenu) && !(menu->flags & MENU_ROOT))
+ || (view_mode == FULL_VIEW)
+ || (view_mode == SPLIT_VIEW))*/
++
++ /* Change paned position if the view is not in 'split mode' */
++ if (view_mode == SINGLE_VIEW || view_mode == FULL_VIEW) {
++ gtk_paned_set_position(GTK_PANED(hpaned), 0);
++ }
++
+ if (((view_mode == SINGLE_VIEW) && (menu->flags & MENU_ROOT))
+ || (view_mode == FULL_VIEW)
+ || (view_mode == SPLIT_VIEW)) {
+@@ -1557,10 +1471,6 @@
+ char *env;
+ gchar *glade_file;
+
+-#ifndef LKC_DIRECT_LINK
+- kconfig_load();
+-#endif
+-
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset(PACKAGE, "UTF-8");
+ textdomain(PACKAGE);
+@@ -1582,12 +1492,6 @@
+ else
+ glade_file = g_strconcat(g_get_current_dir(), "/", av[0], ".glade", NULL);
+
+- /* Load the interface and connect signals */
+- init_main_window(glade_file);
+- init_tree_model();
+- init_left_tree();
+- init_right_tree();
+-
+ /* Conf stuffs */
+ if (ac > 1 && av[1][0] == '-') {
+ switch (av[1][1]) {
+@@ -1607,6 +1511,12 @@
+ fixup_rootmenu(&rootmenu);
+ conf_read(NULL);
+
++ /* Load the interface and connect signals */
++ init_main_window(glade_file);
++ init_tree_model();
++ init_left_tree();
++ init_right_tree();
++
+ switch (view_mode) {
+ case SINGLE_VIEW:
+ display_tree_part();
+diff -Nur uClibc-0.9.33.2/extra/config/gconf.glade uClibc-git/extra/config/gconf.glade
+--- uClibc-0.9.33.2/extra/config/gconf.glade 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/gconf.glade 2014-02-03 12:32:56.000000000 +0100
+@@ -1,11 +1,10 @@
+ <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+ <glade-interface>
+
+ <widget class="GtkWindow" id="window1">
+ <property name="visible">True</property>
+- <property name="title" translatable="yes">Gtk uClibc Configurator</property>
++ <property name="title" translatable="yes">Gtk uCLibc Configurator</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+@@ -190,26 +189,40 @@
+ </child>
+
+ <child>
+- <widget class="GtkCheckMenuItem" id="show_all_options1">
++ <widget class="GtkRadioMenuItem" id="set_option_mode1">
++ <property name="visible">True</property>
++ <property name="tooltip" translatable="yes">Show normal options</property>
++ <property name="label" translatable="yes">Show normal options</property>
++ <property name="use_underline">True</property>
++ <property name="active">True</property>
++ <signal name="activate" handler="on_set_option_mode1_activate"/>
++ </widget>
++ </child>
++
++ <child>
++ <widget class="GtkRadioMenuItem" id="set_option_mode2">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Show all options</property>
+ <property name="label" translatable="yes">Show all _options</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+- <signal name="activate" handler="on_show_all_options1_activate"/>
++ <property name="group">set_option_mode1</property>
++ <signal name="activate" handler="on_set_option_mode2_activate"/>
+ </widget>
+ </child>
+
+ <child>
+- <widget class="GtkCheckMenuItem" id="show_debug_info1">
++ <widget class="GtkRadioMenuItem" id="set_option_mode3">
+ <property name="visible">True</property>
+- <property name="tooltip" translatable="yes">Show masked options</property>
+- <property name="label" translatable="yes">Show _debug info</property>
++ <property name="tooltip" translatable="yes">Show all options with prompts</property>
++ <property name="label" translatable="yes">Show all prompt options</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+- <signal name="activate" handler="on_show_debug_info1_activate"/>
++ <property name="group">set_option_mode1</property>
++ <signal name="activate" handler="on_set_option_mode3_activate"/>
+ </widget>
+ </child>
++
+ </widget>
+ </child>
+ </widget>
+@@ -547,7 +560,7 @@
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+- <property name="enable_search">True</property>
++ <property name="enable_search">False</property>
+ <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:58:22 GMT"/>
+ <signal name="button_press_event" handler="on_treeview1_button_press_event" last_modification_time="Sun, 12 Jan 2003 16:03:52 GMT"/>
+ <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 16:11:44 GMT"/>
+@@ -582,7 +595,7 @@
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+- <property name="enable_search">True</property>
++ <property name="enable_search">False</property>
+ <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:57:55 GMT"/>
+ <signal name="button_press_event" handler="on_treeview2_button_press_event" last_modification_time="Sun, 12 Jan 2003 15:57:58 GMT"/>
+ <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 15:58:01 GMT"/>
+diff -Nur uClibc-0.9.33.2/extra/config/.gitignore uClibc-git/extra/config/.gitignore
+--- uClibc-0.9.33.2/extra/config/.gitignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/.gitignore 2014-02-03 12:32:56.000000000 +0100
+@@ -2,18 +2,21 @@
+ # Generated files
+ #
+ config*
+-lex.*.c
++*.lex.c
+ *.tab.c
+ *.tab.h
+ zconf.hash.c
+ *.moc
+-lkc_defs.h
++gconf.glade.h
++*.pot
++*.mo
+
+ #
+ # configuration programs
+ #
+ conf
+ mconf
++nconf
+ qconf
+ gconf
+ kxgettext
+diff -Nur uClibc-0.9.33.2/extra/config/kconfig-language.txt uClibc-git/extra/config/kconfig-language.txt
+--- uClibc-0.9.33.2/extra/config/kconfig-language.txt 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/kconfig-language.txt 2014-02-03 12:32:56.000000000 +0100
+@@ -112,7 +112,13 @@
+ (no prompts anywhere) and for symbols with no dependencies.
+ That will limit the usefulness but on the other hand avoid
+ the illegal configurations all over.
+- kconfig should one day warn about such things.
++
++- limiting menu display: "visible if" <expr>
++ This attribute is only applicable to menu blocks, if the condition is
++ false, the menu block is not displayed to the user (the symbols
++ contained there can still be selected by other symbols, though). It is
++ similar to a conditional "prompt" attribute for individual menu
++ entries. Default value of "visible" is true.
+
+ - numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
+ This allows to limit the range of possible input values for int
+@@ -181,7 +187,7 @@
+ (7) Returns the result of max(/expr/, /expr/).
+
+ An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
+-respectively for calculations). A menu entry becomes visible when it's
++respectively for calculations). A menu entry becomes visible when its
+ expression evaluates to 'm' or 'y'.
+
+ There are two types of symbols: constant and non-constant symbols.
+@@ -268,7 +274,7 @@
+
+ choices:
+
+- "choice"
++ "choice" [symbol]
+ <choice options>
+ <choice block>
+ "endchoice"
+@@ -282,6 +288,10 @@
+ can be compiled as modules.
+ A choice accepts another option "optional", which allows to set the
+ choice to 'n' and no entry needs to be selected.
++If no [symbol] is associated with a choice, then you can not have multiple
++definitions of that choice. If a [symbol] is associated to the choice,
++then you may define the same choice (ie. with the same entries) in another
++place.
+
+ comment:
+
+@@ -300,7 +310,8 @@
+ "endmenu"
+
+ This defines a menu block, see "Menu structure" above for more
+-information. The only possible options are dependencies.
++information. The only possible options are dependencies and "visible"
++attributes.
+
+ if:
+
+@@ -322,7 +333,8 @@
+ "mainmenu" <prompt>
+
+ This sets the config program's title bar if the config program chooses
+-to use it.
++to use it. It should be placed at the top of the configuration, before any
++other statement.
+
+
+ Kconfig hints
+@@ -376,4 +388,3 @@
+ depends on BAR && m
+
+ limits FOO to module (=m) or disabled (=n).
+-
+diff -Nur uClibc-0.9.33.2/extra/config/kconfig_load.c uClibc-git/extra/config/kconfig_load.c
+--- uClibc-0.9.33.2/extra/config/kconfig_load.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/kconfig_load.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,35 +0,0 @@
+-#include <dlfcn.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-
+-#include "lkc.h"
+-
+-#define P(name,type,arg) type (*name ## _p) arg
+-#include "lkc_proto.h"
+-#undef P
+-
+-void kconfig_load(void)
+-{
+- void *handle;
+- char *error;
+-
+- handle = dlopen("./libkconfig.so", RTLD_LAZY);
+- if (!handle) {
+- handle = dlopen("./scripts/kconfig/libkconfig.so", RTLD_LAZY);
+- if (!handle) {
+- fprintf(stderr, "%s\n", dlerror());
+- exit(1);
+- }
+- }
+-
+-#define P(name,type,arg) \
+-{ \
+- name ## _p = dlsym(handle, #name); \
+- if ((error = dlerror())) { \
+- fprintf(stderr, "%s\n", error); \
+- exit(1); \
+- } \
+-}
+-#include "lkc_proto.h"
+-#undef P
+-}
+Binary files uClibc-0.9.33.2/extra/config/kconfig-to-uclibc.patch.gz and uClibc-git/extra/config/kconfig-to-uclibc.patch.gz differ
+Binary files uClibc-0.9.33.2/extra/config/kconfig-to-uclibc.tar.gz and uClibc-git/extra/config/kconfig-to-uclibc.tar.gz differ
+diff -Nur uClibc-0.9.33.2/extra/config/kxgettext.c uClibc-git/extra/config/kxgettext.c
+--- uClibc-0.9.33.2/extra/config/kxgettext.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/kxgettext.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,7 +7,6 @@
+ #include <stdlib.h>
+ #include <string.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+ static char *escape(const char* text, char *bf, int len)
+@@ -43,6 +42,10 @@
+ ++text;
+ goto next;
+ }
++ else if (*text == '\\') {
++ *bfp++ = '\\';
++ len--;
++ }
+ *bfp++ = *text++;
+ next:
+ --len;
+@@ -59,11 +62,11 @@
+
+ struct file_line {
+ struct file_line *next;
+- char* file;
+- int lineno;
++ const char *file;
++ int lineno;
+ };
+
+-static struct file_line *file_line__new(char *file, int lineno)
++static struct file_line *file_line__new(const char *file, int lineno)
+ {
+ struct file_line *self = malloc(sizeof(*self));
+
+@@ -86,7 +89,8 @@
+
+ static struct message *message__list;
+
+-static struct message *message__new(const char *msg, char *option, char *file, int lineno)
++static struct message *message__new(const char *msg, char *option,
++ const char *file, int lineno)
+ {
+ struct message *self = malloc(sizeof(*self));
+
+@@ -126,7 +130,8 @@
+ return m;
+ }
+
+-static int message__add_file_line(struct message *self, char *file, int lineno)
++static int message__add_file_line(struct message *self, const char *file,
++ int lineno)
+ {
+ int rc = -1;
+ struct file_line *fl = file_line__new(file, lineno);
+@@ -141,7 +146,8 @@
+ return rc;
+ }
+
+-static int message__add(const char *msg, char *option, char *file, int lineno)
++static int message__add(const char *msg, char *option, const char *file,
++ int lineno)
+ {
+ int rc = 0;
+ char bf[16384];
+@@ -162,7 +168,7 @@
+ return rc;
+ }
+
+-void menu_build_message_list(struct menu *menu)
++static void menu_build_message_list(struct menu *menu)
+ {
+ struct menu *child;
+
+@@ -207,7 +213,7 @@
+ "msgstr \"\"\n", self->msg);
+ }
+
+-void menu__xgettext(void)
++static void menu__xgettext(void)
+ {
+ struct message *m = message__list;
+
+diff -Nur uClibc-0.9.33.2/extra/config/lex.zconf.c_shipped uClibc-git/extra/config/lex.zconf.c_shipped
+--- uClibc-0.9.33.2/extra/config/lex.zconf.c_shipped 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lex.zconf.c_shipped 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2416 +0,0 @@
+-
+-#line 3 "scripts/kconfig/lex.zconf.c"
+-
+-#define YY_INT_ALIGNED short int
+-
+-/* A lexical scanner generated by flex */
+-
+-#define yy_create_buffer zconf_create_buffer
+-#define yy_delete_buffer zconf_delete_buffer
+-#define yy_flex_debug zconf_flex_debug
+-#define yy_init_buffer zconf_init_buffer
+-#define yy_flush_buffer zconf_flush_buffer
+-#define yy_load_buffer_state zconf_load_buffer_state
+-#define yy_switch_to_buffer zconf_switch_to_buffer
+-#define yyin zconfin
+-#define yyleng zconfleng
+-#define yylex zconflex
+-#define yylineno zconflineno
+-#define yyout zconfout
+-#define yyrestart zconfrestart
+-#define yytext zconftext
+-#define yywrap zconfwrap
+-#define yyalloc zconfalloc
+-#define yyrealloc zconfrealloc
+-#define yyfree zconffree
+-
+-#define FLEX_SCANNER
+-#define YY_FLEX_MAJOR_VERSION 2
+-#define YY_FLEX_MINOR_VERSION 5
+-#define YY_FLEX_SUBMINOR_VERSION 35
+-#if YY_FLEX_SUBMINOR_VERSION > 0
+-#define FLEX_BETA
+-#endif
+-
+-/* First, we deal with platform-specific or compiler-specific issues. */
+-
+-/* begin standard C headers. */
+-#include <stdio.h>
+-#include <string.h>
+-#include <errno.h>
+-#include <stdlib.h>
+-
+-/* end standard C headers. */
+-
+-/* flex integer type definitions */
+-
+-#ifndef FLEXINT_H
+-#define FLEXINT_H
+-
+-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+-
+-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+-
+-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+- * if you want the limit (max/min) macros for int types.
+- */
+-#ifndef __STDC_LIMIT_MACROS
+-#define __STDC_LIMIT_MACROS 1
+-#endif
+-
+-#include <inttypes.h>
+-typedef int8_t flex_int8_t;
+-typedef uint8_t flex_uint8_t;
+-typedef int16_t flex_int16_t;
+-typedef uint16_t flex_uint16_t;
+-typedef int32_t flex_int32_t;
+-typedef uint32_t flex_uint32_t;
+-#else
+-typedef signed char flex_int8_t;
+-typedef short int flex_int16_t;
+-typedef int flex_int32_t;
+-typedef unsigned char flex_uint8_t;
+-typedef unsigned short int flex_uint16_t;
+-typedef unsigned int flex_uint32_t;
+-
+-/* Limits of integral types. */
+-#ifndef INT8_MIN
+-#define INT8_MIN (-128)
+-#endif
+-#ifndef INT16_MIN
+-#define INT16_MIN (-32767-1)
+-#endif
+-#ifndef INT32_MIN
+-#define INT32_MIN (-2147483647-1)
+-#endif
+-#ifndef INT8_MAX
+-#define INT8_MAX (127)
+-#endif
+-#ifndef INT16_MAX
+-#define INT16_MAX (32767)
+-#endif
+-#ifndef INT32_MAX
+-#define INT32_MAX (2147483647)
+-#endif
+-#ifndef UINT8_MAX
+-#define UINT8_MAX (255U)
+-#endif
+-#ifndef UINT16_MAX
+-#define UINT16_MAX (65535U)
+-#endif
+-#ifndef UINT32_MAX
+-#define UINT32_MAX (4294967295U)
+-#endif
+-
+-#endif /* ! C99 */
+-
+-#endif /* ! FLEXINT_H */
+-
+-#ifdef __cplusplus
+-
+-/* The "const" storage-class-modifier is valid. */
+-#define YY_USE_CONST
+-
+-#else /* ! __cplusplus */
+-
+-/* C99 requires __STDC__ to be defined as 1. */
+-#if defined (__STDC__)
+-
+-#define YY_USE_CONST
+-
+-#endif /* defined (__STDC__) */
+-#endif /* ! __cplusplus */
+-
+-#ifdef YY_USE_CONST
+-#define yyconst const
+-#else
+-#define yyconst
+-#endif
+-
+-/* Returned upon end-of-file. */
+-#define YY_NULL 0
+-
+-/* Promotes a possibly negative, possibly signed char to an unsigned
+- * integer for use as an array index. If the signed char is negative,
+- * we want to instead treat it as an 8-bit unsigned char, hence the
+- * double cast.
+- */
+-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+-
+-/* Enter a start condition. This macro really ought to take a parameter,
+- * but we do it the disgusting crufty way forced on us by the ()-less
+- * definition of BEGIN.
+- */
+-#define BEGIN (yy_start) = 1 + 2 *
+-
+-/* Translate the current start state into a value that can be later handed
+- * to BEGIN to return to the state. The YYSTATE alias is for lex
+- * compatibility.
+- */
+-#define YY_START (((yy_start) - 1) / 2)
+-#define YYSTATE YY_START
+-
+-/* Action number for EOF rule of a given start state. */
+-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+-
+-/* Special action meaning "start processing a new file". */
+-#define YY_NEW_FILE zconfrestart(zconfin )
+-
+-#define YY_END_OF_BUFFER_CHAR 0
+-
+-/* Size of default input buffer. */
+-#ifndef YY_BUF_SIZE
+-#define YY_BUF_SIZE 16384
+-#endif
+-
+-/* The state buf must be large enough to hold one state per character in the main buffer.
+- */
+-#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+-
+-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+-#define YY_TYPEDEF_YY_BUFFER_STATE
+-typedef struct yy_buffer_state *YY_BUFFER_STATE;
+-#endif
+-
+-extern int zconfleng;
+-
+-extern FILE *zconfin, *zconfout;
+-
+-#define EOB_ACT_CONTINUE_SCAN 0
+-#define EOB_ACT_END_OF_FILE 1
+-#define EOB_ACT_LAST_MATCH 2
+-
+- #define YY_LESS_LINENO(n)
+-
+-/* Return all but the first "n" matched characters back to the input stream. */
+-#define yyless(n) \
+- do \
+- { \
+- /* Undo effects of setting up zconftext. */ \
+- int yyless_macro_arg = (n); \
+- YY_LESS_LINENO(yyless_macro_arg);\
+- *yy_cp = (yy_hold_char); \
+- YY_RESTORE_YY_MORE_OFFSET \
+- (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+- YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
+- } \
+- while ( 0 )
+-
+-#define unput(c) yyunput( c, (yytext_ptr) )
+-
+-#ifndef YY_TYPEDEF_YY_SIZE_T
+-#define YY_TYPEDEF_YY_SIZE_T
+-typedef size_t yy_size_t;
+-#endif
+-
+-#ifndef YY_STRUCT_YY_BUFFER_STATE
+-#define YY_STRUCT_YY_BUFFER_STATE
+-struct yy_buffer_state
+- {
+- FILE *yy_input_file;
+-
+- char *yy_ch_buf; /* input buffer */
+- char *yy_buf_pos; /* current position in input buffer */
+-
+- /* Size of input buffer in bytes, not including room for EOB
+- * characters.
+- */
+- yy_size_t yy_buf_size;
+-
+- /* Number of characters read into yy_ch_buf, not including EOB
+- * characters.
+- */
+- int yy_n_chars;
+-
+- /* Whether we "own" the buffer - i.e., we know we created it,
+- * and can realloc() it to grow it, and should free() it to
+- * delete it.
+- */
+- int yy_is_our_buffer;
+-
+- /* Whether this is an "interactive" input source; if so, and
+- * if we're using stdio for input, then we want to use getc()
+- * instead of fread(), to make sure we stop fetching input after
+- * each newline.
+- */
+- int yy_is_interactive;
+-
+- /* Whether we're considered to be at the beginning of a line.
+- * If so, '^' rules will be active on the next match, otherwise
+- * not.
+- */
+- int yy_at_bol;
+-
+- int yy_bs_lineno; /**< The line count. */
+- int yy_bs_column; /**< The column count. */
+-
+- /* Whether to try to fill the input buffer when we reach the
+- * end of it.
+- */
+- int yy_fill_buffer;
+-
+- int yy_buffer_status;
+-
+-#define YY_BUFFER_NEW 0
+-#define YY_BUFFER_NORMAL 1
+- /* When an EOF's been seen but there's still some text to process
+- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+- * shouldn't try reading from the input source any more. We might
+- * still have a bunch of tokens to match, though, because of
+- * possible backing-up.
+- *
+- * When we actually see the EOF, we change the status to "new"
+- * (via zconfrestart()), so that the user can continue scanning by
+- * just pointing zconfin at a new input file.
+- */
+-#define YY_BUFFER_EOF_PENDING 2
+-
+- };
+-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+-
+-/* Stack of input buffers. */
+-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+-
+-/* We provide macros for accessing buffer states in case in the
+- * future we want to put the buffer states in a more general
+- * "scanner state".
+- *
+- * Returns the top of the stack, or NULL.
+- */
+-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+- ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+- : NULL)
+-
+-/* Same as previous macro, but useful when we know that the buffer stack is not
+- * NULL or when we need an lvalue. For internal use only.
+- */
+-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+-
+-/* yy_hold_char holds the character lost when zconftext is formed. */
+-static char yy_hold_char;
+-static int yy_n_chars; /* number of characters read into yy_ch_buf */
+-int zconfleng;
+-
+-/* Points to current character in buffer. */
+-static char *yy_c_buf_p = (char *) 0;
+-static int yy_init = 0; /* whether we need to initialize */
+-static int yy_start = 0; /* start state number */
+-
+-/* Flag which is used to allow zconfwrap()'s to do buffer switches
+- * instead of setting up a fresh zconfin. A bit of a hack ...
+- */
+-static int yy_did_buffer_switch_on_eof;
+-
+-void zconfrestart (FILE *input_file );
+-void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+-YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size );
+-void zconf_delete_buffer (YY_BUFFER_STATE b );
+-void zconf_flush_buffer (YY_BUFFER_STATE b );
+-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer );
+-void zconfpop_buffer_state (void );
+-
+-static void zconfensure_buffer_stack (void );
+-static void zconf_load_buffer_state (void );
+-static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file );
+-
+-#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
+-
+-YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size );
+-YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str );
+-YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len );
+-
+-void *zconfalloc (yy_size_t );
+-void *zconfrealloc (void *,yy_size_t );
+-void zconffree (void * );
+-
+-#define yy_new_buffer zconf_create_buffer
+-
+-#define yy_set_interactive(is_interactive) \
+- { \
+- if ( ! YY_CURRENT_BUFFER ){ \
+- zconfensure_buffer_stack (); \
+- YY_CURRENT_BUFFER_LVALUE = \
+- zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
+- } \
+- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+- }
+-
+-#define yy_set_bol(at_bol) \
+- { \
+- if ( ! YY_CURRENT_BUFFER ){\
+- zconfensure_buffer_stack (); \
+- YY_CURRENT_BUFFER_LVALUE = \
+- zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
+- } \
+- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+- }
+-
+-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+-
+-/* Begin user sect3 */
+-
+-#define zconfwrap(n) 1
+-#define YY_SKIP_YYWRAP
+-
+-typedef unsigned char YY_CHAR;
+-
+-FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
+-
+-typedef int yy_state_type;
+-
+-extern int zconflineno;
+-
+-int zconflineno = 1;
+-
+-extern char *zconftext;
+-#define yytext_ptr zconftext
+-static yyconst flex_int16_t yy_nxt[][17] =
+- {
+- {
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0
+- },
+-
+- {
+- 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
+- 12, 12, 12, 12, 12, 12, 12
+- },
+-
+- {
+- 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
+- 12, 12, 12, 12, 12, 12, 12
+- },
+-
+- {
+- 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
+- 16, 16, 16, 18, 16, 16, 16
+- },
+-
+- {
+- 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
+- 16, 16, 16, 18, 16, 16, 16
+-
+- },
+-
+- {
+- 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
+- 19, 19, 19, 19, 19, 19, 19
+- },
+-
+- {
+- 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
+- 19, 19, 19, 19, 19, 19, 19
+- },
+-
+- {
+- 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
+- 22, 22, 22, 22, 22, 25, 22
+- },
+-
+- {
+- 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
+- 22, 22, 22, 22, 22, 25, 22
+- },
+-
+- {
+- 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
+- 33, 34, 35, 35, 36, 37, 38
+-
+- },
+-
+- {
+- 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
+- 33, 34, 35, 35, 36, 37, 38
+- },
+-
+- {
+- -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,
+- -11, -11, -11, -11, -11, -11, -11
+- },
+-
+- {
+- 11, -12, -12, -12, -12, -12, -12, -12, -12, -12,
+- -12, -12, -12, -12, -12, -12, -12
+- },
+-
+- {
+- 11, -13, 39, 40, -13, -13, 41, -13, -13, -13,
+- -13, -13, -13, -13, -13, -13, -13
+- },
+-
+- {
+- 11, -14, -14, -14, -14, -14, -14, -14, -14, -14,
+- -14, -14, -14, -14, -14, -14, -14
+-
+- },
+-
+- {
+- 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
+- 42, 42, 42, 42, 42, 42, 42
+- },
+-
+- {
+- 11, -16, -16, -16, -16, -16, -16, -16, -16, -16,
+- -16, -16, -16, -16, -16, -16, -16
+- },
+-
+- {
+- 11, -17, -17, -17, -17, -17, -17, -17, -17, -17,
+- -17, -17, -17, -17, -17, -17, -17
+- },
+-
+- {
+- 11, -18, -18, -18, -18, -18, -18, -18, -18, -18,
+- -18, -18, -18, 44, -18, -18, -18
+- },
+-
+- {
+- 11, 45, 45, -19, 45, 45, 45, 45, 45, 45,
+- 45, 45, 45, 45, 45, 45, 45
+-
+- },
+-
+- {
+- 11, -20, 46, 47, -20, -20, -20, -20, -20, -20,
+- -20, -20, -20, -20, -20, -20, -20
+- },
+-
+- {
+- 11, 48, -21, -21, 48, 48, 48, 48, 48, 48,
+- 48, 48, 48, 48, 48, 48, 48
+- },
+-
+- {
+- 11, 49, 49, 50, 49, -22, 49, 49, -22, 49,
+- 49, 49, 49, 49, 49, -22, 49
+- },
+-
+- {
+- 11, -23, -23, -23, -23, -23, -23, -23, -23, -23,
+- -23, -23, -23, -23, -23, -23, -23
+- },
+-
+- {
+- 11, -24, -24, -24, -24, -24, -24, -24, -24, -24,
+- -24, -24, -24, -24, -24, -24, -24
+-
+- },
+-
+- {
+- 11, 51, 51, 52, 51, 51, 51, 51, 51, 51,
+- 51, 51, 51, 51, 51, 51, 51
+- },
+-
+- {
+- 11, -26, -26, -26, -26, -26, -26, -26, -26, -26,
+- -26, -26, -26, -26, -26, -26, -26
+- },
+-
+- {
+- 11, -27, -27, -27, -27, -27, -27, -27, -27, -27,
+- -27, -27, -27, -27, -27, -27, -27
+- },
+-
+- {
+- 11, -28, -28, -28, -28, -28, -28, -28, -28, -28,
+- -28, -28, -28, -28, 53, -28, -28
+- },
+-
+- {
+- 11, -29, -29, -29, -29, -29, -29, -29, -29, -29,
+- -29, -29, -29, -29, -29, -29, -29
+-
+- },
+-
+- {
+- 11, 54, 54, -30, 54, 54, 54, 54, 54, 54,
+- 54, 54, 54, 54, 54, 54, 54
+- },
+-
+- {
+- 11, -31, -31, -31, -31, -31, -31, 55, -31, -31,
+- -31, -31, -31, -31, -31, -31, -31
+- },
+-
+- {
+- 11, -32, -32, -32, -32, -32, -32, -32, -32, -32,
+- -32, -32, -32, -32, -32, -32, -32
+- },
+-
+- {
+- 11, -33, -33, -33, -33, -33, -33, -33, -33, -33,
+- -33, -33, -33, -33, -33, -33, -33
+- },
+-
+- {
+- 11, -34, -34, -34, -34, -34, -34, -34, -34, -34,
+- -34, 56, 57, 57, -34, -34, -34
+-
+- },
+-
+- {
+- 11, -35, -35, -35, -35, -35, -35, -35, -35, -35,
+- -35, 57, 57, 57, -35, -35, -35
+- },
+-
+- {
+- 11, -36, -36, -36, -36, -36, -36, -36, -36, -36,
+- -36, -36, -36, -36, -36, -36, -36
+- },
+-
+- {
+- 11, -37, -37, 58, -37, -37, -37, -37, -37, -37,
+- -37, -37, -37, -37, -37, -37, -37
+- },
+-
+- {
+- 11, -38, -38, -38, -38, -38, -38, -38, -38, -38,
+- -38, -38, -38, -38, -38, -38, 59
+- },
+-
+- {
+- 11, -39, 39, 40, -39, -39, 41, -39, -39, -39,
+- -39, -39, -39, -39, -39, -39, -39
+-
+- },
+-
+- {
+- 11, -40, -40, -40, -40, -40, -40, -40, -40, -40,
+- -40, -40, -40, -40, -40, -40, -40
+- },
+-
+- {
+- 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
+- 42, 42, 42, 42, 42, 42, 42
+- },
+-
+- {
+- 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
+- 42, 42, 42, 42, 42, 42, 42
+- },
+-
+- {
+- 11, -43, -43, -43, -43, -43, -43, -43, -43, -43,
+- -43, -43, -43, -43, -43, -43, -43
+- },
+-
+- {
+- 11, -44, -44, -44, -44, -44, -44, -44, -44, -44,
+- -44, -44, -44, 44, -44, -44, -44
+-
+- },
+-
+- {
+- 11, 45, 45, -45, 45, 45, 45, 45, 45, 45,
+- 45, 45, 45, 45, 45, 45, 45
+- },
+-
+- {
+- 11, -46, 46, 47, -46, -46, -46, -46, -46, -46,
+- -46, -46, -46, -46, -46, -46, -46
+- },
+-
+- {
+- 11, 48, -47, -47, 48, 48, 48, 48, 48, 48,
+- 48, 48, 48, 48, 48, 48, 48
+- },
+-
+- {
+- 11, -48, -48, -48, -48, -48, -48, -48, -48, -48,
+- -48, -48, -48, -48, -48, -48, -48
+- },
+-
+- {
+- 11, 49, 49, 50, 49, -49, 49, 49, -49, 49,
+- 49, 49, 49, 49, 49, -49, 49
+-
+- },
+-
+- {
+- 11, -50, -50, -50, -50, -50, -50, -50, -50, -50,
+- -50, -50, -50, -50, -50, -50, -50
+- },
+-
+- {
+- 11, -51, -51, 52, -51, -51, -51, -51, -51, -51,
+- -51, -51, -51, -51, -51, -51, -51
+- },
+-
+- {
+- 11, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+- -52, -52, -52, -52, -52, -52, -52
+- },
+-
+- {
+- 11, -53, -53, -53, -53, -53, -53, -53, -53, -53,
+- -53, -53, -53, -53, -53, -53, -53
+- },
+-
+- {
+- 11, 54, 54, -54, 54, 54, 54, 54, 54, 54,
+- 54, 54, 54, 54, 54, 54, 54
+-
+- },
+-
+- {
+- 11, -55, -55, -55, -55, -55, -55, -55, -55, -55,
+- -55, -55, -55, -55, -55, -55, -55
+- },
+-
+- {
+- 11, -56, -56, -56, -56, -56, -56, -56, -56, -56,
+- -56, 60, 57, 57, -56, -56, -56
+- },
+-
+- {
+- 11, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+- -57, 57, 57, 57, -57, -57, -57
+- },
+-
+- {
+- 11, -58, -58, -58, -58, -58, -58, -58, -58, -58,
+- -58, -58, -58, -58, -58, -58, -58
+- },
+-
+- {
+- 11, -59, -59, -59, -59, -59, -59, -59, -59, -59,
+- -59, -59, -59, -59, -59, -59, -59
+-
+- },
+-
+- {
+- 11, -60, -60, -60, -60, -60, -60, -60, -60, -60,
+- -60, 57, 57, 57, -60, -60, -60
+- },
+-
+- } ;
+-
+-static yy_state_type yy_get_previous_state (void );
+-static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+-static int yy_get_next_buffer (void );
+-static void yy_fatal_error (yyconst char msg[] );
+-
+-/* Done after the current pattern has been matched and before the
+- * corresponding action - sets up zconftext.
+- */
+-#define YY_DO_BEFORE_ACTION \
+- (yytext_ptr) = yy_bp; \
+- zconfleng = (size_t) (yy_cp - yy_bp); \
+- (yy_hold_char) = *yy_cp; \
+- *yy_cp = '\0'; \
+- (yy_c_buf_p) = yy_cp;
+-
+-#define YY_NUM_RULES 33
+-#define YY_END_OF_BUFFER 34
+-/* This struct is not used in this scanner,
+- but its presence is necessary. */
+-struct yy_trans_info
+- {
+- flex_int32_t yy_verify;
+- flex_int32_t yy_nxt;
+- };
+-static yyconst flex_int16_t yy_accept[61] =
+- { 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 34, 5, 4, 2, 3, 7, 8, 6, 32, 29,
+- 31, 24, 28, 27, 26, 22, 17, 13, 16, 20,
+- 22, 11, 12, 19, 19, 14, 22, 22, 4, 2,
+- 3, 3, 1, 6, 32, 29, 31, 30, 24, 23,
+- 26, 25, 15, 20, 9, 19, 19, 21, 10, 18
+- } ;
+-
+-static yyconst flex_int32_t yy_ec[256] =
+- { 0,
+- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 2, 4, 5, 6, 1, 1, 7, 8, 9,
+- 10, 1, 1, 1, 11, 12, 12, 13, 13, 13,
+- 13, 13, 13, 13, 13, 13, 13, 1, 1, 1,
+- 14, 1, 1, 1, 13, 13, 13, 13, 13, 13,
+- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+- 1, 15, 1, 1, 13, 1, 13, 13, 13, 13,
+-
+- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+- 13, 13, 1, 16, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+-
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1
+- } ;
+-
+-extern int zconf_flex_debug;
+-int zconf_flex_debug = 0;
+-
+-/* The intent behind this definition is that it'll catch
+- * any uses of REJECT which flex missed.
+- */
+-#define REJECT reject_used_but_not_detected
+-#define yymore() yymore_used_but_not_detected
+-#define YY_MORE_ADJ 0
+-#define YY_RESTORE_YY_MORE_OFFSET
+-char *zconftext;
+-#define YY_NO_INPUT 1
+-
+-/*
+- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+- * Released under the terms of the GNU GPL v2.0.
+- */
+-
+-#include <limits.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <unistd.h>
+-
+-#define LKC_DIRECT_LINK
+-#include "lkc.h"
+-
+-#define START_STRSIZE 16
+-
+-static struct {
+- struct file *file;
+- int lineno;
+-} current_pos;
+-
+-static char *text;
+-static int text_size, text_asize;
+-
+-struct buffer {
+- struct buffer *parent;
+- YY_BUFFER_STATE state;
+-};
+-
+-struct buffer *current_buf;
+-
+-static int last_ts, first_ts;
+-
+-static void zconf_endhelp(void);
+-static void zconf_endfile(void);
+-
+-void new_string(void)
+-{
+- text = malloc(START_STRSIZE);
+- text_asize = START_STRSIZE;
+- text_size = 0;
+- *text = 0;
+-}
+-
+-void append_string(const char *str, int size)
+-{
+- int new_size = text_size + size + 1;
+- if (new_size > text_asize) {
+- new_size += START_STRSIZE - 1;
+- new_size &= -START_STRSIZE;
+- text = realloc(text, new_size);
+- text_asize = new_size;
+- }
+- memcpy(text + text_size, str, size);
+- text_size += size;
+- text[text_size] = 0;
+-}
+-
+-void alloc_string(const char *str, int size)
+-{
+- text = malloc(size + 1);
+- memcpy(text, str, size);
+- text[size] = 0;
+-}
+-
+-#define INITIAL 0
+-#define COMMAND 1
+-#define HELP 2
+-#define STRING 3
+-#define PARAM 4
+-
+-#ifndef YY_NO_UNISTD_H
+-/* Special case for "unistd.h", since it is non-ANSI. We include it way
+- * down here because we want the user's section 1 to have been scanned first.
+- * The user has a chance to override it with an option.
+- */
+-#include <unistd.h>
+-#endif
+-
+-#ifndef YY_EXTRA_TYPE
+-#define YY_EXTRA_TYPE void *
+-#endif
+-
+-static int yy_init_globals (void );
+-
+-/* Accessor methods to globals.
+- These are made visible to non-reentrant scanners for convenience. */
+-
+-int zconflex_destroy (void );
+-
+-int zconfget_debug (void );
+-
+-void zconfset_debug (int debug_flag );
+-
+-YY_EXTRA_TYPE zconfget_extra (void );
+-
+-void zconfset_extra (YY_EXTRA_TYPE user_defined );
+-
+-FILE *zconfget_in (void );
+-
+-void zconfset_in (FILE * in_str );
+-
+-FILE *zconfget_out (void );
+-
+-void zconfset_out (FILE * out_str );
+-
+-int zconfget_leng (void );
+-
+-char *zconfget_text (void );
+-
+-int zconfget_lineno (void );
+-
+-void zconfset_lineno (int line_number );
+-
+-/* Macros after this point can all be overridden by user definitions in
+- * section 1.
+- */
+-
+-#ifndef YY_SKIP_YYWRAP
+-#ifdef __cplusplus
+-extern "C" int zconfwrap (void );
+-#else
+-extern int zconfwrap (void );
+-#endif
+-#endif
+-
+- static void yyunput (int c,char *buf_ptr );
+-
+-#ifndef yytext_ptr
+-static void yy_flex_strncpy (char *,yyconst char *,int );
+-#endif
+-
+-#ifdef YY_NEED_STRLEN
+-static int yy_flex_strlen (yyconst char * );
+-#endif
+-
+-#ifndef YY_NO_INPUT
+-
+-#ifdef __cplusplus
+-static int yyinput (void );
+-#else
+-static int input (void );
+-#endif
+-
+-#endif
+-
+-/* Amount of stuff to slurp up with each read. */
+-#ifndef YY_READ_BUF_SIZE
+-#define YY_READ_BUF_SIZE 8192
+-#endif
+-
+-/* Copy whatever the last rule matched to the standard output. */
+-#ifndef ECHO
+-/* This used to be an fputs(), but since the string might contain NUL's,
+- * we now use fwrite().
+- */
+-#define ECHO fwrite( zconftext, zconfleng, 1, zconfout )
+-#endif
+-
+-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+- * is returned in "result".
+- */
+-#ifndef YY_INPUT
+-#define YY_INPUT(buf,result,max_size) \
+- errno=0; \
+- while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
+- { \
+- if( errno != EINTR) \
+- { \
+- YY_FATAL_ERROR( "input in flex scanner failed" ); \
+- break; \
+- } \
+- errno=0; \
+- clearerr(zconfin); \
+- }\
+-\
+-
+-#endif
+-
+-/* No semi-colon after return; correct usage is to write "yyterminate();" -
+- * we don't want an extra ';' after the "return" because that will cause
+- * some compilers to complain about unreachable statements.
+- */
+-#ifndef yyterminate
+-#define yyterminate() return YY_NULL
+-#endif
+-
+-/* Number of entries by which start-condition stack grows. */
+-#ifndef YY_START_STACK_INCR
+-#define YY_START_STACK_INCR 25
+-#endif
+-
+-/* Report a fatal error. */
+-#ifndef YY_FATAL_ERROR
+-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+-#endif
+-
+-/* end tables serialization structures and prototypes */
+-
+-/* Default declaration of generated scanner - a define so the user can
+- * easily add parameters.
+- */
+-#ifndef YY_DECL
+-#define YY_DECL_IS_OURS 1
+-
+-extern int zconflex (void);
+-
+-#define YY_DECL int zconflex (void)
+-#endif /* !YY_DECL */
+-
+-/* Code executed at the beginning of each rule, after zconftext and zconfleng
+- * have been set up.
+- */
+-#ifndef YY_USER_ACTION
+-#define YY_USER_ACTION
+-#endif
+-
+-/* Code executed at the end of each rule. */
+-#ifndef YY_BREAK
+-#define YY_BREAK break;
+-#endif
+-
+-#define YY_RULE_SETUP \
+- YY_USER_ACTION
+-
+-/** The main scanner function which does all the work.
+- */
+-YY_DECL
+-{
+- register yy_state_type yy_current_state;
+- register char *yy_cp, *yy_bp;
+- register int yy_act;
+-
+- int str = 0;
+- int ts, i;
+-
+- if ( !(yy_init) )
+- {
+- (yy_init) = 1;
+-
+-#ifdef YY_USER_INIT
+- YY_USER_INIT;
+-#endif
+-
+- if ( ! (yy_start) )
+- (yy_start) = 1; /* first start state */
+-
+- if ( ! zconfin )
+- zconfin = stdin;
+-
+- if ( ! zconfout )
+- zconfout = stdout;
+-
+- if ( ! YY_CURRENT_BUFFER ) {
+- zconfensure_buffer_stack ();
+- YY_CURRENT_BUFFER_LVALUE =
+- zconf_create_buffer(zconfin,YY_BUF_SIZE );
+- }
+-
+- zconf_load_buffer_state( );
+- }
+-
+- while ( 1 ) /* loops until end-of-file is reached */
+- {
+- yy_cp = (yy_c_buf_p);
+-
+- /* Support of zconftext. */
+- *yy_cp = (yy_hold_char);
+-
+- /* yy_bp points to the position in yy_ch_buf of the start of
+- * the current run.
+- */
+- yy_bp = yy_cp;
+-
+- yy_current_state = (yy_start);
+-yy_match:
+- while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)] ]) > 0 )
+- ++yy_cp;
+-
+- yy_current_state = -yy_current_state;
+-
+-yy_find_action:
+- yy_act = yy_accept[yy_current_state];
+-
+- YY_DO_BEFORE_ACTION;
+-
+-do_action: /* This label is used only to access EOF actions. */
+-
+- switch ( yy_act )
+- { /* beginning of action switch */
+-case 1:
+-/* rule 1 can match eol */
+-case 2:
+-/* rule 2 can match eol */
+-YY_RULE_SETUP
+-{
+- current_file->lineno++;
+- return T_EOL;
+-}
+- YY_BREAK
+-case 3:
+-YY_RULE_SETUP
+-
+- YY_BREAK
+-case 4:
+-YY_RULE_SETUP
+-{
+- BEGIN(COMMAND);
+-}
+- YY_BREAK
+-case 5:
+-YY_RULE_SETUP
+-{
+- unput(zconftext[0]);
+- BEGIN(COMMAND);
+-}
+- YY_BREAK
+-
+-case 6:
+-YY_RULE_SETUP
+-{
+- struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
+- BEGIN(PARAM);
+- current_pos.file = current_file;
+- current_pos.lineno = current_file->lineno;
+- if (id && id->flags & TF_COMMAND) {
+- zconflval.id = id;
+- return id->token;
+- }
+- alloc_string(zconftext, zconfleng);
+- zconflval.string = text;
+- return T_WORD;
+- }
+- YY_BREAK
+-case 7:
+-YY_RULE_SETUP
+-
+- YY_BREAK
+-case 8:
+-/* rule 8 can match eol */
+-YY_RULE_SETUP
+-{
+- BEGIN(INITIAL);
+- current_file->lineno++;
+- return T_EOL;
+- }
+- YY_BREAK
+-
+-case 9:
+-YY_RULE_SETUP
+-return T_AND;
+- YY_BREAK
+-case 10:
+-YY_RULE_SETUP
+-return T_OR;
+- YY_BREAK
+-case 11:
+-YY_RULE_SETUP
+-return T_OPEN_PAREN;
+- YY_BREAK
+-case 12:
+-YY_RULE_SETUP
+-return T_CLOSE_PAREN;
+- YY_BREAK
+-case 13:
+-YY_RULE_SETUP
+-return T_NOT;
+- YY_BREAK
+-case 14:
+-YY_RULE_SETUP
+-return T_EQUAL;
+- YY_BREAK
+-case 15:
+-YY_RULE_SETUP
+-return T_UNEQUAL;
+- YY_BREAK
+-case 16:
+-YY_RULE_SETUP
+-{
+- str = zconftext[0];
+- new_string();
+- BEGIN(STRING);
+- }
+- YY_BREAK
+-case 17:
+-/* rule 17 can match eol */
+-YY_RULE_SETUP
+-BEGIN(INITIAL); current_file->lineno++; return T_EOL;
+- YY_BREAK
+-case 18:
+-YY_RULE_SETUP
+-/* ignore */
+- YY_BREAK
+-case 19:
+-YY_RULE_SETUP
+-{
+- struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
+- if (id && id->flags & TF_PARAM) {
+- zconflval.id = id;
+- return id->token;
+- }
+- alloc_string(zconftext, zconfleng);
+- zconflval.string = text;
+- return T_WORD;
+- }
+- YY_BREAK
+-case 20:
+-YY_RULE_SETUP
+-/* comment */
+- YY_BREAK
+-case 21:
+-/* rule 21 can match eol */
+-YY_RULE_SETUP
+-current_file->lineno++;
+- YY_BREAK
+-case 22:
+-YY_RULE_SETUP
+-
+- YY_BREAK
+-case YY_STATE_EOF(PARAM):
+-{
+- BEGIN(INITIAL);
+- }
+- YY_BREAK
+-
+-case 23:
+-/* rule 23 can match eol */
+-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+-(yy_c_buf_p) = yy_cp -= 1;
+-YY_DO_BEFORE_ACTION; /* set up zconftext again */
+-YY_RULE_SETUP
+-{
+- append_string(zconftext, zconfleng);
+- zconflval.string = text;
+- return T_WORD_QUOTE;
+- }
+- YY_BREAK
+-case 24:
+-YY_RULE_SETUP
+-{
+- append_string(zconftext, zconfleng);
+- }
+- YY_BREAK
+-case 25:
+-/* rule 25 can match eol */
+-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+-(yy_c_buf_p) = yy_cp -= 1;
+-YY_DO_BEFORE_ACTION; /* set up zconftext again */
+-YY_RULE_SETUP
+-{
+- append_string(zconftext + 1, zconfleng - 1);
+- zconflval.string = text;
+- return T_WORD_QUOTE;
+- }
+- YY_BREAK
+-case 26:
+-YY_RULE_SETUP
+-{
+- append_string(zconftext + 1, zconfleng - 1);
+- }
+- YY_BREAK
+-case 27:
+-YY_RULE_SETUP
+-{
+- if (str == zconftext[0]) {
+- BEGIN(PARAM);
+- zconflval.string = text;
+- return T_WORD_QUOTE;
+- } else
+- append_string(zconftext, 1);
+- }
+- YY_BREAK
+-case 28:
+-/* rule 28 can match eol */
+-YY_RULE_SETUP
+-{
+- printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
+- current_file->lineno++;
+- BEGIN(INITIAL);
+- return T_EOL;
+- }
+- YY_BREAK
+-case YY_STATE_EOF(STRING):
+-{
+- BEGIN(INITIAL);
+- }
+- YY_BREAK
+-
+-case 29:
+-YY_RULE_SETUP
+-{
+- ts = 0;
+- for (i = 0; i < zconfleng; i++) {
+- if (zconftext[i] == '\t')
+- ts = (ts & ~7) + 8;
+- else
+- ts++;
+- }
+- last_ts = ts;
+- if (first_ts) {
+- if (ts < first_ts) {
+- zconf_endhelp();
+- return T_HELPTEXT;
+- }
+- ts -= first_ts;
+- while (ts > 8) {
+- append_string(" ", 8);
+- ts -= 8;
+- }
+- append_string(" ", ts);
+- }
+- }
+- YY_BREAK
+-case 30:
+-/* rule 30 can match eol */
+-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+-(yy_c_buf_p) = yy_cp -= 1;
+-YY_DO_BEFORE_ACTION; /* set up zconftext again */
+-YY_RULE_SETUP
+-{
+- current_file->lineno++;
+- zconf_endhelp();
+- return T_HELPTEXT;
+- }
+- YY_BREAK
+-case 31:
+-/* rule 31 can match eol */
+-YY_RULE_SETUP
+-{
+- current_file->lineno++;
+- append_string("\n", 1);
+- }
+- YY_BREAK
+-case 32:
+-YY_RULE_SETUP
+-{
+- while (zconfleng) {
+- if ((zconftext[zconfleng-1] != ' ') && (zconftext[zconfleng-1] != '\t'))
+- break;
+- zconfleng--;
+- }
+- append_string(zconftext, zconfleng);
+- if (!first_ts)
+- first_ts = last_ts;
+- }
+- YY_BREAK
+-case YY_STATE_EOF(HELP):
+-{
+- zconf_endhelp();
+- return T_HELPTEXT;
+- }
+- YY_BREAK
+-
+-case YY_STATE_EOF(INITIAL):
+-case YY_STATE_EOF(COMMAND):
+-{
+- if (current_file) {
+- zconf_endfile();
+- return T_EOL;
+- }
+- fclose(zconfin);
+- yyterminate();
+-}
+- YY_BREAK
+-case 33:
+-YY_RULE_SETUP
+-YY_FATAL_ERROR( "flex scanner jammed" );
+- YY_BREAK
+-
+- case YY_END_OF_BUFFER:
+- {
+- /* Amount of text matched not including the EOB char. */
+- int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+-
+- /* Undo the effects of YY_DO_BEFORE_ACTION. */
+- *yy_cp = (yy_hold_char);
+- YY_RESTORE_YY_MORE_OFFSET
+-
+- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+- {
+- /* We're scanning a new file or input source. It's
+- * possible that this happened because the user
+- * just pointed zconfin at a new source and called
+- * zconflex(). If so, then we have to assure
+- * consistency between YY_CURRENT_BUFFER and our
+- * globals. Here is the right place to do so, because
+- * this is the first action (other than possibly a
+- * back-up) that will match for the new input source.
+- */
+- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+- YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
+- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+- }
+-
+- /* Note that here we test for yy_c_buf_p "<=" to the position
+- * of the first EOB in the buffer, since yy_c_buf_p will
+- * already have been incremented past the NUL character
+- * (since all states make transitions on EOB to the
+- * end-of-buffer state). Contrast this with the test
+- * in input().
+- */
+- if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+- { /* This was really a NUL. */
+- yy_state_type yy_next_state;
+-
+- (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+-
+- yy_current_state = yy_get_previous_state( );
+-
+- /* Okay, we're now positioned to make the NUL
+- * transition. We couldn't have
+- * yy_get_previous_state() go ahead and do it
+- * for us because it doesn't know how to deal
+- * with the possibility of jamming (and we don't
+- * want to build jamming into it because then it
+- * will run more slowly).
+- */
+-
+- yy_next_state = yy_try_NUL_trans( yy_current_state );
+-
+- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+-
+- if ( yy_next_state )
+- {
+- /* Consume the NUL. */
+- yy_cp = ++(yy_c_buf_p);
+- yy_current_state = yy_next_state;
+- goto yy_match;
+- }
+-
+- else
+- {
+- yy_cp = (yy_c_buf_p);
+- goto yy_find_action;
+- }
+- }
+-
+- else switch ( yy_get_next_buffer( ) )
+- {
+- case EOB_ACT_END_OF_FILE:
+- {
+- (yy_did_buffer_switch_on_eof) = 0;
+-
+- if ( zconfwrap( ) )
+- {
+- /* Note: because we've taken care in
+- * yy_get_next_buffer() to have set up
+- * zconftext, we can now set up
+- * yy_c_buf_p so that if some total
+- * hoser (like flex itself) wants to
+- * call the scanner after we return the
+- * YY_NULL, it'll still work - another
+- * YY_NULL will get returned.
+- */
+- (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+-
+- yy_act = YY_STATE_EOF(YY_START);
+- goto do_action;
+- }
+-
+- else
+- {
+- if ( ! (yy_did_buffer_switch_on_eof) )
+- YY_NEW_FILE;
+- }
+- break;
+- }
+-
+- case EOB_ACT_CONTINUE_SCAN:
+- (yy_c_buf_p) =
+- (yytext_ptr) + yy_amount_of_matched_text;
+-
+- yy_current_state = yy_get_previous_state( );
+-
+- yy_cp = (yy_c_buf_p);
+- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+- goto yy_match;
+-
+- case EOB_ACT_LAST_MATCH:
+- (yy_c_buf_p) =
+- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+-
+- yy_current_state = yy_get_previous_state( );
+-
+- yy_cp = (yy_c_buf_p);
+- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+- goto yy_find_action;
+- }
+- break;
+- }
+-
+- default:
+- YY_FATAL_ERROR(
+- "fatal flex scanner internal error--no action found" );
+- } /* end of action switch */
+- } /* end of scanning one token */
+-} /* end of zconflex */
+-
+-/* yy_get_next_buffer - try to read in a new buffer
+- *
+- * Returns a code representing an action:
+- * EOB_ACT_LAST_MATCH -
+- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+- * EOB_ACT_END_OF_FILE - end of file
+- */
+-static int yy_get_next_buffer (void)
+-{
+- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+- register char *source = (yytext_ptr);
+- register int number_to_move, i;
+- int ret_val;
+-
+- if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+- YY_FATAL_ERROR(
+- "fatal flex scanner internal error--end of buffer missed" );
+-
+- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+- { /* Don't try to fill the buffer, so this is an EOF. */
+- if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+- {
+- /* We matched a single character, the EOB, so
+- * treat this as a final EOF.
+- */
+- return EOB_ACT_END_OF_FILE;
+- }
+-
+- else
+- {
+- /* We matched some text prior to the EOB, first
+- * process it.
+- */
+- return EOB_ACT_LAST_MATCH;
+- }
+- }
+-
+- /* Try to read more data. */
+-
+- /* First move last chars to start of buffer. */
+- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+-
+- for ( i = 0; i < number_to_move; ++i )
+- *(dest++) = *(source++);
+-
+- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+- /* don't do the read, it's not guaranteed to return an EOF,
+- * just force an EOF
+- */
+- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+-
+- else
+- {
+- int num_to_read =
+- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+-
+- while ( num_to_read <= 0 )
+- { /* Not enough room in the buffer - grow it. */
+-
+- /* just a shorter name for the current buffer */
+- YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+-
+- int yy_c_buf_p_offset =
+- (int) ((yy_c_buf_p) - b->yy_ch_buf);
+-
+- if ( b->yy_is_our_buffer )
+- {
+- int new_size = b->yy_buf_size * 2;
+-
+- if ( new_size <= 0 )
+- b->yy_buf_size += b->yy_buf_size / 8;
+- else
+- b->yy_buf_size *= 2;
+-
+- b->yy_ch_buf = (char *)
+- /* Include room in for 2 EOB chars. */
+- zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+- }
+- else
+- /* Can't grow it, we don't own it. */
+- b->yy_ch_buf = 0;
+-
+- if ( ! b->yy_ch_buf )
+- YY_FATAL_ERROR(
+- "fatal error - scanner input buffer overflow" );
+-
+- (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+-
+- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+- number_to_move - 1;
+-
+- }
+-
+- if ( num_to_read > YY_READ_BUF_SIZE )
+- num_to_read = YY_READ_BUF_SIZE;
+-
+- /* Read in more data. */
+- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+- (yy_n_chars), (size_t) num_to_read );
+-
+- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+- }
+-
+- if ( (yy_n_chars) == 0 )
+- {
+- if ( number_to_move == YY_MORE_ADJ )
+- {
+- ret_val = EOB_ACT_END_OF_FILE;
+- zconfrestart(zconfin );
+- }
+-
+- else
+- {
+- ret_val = EOB_ACT_LAST_MATCH;
+- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+- YY_BUFFER_EOF_PENDING;
+- }
+- }
+-
+- else
+- ret_val = EOB_ACT_CONTINUE_SCAN;
+-
+- if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+- /* Extend the array by 50%, plus the number we really need. */
+- yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) zconfrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+- }
+-
+- (yy_n_chars) += number_to_move;
+- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+-
+- (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+-
+- return ret_val;
+-}
+-
+-/* yy_get_previous_state - get the state just before the EOB char was reached */
+-
+- static yy_state_type yy_get_previous_state (void)
+-{
+- register yy_state_type yy_current_state;
+- register char *yy_cp;
+-
+- yy_current_state = (yy_start);
+-
+- for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+- {
+- yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
+- }
+-
+- return yy_current_state;
+-}
+-
+-/* yy_try_NUL_trans - try to make a transition on the NUL character
+- *
+- * synopsis
+- * next_state = yy_try_NUL_trans( current_state );
+- */
+- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+-{
+- register int yy_is_jam;
+-
+- yy_current_state = yy_nxt[yy_current_state][1];
+- yy_is_jam = (yy_current_state <= 0);
+-
+- return yy_is_jam ? 0 : yy_current_state;
+-}
+-
+- static void yyunput (int c, register char * yy_bp )
+-{
+- register char *yy_cp;
+-
+- yy_cp = (yy_c_buf_p);
+-
+- /* undo effects of setting up zconftext */
+- *yy_cp = (yy_hold_char);
+-
+- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+- { /* need to shift things up to make room */
+- /* +2 for EOB chars. */
+- register int number_to_move = (yy_n_chars) + 2;
+- register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+- YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+- register char *source =
+- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+-
+- while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+- *--dest = *--source;
+-
+- yy_cp += (int) (dest - source);
+- yy_bp += (int) (dest - source);
+- YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+-
+- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+- YY_FATAL_ERROR( "flex scanner push-back overflow" );
+- }
+-
+- *--yy_cp = (char) c;
+-
+- (yytext_ptr) = yy_bp;
+- (yy_hold_char) = *yy_cp;
+- (yy_c_buf_p) = yy_cp;
+-}
+-
+-#ifndef YY_NO_INPUT
+-#ifdef __cplusplus
+- static int yyinput (void)
+-#else
+- static int input (void)
+-#endif
+-
+-{
+- int c;
+-
+- *(yy_c_buf_p) = (yy_hold_char);
+-
+- if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+- {
+- /* yy_c_buf_p now points to the character we want to return.
+- * If this occurs *before* the EOB characters, then it's a
+- * valid NUL; if not, then we've hit the end of the buffer.
+- */
+- if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+- /* This was really a NUL. */
+- *(yy_c_buf_p) = '\0';
+-
+- else
+- { /* need more input */
+- int offset = (yy_c_buf_p) - (yytext_ptr);
+- ++(yy_c_buf_p);
+-
+- switch ( yy_get_next_buffer( ) )
+- {
+- case EOB_ACT_LAST_MATCH:
+- /* This happens because yy_g_n_b()
+- * sees that we've accumulated a
+- * token and flags that we need to
+- * try matching the token before
+- * proceeding. But for input(),
+- * there's no matching to consider.
+- * So convert the EOB_ACT_LAST_MATCH
+- * to EOB_ACT_END_OF_FILE.
+- */
+-
+- /* Reset buffer status. */
+- zconfrestart(zconfin );
+-
+- /*FALLTHROUGH*/
+-
+- case EOB_ACT_END_OF_FILE:
+- {
+- if ( zconfwrap( ) )
+- return EOF;
+-
+- if ( ! (yy_did_buffer_switch_on_eof) )
+- YY_NEW_FILE;
+-#ifdef __cplusplus
+- return yyinput();
+-#else
+- return input();
+-#endif
+- }
+-
+- case EOB_ACT_CONTINUE_SCAN:
+- (yy_c_buf_p) = (yytext_ptr) + offset;
+- break;
+- }
+- }
+- }
+-
+- c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+- *(yy_c_buf_p) = '\0'; /* preserve zconftext */
+- (yy_hold_char) = *++(yy_c_buf_p);
+-
+- return c;
+-}
+-#endif /* ifndef YY_NO_INPUT */
+-
+-/** Immediately switch to a different input stream.
+- * @param input_file A readable stream.
+- *
+- * @note This function does not reset the start condition to @c INITIAL .
+- */
+- void zconfrestart (FILE * input_file )
+-{
+-
+- if ( ! YY_CURRENT_BUFFER ){
+- zconfensure_buffer_stack ();
+- YY_CURRENT_BUFFER_LVALUE =
+- zconf_create_buffer(zconfin,YY_BUF_SIZE );
+- }
+-
+- zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
+- zconf_load_buffer_state( );
+-}
+-
+-/** Switch to a different input buffer.
+- * @param new_buffer The new input buffer.
+- *
+- */
+- void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+-{
+-
+- /* TODO. We should be able to replace this entire function body
+- * with
+- * zconfpop_buffer_state();
+- * zconfpush_buffer_state(new_buffer);
+- */
+- zconfensure_buffer_stack ();
+- if ( YY_CURRENT_BUFFER == new_buffer )
+- return;
+-
+- if ( YY_CURRENT_BUFFER )
+- {
+- /* Flush out information for old buffer. */
+- *(yy_c_buf_p) = (yy_hold_char);
+- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+- }
+-
+- YY_CURRENT_BUFFER_LVALUE = new_buffer;
+- zconf_load_buffer_state( );
+-
+- /* We don't actually know whether we did this switch during
+- * EOF (zconfwrap()) processing, but the only time this flag
+- * is looked at is after zconfwrap() is called, so it's safe
+- * to go ahead and always set it.
+- */
+- (yy_did_buffer_switch_on_eof) = 1;
+-}
+-
+-static void zconf_load_buffer_state (void)
+-{
+- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+- zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+- (yy_hold_char) = *(yy_c_buf_p);
+-}
+-
+-/** Allocate and initialize an input buffer state.
+- * @param file A readable stream.
+- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+- *
+- * @return the allocated buffer state.
+- */
+- YY_BUFFER_STATE zconf_create_buffer (FILE * file, int size )
+-{
+- YY_BUFFER_STATE b;
+-
+- b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) );
+- if ( ! b )
+- YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
+-
+- b->yy_buf_size = size;
+-
+- /* yy_ch_buf has to be 2 characters longer than the size given because
+- * we need to put in 2 end-of-buffer characters.
+- */
+- b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2 );
+- if ( ! b->yy_ch_buf )
+- YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
+-
+- b->yy_is_our_buffer = 1;
+-
+- zconf_init_buffer(b,file );
+-
+- return b;
+-}
+-
+-/** Destroy the buffer.
+- * @param b a buffer created with zconf_create_buffer()
+- *
+- */
+- void zconf_delete_buffer (YY_BUFFER_STATE b )
+-{
+-
+- if ( ! b )
+- return;
+-
+- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+-
+- if ( b->yy_is_our_buffer )
+- zconffree((void *) b->yy_ch_buf );
+-
+- zconffree((void *) b );
+-}
+-
+-/* Initializes or reinitializes a buffer.
+- * This function is sometimes called more than once on the same buffer,
+- * such as during a zconfrestart() or at EOF.
+- */
+- static void zconf_init_buffer (YY_BUFFER_STATE b, FILE * file )
+-
+-{
+- int oerrno = errno;
+-
+- zconf_flush_buffer(b );
+-
+- b->yy_input_file = file;
+- b->yy_fill_buffer = 1;
+-
+- /* If b is the current buffer, then zconf_init_buffer was _probably_
+- * called from zconfrestart() or through yy_get_next_buffer.
+- * In that case, we don't want to reset the lineno or column.
+- */
+- if (b != YY_CURRENT_BUFFER){
+- b->yy_bs_lineno = 1;
+- b->yy_bs_column = 0;
+- }
+-
+- b->yy_is_interactive = 0;
+-
+- errno = oerrno;
+-}
+-
+-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+- *
+- */
+- void zconf_flush_buffer (YY_BUFFER_STATE b )
+-{
+- if ( ! b )
+- return;
+-
+- b->yy_n_chars = 0;
+-
+- /* We always need two end-of-buffer characters. The first causes
+- * a transition to the end-of-buffer state. The second causes
+- * a jam in that state.
+- */
+- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+-
+- b->yy_buf_pos = &b->yy_ch_buf[0];
+-
+- b->yy_at_bol = 1;
+- b->yy_buffer_status = YY_BUFFER_NEW;
+-
+- if ( b == YY_CURRENT_BUFFER )
+- zconf_load_buffer_state( );
+-}
+-
+-/** Pushes the new state onto the stack. The new state becomes
+- * the current state. This function will allocate the stack
+- * if necessary.
+- * @param new_buffer The new state.
+- *
+- */
+-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
+-{
+- if (new_buffer == NULL)
+- return;
+-
+- zconfensure_buffer_stack();
+-
+- /* This block is copied from zconf_switch_to_buffer. */
+- if ( YY_CURRENT_BUFFER )
+- {
+- /* Flush out information for old buffer. */
+- *(yy_c_buf_p) = (yy_hold_char);
+- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+- }
+-
+- /* Only push if top exists. Otherwise, replace top. */
+- if (YY_CURRENT_BUFFER)
+- (yy_buffer_stack_top)++;
+- YY_CURRENT_BUFFER_LVALUE = new_buffer;
+-
+- /* copied from zconf_switch_to_buffer. */
+- zconf_load_buffer_state( );
+- (yy_did_buffer_switch_on_eof) = 1;
+-}
+-
+-/** Removes and deletes the top of the stack, if present.
+- * The next element becomes the new top.
+- *
+- */
+-void zconfpop_buffer_state (void)
+-{
+- if (!YY_CURRENT_BUFFER)
+- return;
+-
+- zconf_delete_buffer(YY_CURRENT_BUFFER );
+- YY_CURRENT_BUFFER_LVALUE = NULL;
+- if ((yy_buffer_stack_top) > 0)
+- --(yy_buffer_stack_top);
+-
+- if (YY_CURRENT_BUFFER) {
+- zconf_load_buffer_state( );
+- (yy_did_buffer_switch_on_eof) = 1;
+- }
+-}
+-
+-/* Allocates the stack if it does not exist.
+- * Guarantees space for at least one push.
+- */
+-static void zconfensure_buffer_stack (void)
+-{
+- int num_to_alloc;
+-
+- if (!(yy_buffer_stack)) {
+-
+- /* First allocation is just for 2 elements, since we don't know if this
+- * scanner will even need a stack. We use 2 instead of 1 to avoid an
+- * immediate realloc on the next call.
+- */
+- num_to_alloc = 1;
+- (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
+- (num_to_alloc * sizeof(struct yy_buffer_state*)
+- );
+- if ( ! (yy_buffer_stack) )
+- YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
+-
+- memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+-
+- (yy_buffer_stack_max) = num_to_alloc;
+- (yy_buffer_stack_top) = 0;
+- return;
+- }
+-
+- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+-
+- /* Increase the buffer to prepare for a possible push. */
+- int grow_size = 8 /* arbitrary grow size */;
+-
+- num_to_alloc = (yy_buffer_stack_max) + grow_size;
+- (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
+- ((yy_buffer_stack),
+- num_to_alloc * sizeof(struct yy_buffer_state*)
+- );
+- if ( ! (yy_buffer_stack) )
+- YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
+-
+- /* zero only the new slots.*/
+- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+- (yy_buffer_stack_max) = num_to_alloc;
+- }
+-}
+-
+-/** Setup the input buffer state to scan directly from a user-specified character buffer.
+- * @param base the character buffer
+- * @param size the size in bytes of the character buffer
+- *
+- * @return the newly allocated buffer state object.
+- */
+-YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
+-{
+- YY_BUFFER_STATE b;
+-
+- if ( size < 2 ||
+- base[size-2] != YY_END_OF_BUFFER_CHAR ||
+- base[size-1] != YY_END_OF_BUFFER_CHAR )
+- /* They forgot to leave room for the EOB's. */
+- return 0;
+-
+- b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) );
+- if ( ! b )
+- YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
+-
+- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+- b->yy_buf_pos = b->yy_ch_buf = base;
+- b->yy_is_our_buffer = 0;
+- b->yy_input_file = 0;
+- b->yy_n_chars = b->yy_buf_size;
+- b->yy_is_interactive = 0;
+- b->yy_at_bol = 1;
+- b->yy_fill_buffer = 0;
+- b->yy_buffer_status = YY_BUFFER_NEW;
+-
+- zconf_switch_to_buffer(b );
+-
+- return b;
+-}
+-
+-/** Setup the input buffer state to scan a string. The next call to zconflex() will
+- * scan from a @e copy of @a str.
+- * @param yystr a NUL-terminated string to scan
+- *
+- * @return the newly allocated buffer state object.
+- * @note If you want to scan bytes that may contain NUL values, then use
+- * zconf_scan_bytes() instead.
+- */
+-YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr )
+-{
+-
+- return zconf_scan_bytes(yystr,strlen(yystr) );
+-}
+-
+-/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
+- * scan from a @e copy of @a bytes.
+- * @param bytes the byte buffer to scan
+- * @param len the number of bytes in the buffer pointed to by @a bytes.
+- *
+- * @return the newly allocated buffer state object.
+- */
+-YY_BUFFER_STATE zconf_scan_bytes (yyconst char * yybytes, int _yybytes_len )
+-{
+- YY_BUFFER_STATE b;
+- char *buf;
+- yy_size_t n;
+- int i;
+-
+- /* Get memory for full buffer, including space for trailing EOB's. */
+- n = _yybytes_len + 2;
+- buf = (char *) zconfalloc(n );
+- if ( ! buf )
+- YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
+-
+- for ( i = 0; i < _yybytes_len; ++i )
+- buf[i] = yybytes[i];
+-
+- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+-
+- b = zconf_scan_buffer(buf,n );
+- if ( ! b )
+- YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
+-
+- /* It's okay to grow etc. this buffer, and we should throw it
+- * away when we're done.
+- */
+- b->yy_is_our_buffer = 1;
+-
+- return b;
+-}
+-
+-#ifndef YY_EXIT_FAILURE
+-#define YY_EXIT_FAILURE 2
+-#endif
+-
+-static void yy_fatal_error (yyconst char* msg )
+-{
+- (void) fprintf( stderr, "%s\n", msg );
+- exit( YY_EXIT_FAILURE );
+-}
+-
+-/* Redefine yyless() so it works in section 3 code. */
+-
+-#undef yyless
+-#define yyless(n) \
+- do \
+- { \
+- /* Undo effects of setting up zconftext. */ \
+- int yyless_macro_arg = (n); \
+- YY_LESS_LINENO(yyless_macro_arg);\
+- zconftext[zconfleng] = (yy_hold_char); \
+- (yy_c_buf_p) = zconftext + yyless_macro_arg; \
+- (yy_hold_char) = *(yy_c_buf_p); \
+- *(yy_c_buf_p) = '\0'; \
+- zconfleng = yyless_macro_arg; \
+- } \
+- while ( 0 )
+-
+-/* Accessor methods (get/set functions) to struct members. */
+-
+-/** Get the current line number.
+- *
+- */
+-int zconfget_lineno (void)
+-{
+-
+- return zconflineno;
+-}
+-
+-/** Get the input stream.
+- *
+- */
+-FILE *zconfget_in (void)
+-{
+- return zconfin;
+-}
+-
+-/** Get the output stream.
+- *
+- */
+-FILE *zconfget_out (void)
+-{
+- return zconfout;
+-}
+-
+-/** Get the length of the current token.
+- *
+- */
+-int zconfget_leng (void)
+-{
+- return zconfleng;
+-}
+-
+-/** Get the current token.
+- *
+- */
+-
+-char *zconfget_text (void)
+-{
+- return zconftext;
+-}
+-
+-/** Set the current line number.
+- * @param line_number
+- *
+- */
+-void zconfset_lineno (int line_number )
+-{
+-
+- zconflineno = line_number;
+-}
+-
+-/** Set the input stream. This does not discard the current
+- * input buffer.
+- * @param in_str A readable stream.
+- *
+- * @see zconf_switch_to_buffer
+- */
+-void zconfset_in (FILE * in_str )
+-{
+- zconfin = in_str ;
+-}
+-
+-void zconfset_out (FILE * out_str )
+-{
+- zconfout = out_str ;
+-}
+-
+-int zconfget_debug (void)
+-{
+- return zconf_flex_debug;
+-}
+-
+-void zconfset_debug (int bdebug )
+-{
+- zconf_flex_debug = bdebug ;
+-}
+-
+-static int yy_init_globals (void)
+-{
+- /* Initialization is the same as for the non-reentrant scanner.
+- * This function is called from zconflex_destroy(), so don't allocate here.
+- */
+-
+- (yy_buffer_stack) = 0;
+- (yy_buffer_stack_top) = 0;
+- (yy_buffer_stack_max) = 0;
+- (yy_c_buf_p) = (char *) 0;
+- (yy_init) = 0;
+- (yy_start) = 0;
+-
+-/* Defined in main.c */
+-#ifdef YY_STDINIT
+- zconfin = stdin;
+- zconfout = stdout;
+-#else
+- zconfin = (FILE *) 0;
+- zconfout = (FILE *) 0;
+-#endif
+-
+- /* For future reference: Set errno on error, since we are called by
+- * zconflex_init()
+- */
+- return 0;
+-}
+-
+-/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
+-int zconflex_destroy (void)
+-{
+-
+- /* Pop the buffer stack, destroying each element. */
+- while(YY_CURRENT_BUFFER){
+- zconf_delete_buffer(YY_CURRENT_BUFFER );
+- YY_CURRENT_BUFFER_LVALUE = NULL;
+- zconfpop_buffer_state();
+- }
+-
+- /* Destroy the stack itself. */
+- zconffree((yy_buffer_stack) );
+- (yy_buffer_stack) = NULL;
+-
+- /* Reset the globals. This is important in a non-reentrant scanner so the next time
+- * zconflex() is called, initialization will occur. */
+- yy_init_globals( );
+-
+- return 0;
+-}
+-
+-/*
+- * Internal utility routines.
+- */
+-
+-#ifndef yytext_ptr
+-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+-{
+- register int i;
+- for ( i = 0; i < n; ++i )
+- s1[i] = s2[i];
+-}
+-#endif
+-
+-#ifdef YY_NEED_STRLEN
+-static int yy_flex_strlen (yyconst char * s )
+-{
+- register int n;
+- for ( n = 0; s[n]; ++n )
+- ;
+-
+- return n;
+-}
+-#endif
+-
+-void *zconfalloc (yy_size_t size )
+-{
+- return (void *) malloc( size );
+-}
+-
+-void *zconfrealloc (void * ptr, yy_size_t size )
+-{
+- /* The cast to (char *) in the following accommodates both
+- * implementations that use char* generic pointers, and those
+- * that use void* generic pointers. It works with the latter
+- * because both ANSI C and C++ allow castless assignment from
+- * any pointer type to void*, and deal with argument conversions
+- * as though doing an assignment.
+- */
+- return (void *) realloc( (char *) ptr, size );
+-}
+-
+-void zconffree (void * ptr )
+-{
+- free( (char *) ptr ); /* see zconfrealloc() for (char *) cast */
+-}
+-
+-#define YYTABLES_NAME "yytables"
+-
+-void zconf_starthelp(void)
+-{
+- new_string();
+- last_ts = first_ts = 0;
+- BEGIN(HELP);
+-}
+-
+-static void zconf_endhelp(void)
+-{
+- zconflval.string = text;
+- BEGIN(INITIAL);
+-}
+-
+-/*
+- * Try to open specified file with following names:
+- * ./name
+- * $(srctree)/name
+- * The latter is used when srctree is separate from objtree
+- * when compiling the kernel.
+- * Return NULL if file is not found.
+- */
+-FILE *zconf_fopen(const char *name)
+-{
+- char *env, fullname[PATH_MAX+1];
+- FILE *f;
+-
+- f = fopen(name, "r");
+- if (!f && name != NULL && name[0] != '/') {
+- env = getenv(SRCTREE);
+- if (env) {
+- sprintf(fullname, "%s/%s", env, name);
+- f = fopen(fullname, "r");
+- }
+- }
+- return f;
+-}
+-
+-void zconf_initscan(const char *name)
+-{
+- zconfin = zconf_fopen(name);
+- if (!zconfin) {
+- printf("can't find file %s\n", name);
+- exit(1);
+- }
+-
+- current_buf = malloc(sizeof(*current_buf));
+- memset(current_buf, 0, sizeof(*current_buf));
+-
+- current_file = file_lookup(name);
+- current_file->lineno = 1;
+- current_file->flags = FILE_BUSY;
+-}
+-
+-void zconf_nextfile(const char *name)
+-{
+- struct file *file = file_lookup(name);
+- struct buffer *buf = malloc(sizeof(*buf));
+- memset(buf, 0, sizeof(*buf));
+-
+- current_buf->state = YY_CURRENT_BUFFER;
+- zconfin = zconf_fopen(name);
+- if (!zconfin) {
+- printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+- exit(1);
+- }
+- zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
+- buf->parent = current_buf;
+- current_buf = buf;
+-
+- if (file->flags & FILE_BUSY) {
+- printf("%s:%d: do not source '%s' from itself\n",
+- zconf_curname(), zconf_lineno(), name);
+- exit(1);
+- }
+- if (file->flags & FILE_SCANNED) {
+- printf("%s:%d: file '%s' is already sourced from '%s'\n",
+- zconf_curname(), zconf_lineno(), name,
+- file->parent->name);
+- exit(1);
+- }
+- file->flags |= FILE_BUSY;
+- file->lineno = 1;
+- file->parent = current_file;
+- current_file = file;
+-}
+-
+-static void zconf_endfile(void)
+-{
+- struct buffer *parent;
+-
+- current_file->flags |= FILE_SCANNED;
+- current_file->flags &= ~FILE_BUSY;
+- current_file = current_file->parent;
+-
+- parent = current_buf->parent;
+- if (parent) {
+- fclose(zconfin);
+- zconf_delete_buffer(YY_CURRENT_BUFFER);
+- zconf_switch_to_buffer(parent->state);
+- }
+- free(current_buf);
+- current_buf = parent;
+-}
+-
+-int zconf_lineno(void)
+-{
+- return current_pos.lineno;
+-}
+-
+-char *zconf_curname(void)
+-{
+- return current_pos.file ? current_pos.file->name : "<none>";
+-}
+-
+diff -Nur uClibc-0.9.33.2/extra/config/list.h uClibc-git/extra/config/list.h
+--- uClibc-0.9.33.2/extra/config/list.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/list.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,131 @@
++#ifndef LIST_H
++#define LIST_H
++
++/*
++ * Copied from include/linux/...
++ */
++
++#undef offsetof
++#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++
++/**
++ * container_of - cast a member of a structure out to the containing structure
++ * @ptr: the pointer to the member.
++ * @type: the type of the container struct this is embedded in.
++ * @member: the name of the member within the struct.
++ *
++ */
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++
++
++struct list_head {
++ struct list_head *next, *prev;
++};
++
++
++#define LIST_HEAD_INIT(name) { &(name), &(name) }
++
++#define LIST_HEAD(name) \
++ struct list_head name = LIST_HEAD_INIT(name)
++
++/**
++ * list_entry - get the struct for this entry
++ * @ptr: the &struct list_head pointer.
++ * @type: the type of the struct this is embedded in.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_entry(ptr, type, member) \
++ container_of(ptr, type, member)
++
++/**
++ * list_for_each_entry - iterate over list of given type
++ * @pos: the type * to use as a loop cursor.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry(pos, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
++ * @pos: the type * to use as a loop cursor.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_safe(pos, n, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member), \
++ n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_empty - tests whether a list is empty
++ * @head: the list to test.
++ */
++static inline int list_empty(const struct list_head *head)
++{
++ return head->next == head;
++}
++
++/*
++ * Insert a new entry between two known consecutive entries.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_add(struct list_head *_new,
++ struct list_head *prev,
++ struct list_head *next)
++{
++ next->prev = _new;
++ _new->next = next;
++ _new->prev = prev;
++ prev->next = _new;
++}
++
++/**
++ * list_add_tail - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it before
++ *
++ * Insert a new entry before the specified head.
++ * This is useful for implementing queues.
++ */
++static inline void list_add_tail(struct list_head *_new, struct list_head *head)
++{
++ __list_add(_new, head->prev, head);
++}
++
++/*
++ * Delete a list entry by making the prev/next entries
++ * point to each other.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_del(struct list_head *prev, struct list_head *next)
++{
++ next->prev = prev;
++ prev->next = next;
++}
++
++#define LIST_POISON1 ((void *) 0x00100100)
++#define LIST_POISON2 ((void *) 0x00200200)
++/**
++ * list_del - deletes entry from list.
++ * @entry: the element to delete from the list.
++ * Note: list_empty() on entry does not return true after this, the entry is
++ * in an undefined state.
++ */
++static inline void list_del(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ entry->next = (struct list_head*)LIST_POISON1;
++ entry->prev = (struct list_head*)LIST_POISON2;
++}
++#endif
+diff -Nur uClibc-0.9.33.2/extra/config/lkc.h uClibc-git/extra/config/lkc.h
+--- uClibc-0.9.33.2/extra/config/lkc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lkc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,29 +14,37 @@
+ static inline const char *gettext(const char *txt) { return txt; }
+ static inline void textdomain(const char *domainname) {}
+ static inline void bindtextdomain(const char *name, const char *dir) {}
++static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; }
+ #endif
+
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
+-#ifdef LKC_DIRECT_LINK
+ #define P(name,type,arg) extern type name arg
+-#else
+-#include "lkc_defs.h"
+-#define P(name,type,arg) extern type (*name ## _p) arg
+-#endif
+ #include "lkc_proto.h"
+ #undef P
+
+ #define SRCTREE "srctree"
+
++#ifndef PACKAGE
+ #define PACKAGE "linux"
++#endif
++
+ #define LOCALEDIR "/usr/share/locale"
+
+ #define _(text) gettext(text)
+ #define N_(text) (text)
+
++#ifndef CONFIG_
++#define CONFIG_ "CONFIG_"
++#endif
++static inline const char *CONFIG_prefix(void)
++{
++ return getenv( "CONFIG_" ) ?: CONFIG_;
++}
++#undef CONFIG_
++#define CONFIG_ CONFIG_prefix()
+
+ #define TF_COMMAND 0x0001
+ #define TF_PARAM 0x0002
+@@ -61,35 +69,49 @@
+ enum symbol_type stype;
+ };
+
++extern int zconfdebug;
++
+ int zconfparse(void);
+ void zconfdump(FILE *out);
+-
+-extern int zconfdebug;
+ void zconf_starthelp(void);
+ FILE *zconf_fopen(const char *name);
+ void zconf_initscan(const char *name);
+ void zconf_nextfile(const char *name);
+ int zconf_lineno(void);
+-char *zconf_curname(void);
++const char *zconf_curname(void);
+
+ /* confdata.c */
+ const char *conf_get_configname(void);
++const char *conf_get_autoconfig_name(void);
+ char *conf_get_default_confname(void);
+ void sym_set_change_count(int count);
+ void sym_add_change_count(int count);
+-void conf_set_all_new_symbols(enum conf_def_mode mode);
++bool conf_set_all_new_symbols(enum conf_def_mode mode);
++void set_all_choice_values(struct symbol *csym);
++
++struct conf_printer {
++ void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
++ void (*print_comment)(FILE *, const char *, void *);
++};
+
+-/* kconfig_load.c */
+-void kconfig_load(void);
++/* confdata.c and expr.c */
++static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
++{
++ assert(len != 0);
++
++ if (fwrite(str, len, count, out) != count)
++ fprintf(stderr, "Error in writing or end of file.\n");
++}
+
+ /* menu.c */
+-void menu_init(void);
++void _menu_init(void);
+ void menu_warn(struct menu *menu, const char *fmt, ...);
+ struct menu *menu_add_menu(void);
+ void menu_end_menu(void);
+ void menu_add_entry(struct symbol *sym);
+ void menu_end_entry(void);
+ void menu_add_dep(struct expr *dep);
++void menu_add_visibility(struct expr *dep);
+ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep);
+ struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
+ void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
+@@ -101,10 +123,19 @@
+ /* util.c */
+ struct file *file_lookup(const char *name);
+ int file_write_dep(const char *name);
++void *xmalloc(size_t size);
++void *xcalloc(size_t nmemb, size_t size);
++char *dir_name(char *path);
++char *base_name(char *path);
+
+ struct gstr {
+ size_t len;
+ char *s;
++ /*
++ * when max_width is not zero long lines in string s (if any) get
++ * wrapped not to exceed the max_width value
++ */
++ int max_width;
+ };
+ struct gstr str_new(void);
+ struct gstr str_assign(const char *s);
+@@ -120,6 +151,8 @@
+ void sym_clear_all_valid(void);
+ void sym_set_all_changed(void);
+ void sym_set_changed(struct symbol *sym);
++struct symbol *sym_choice_default(struct symbol *sym);
++const char *sym_get_string_default(struct symbol *sym);
+ struct symbol *sym_check_deps(struct symbol *sym);
+ struct property *prop_alloc(enum prop_type type, struct symbol *sym);
+ struct symbol *prop_get_symbol(struct property *prop);
+diff -Nur uClibc-0.9.33.2/extra/config/lkc_proto.h uClibc-git/extra/config/lkc_proto.h
+--- uClibc-0.9.33.2/extra/config/lkc_proto.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lkc_proto.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,28 +1,40 @@
++#include <stdarg.h>
+
+ /* confdata.c */
+ P(conf_parse,void,(const char *name));
+ P(conf_read,int,(const char *name));
+ P(conf_read_simple,int,(const char *name, int));
++P(conf_write_defconfig,int,(const char *name));
+ P(conf_write,int,(const char *name));
+ P(conf_write_autoconf,int,(void));
+ P(conf_get_changed,bool,(void));
+ P(conf_set_changed_callback, void,(void (*fn)(void)));
++P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
+
+ /* menu.c */
+ P(rootmenu,struct menu,);
+
+-P(menu_is_visible,bool,(struct menu *menu));
++P(menu_is_empty, bool, (struct menu *menu));
++P(menu_is_visible, bool, (struct menu *menu));
++P(menu_has_prompt, bool, (struct menu *menu));
+ P(menu_get_prompt,const char *,(struct menu *menu));
+ P(menu_get_root_menu,struct menu *,(struct menu *menu));
+ P(menu_get_parent_menu,struct menu *,(struct menu *menu));
+ P(menu_has_help,bool,(struct menu *menu));
+ P(menu_get_help,const char *,(struct menu *menu));
++P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct list_head
++ *head));
++P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct list_head
++ *head));
++P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
+
+ /* symbol.c */
+ P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
+
+ P(sym_lookup,struct symbol *,(const char *name, int flags));
+ P(sym_find,struct symbol *,(const char *name));
++P(sym_expand_string_value,const char *,(const char *in));
++P(sym_escape_string_value, const char *,(const char *in));
+ P(sym_re_search,struct symbol **,(const char *pattern));
+ P(sym_type_name,const char *,(enum symbol_type type));
+ P(sym_calc_value,void,(struct symbol *sym));
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/checklist.c uClibc-git/extra/config/lxdialog/checklist.c
+--- uClibc-0.9.33.2/extra/config/lxdialog/checklist.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/checklist.c 2014-02-03 12:32:56.000000000 +0100
+@@ -31,6 +31,10 @@
+ static void print_item(WINDOW * win, int choice, int selected)
+ {
+ int i;
++ char *list_item = malloc(list_width + 1);
++
++ strncpy(list_item, item_str(), list_width - item_x);
++ list_item[list_width - item_x] = '\0';
+
+ /* Clear 'residue' of last item */
+ wattrset(win, dlg.menubox.atr);
+@@ -41,16 +45,18 @@
+ wmove(win, choice, check_x);
+ wattrset(win, selected ? dlg.check_selected.atr
+ : dlg.check.atr);
+- wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
++ if (!item_is_tag(':'))
++ wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
+
+ wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
+- mvwaddch(win, choice, item_x, item_str()[0]);
++ mvwaddch(win, choice, item_x, list_item[0]);
+ wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
+- waddstr(win, (char *)item_str() + 1);
++ waddstr(win, list_item + 1);
+ if (selected) {
+ wmove(win, choice, check_x + 1);
+ wrefresh(win);
+ }
++ free(list_item);
+ }
+
+ /*
+@@ -126,16 +132,16 @@
+ }
+
+ do_resize:
+- if (getmaxy(stdscr) < (height + 6))
++ if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN))
+ return -ERRDISPLAYTOOSMALL;
+- if (getmaxx(stdscr) < (width + 6))
++ if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN))
+ return -ERRDISPLAYTOOSMALL;
+
+ max_choice = MIN(list_height, item_count());
+
+ /* center dialog box on screen */
+- x = (COLS - width) / 2;
+- y = (LINES - height) / 2;
++ x = (getmaxx(stdscr) - width) / 2;
++ y = (getmaxy(stdscr) - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+@@ -174,6 +180,7 @@
+ check_x = 0;
+ item_foreach()
+ check_x = MAX(check_x, strlen(item_str()) + 4);
++ check_x = MIN(check_x, list_width);
+
+ check_x = (list_width - check_x) / 2;
+ item_x = check_x + 4;
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/check-lxdialog.sh uClibc-git/extra/config/lxdialog/check-lxdialog.sh
+--- uClibc-0.9.33.2/extra/config/lxdialog/check-lxdialog.sh 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/check-lxdialog.sh 2014-02-03 12:32:56.000000000 +0100
+@@ -4,7 +4,9 @@
+ # What library to link
+ ldflags()
+ {
+- for ext in so a dylib ; do
++ pkg-config --libs ncursesw 2>/dev/null && exit
++ pkg-config --libs ncurses 2>/dev/null && exit
++ for ext in so a dll.a dylib ; do
+ for lib in ncursesw ncurses curses ; do
+ $cc -print-file-name=lib${lib}.${ext} | grep -q /
+ if [ $? -eq 0 ]; then
+@@ -19,14 +21,13 @@
+ # Where is ncurses.h?
+ ccflags()
+ {
+- if [ -f /usr/include/ncursesw/ncurses.h ]; then
+- echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncurses.h>"'
+- elif [ -f /usr/include/ncursesw/curses.h ]; then
+- echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
++ if [ -f /usr/include/ncursesw/curses.h ]; then
++ echo '-I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"'
++ echo ' -DNCURSES_WIDECHAR=1'
+ elif [ -f /usr/include/ncurses/ncurses.h ]; then
+ echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
+ elif [ -f /usr/include/ncurses/curses.h ]; then
+- echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
++ echo '-I/usr/include/ncurses -DCURSES_LOC="<curses.h>"'
+ elif [ -f /usr/include/ncurses.h ]; then
+ echo '-DCURSES_LOC="<ncurses.h>"'
+ else
+@@ -40,7 +41,7 @@
+
+ # Check if we can link to ncurses
+ check() {
+- $cc -xc - -o $tmp 2>/dev/null <<'EOF'
++ $cc -x c - -o $tmp 2>/dev/null <<'EOF'
+ #include CURSES_LOC
+ main() {}
+ EOF
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/dialog.h uClibc-git/extra/config/lxdialog/dialog.h
+--- uClibc-0.9.33.2/extra/config/lxdialog/dialog.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/dialog.h 2014-02-03 12:32:56.000000000 +0100
+@@ -106,8 +106,14 @@
+ int hl; /* highlight this item */
+ };
+
++struct subtitle_list {
++ struct subtitle_list *next;
++ const char *text;
++};
++
+ struct dialog_info {
+ const char *backtitle;
++ struct subtitle_list *subtitles;
+ struct dialog_color screen;
+ struct dialog_color shadow;
+ struct dialog_color dialog;
+@@ -144,6 +150,7 @@
+ */
+ extern struct dialog_info dlg;
+ extern char dialog_input_result[];
++extern int saved_x, saved_y; /* Needed in signal handler in mconf.c */
+
+ /*
+ * Function prototypes
+@@ -193,8 +200,23 @@
+ int on_key_esc(WINDOW *win);
+ int on_key_resize(void);
+
++/* minimum (re)size values */
++#define CHECKLIST_HEIGTH_MIN 6 /* For dialog_checklist() */
++#define CHECKLIST_WIDTH_MIN 6
++#define INPUTBOX_HEIGTH_MIN 2 /* For dialog_inputbox() */
++#define INPUTBOX_WIDTH_MIN 2
++#define MENUBOX_HEIGTH_MIN 15 /* For dialog_menu() */
++#define MENUBOX_WIDTH_MIN 65
++#define TEXTBOX_HEIGTH_MIN 8 /* For dialog_textbox() */
++#define TEXTBOX_WIDTH_MIN 8
++#define YESNO_HEIGTH_MIN 4 /* For dialog_yesno() */
++#define YESNO_WIDTH_MIN 4
++#define WINDOW_HEIGTH_MIN 19 /* For init_dialog() */
++#define WINDOW_WIDTH_MIN 80
++
+ int init_dialog(const char *backtitle);
+ void set_dialog_backtitle(const char *backtitle);
++void set_dialog_subtitles(struct subtitle_list *subtitles);
+ void end_dialog(int x, int y);
+ void attr_clear(WINDOW * win, int height, int width, chtype attr);
+ void dialog_clear(void);
+@@ -209,12 +231,17 @@
+ int dialog_yesno(const char *title, const char *prompt, int height, int width);
+ int dialog_msgbox(const char *title, const char *prompt, int height,
+ int width, int pause);
+-int dialog_textbox(const char *title, const char *file, int height, int width);
++
++
++typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
++ *_data);
++int dialog_textbox(const char *title, char *tbuf, int initial_height,
++ int initial_width, int *keys, int *_vscroll, int *_hscroll,
++ update_text_fn update_text, void *data);
+ int dialog_menu(const char *title, const char *prompt,
+ const void *selected, int *s_scroll);
+ int dialog_checklist(const char *title, const char *prompt, int height,
+ int width, int list_height);
+-extern char dialog_input_result[];
+ int dialog_inputbox(const char *title, const char *prompt, int height,
+ int width, const char *init);
+
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/inputbox.c uClibc-git/extra/config/lxdialog/inputbox.c
+--- uClibc-0.9.33.2/extra/config/lxdialog/inputbox.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/inputbox.c 2014-02-03 12:32:56.000000000 +0100
+@@ -45,7 +45,8 @@
+ const char *init)
+ {
+ int i, x, y, box_y, box_x, box_width;
+- int input_x = 0, scroll = 0, key = 0, button = -1;
++ int input_x = 0, key = 0, button = -1;
++ int show_x, len, pos;
+ char *instr = dialog_input_result;
+ WINDOW *dialog;
+
+@@ -55,14 +56,14 @@
+ strcpy(instr, init);
+
+ do_resize:
+- if (getmaxy(stdscr) <= (height - 2))
++ if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGTH_MIN))
+ return -ERRDISPLAYTOOSMALL;
+- if (getmaxx(stdscr) <= (width - 2))
++ if (getmaxx(stdscr) <= (width - INPUTBOX_WIDTH_MIN))
+ return -ERRDISPLAYTOOSMALL;
+
+ /* center dialog box on screen */
+- x = (COLS - width) / 2;
+- y = (LINES - height) / 2;
++ x = (getmaxx(stdscr) - width) / 2;
++ y = (getmaxy(stdscr) - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+@@ -97,14 +98,17 @@
+ wmove(dialog, box_y, box_x);
+ wattrset(dialog, dlg.inputbox.atr);
+
+- input_x = strlen(instr);
++ len = strlen(instr);
++ pos = len;
+
+- if (input_x >= box_width) {
+- scroll = input_x - box_width + 1;
++ if (len >= box_width) {
++ show_x = len - box_width + 1;
+ input_x = box_width - 1;
+ for (i = 0; i < box_width - 1; i++)
+- waddch(dialog, instr[scroll + i]);
++ waddch(dialog, instr[show_x + i]);
+ } else {
++ show_x = 0;
++ input_x = len;
+ waddstr(dialog, instr);
+ }
+
+@@ -121,45 +125,104 @@
+ case KEY_UP:
+ case KEY_DOWN:
+ break;
+- case KEY_LEFT:
+- continue;
+- case KEY_RIGHT:
+- continue;
+ case KEY_BACKSPACE:
+ case 127:
+- if (input_x || scroll) {
++ if (pos) {
+ wattrset(dialog, dlg.inputbox.atr);
+- if (!input_x) {
+- scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1);
+- wmove(dialog, box_y, box_x);
+- for (i = 0; i < box_width; i++)
+- waddch(dialog,
+- instr[scroll + input_x + i] ?
+- instr[scroll + input_x + i] : ' ');
+- input_x = strlen(instr) - scroll;
++ if (input_x == 0) {
++ show_x--;
+ } else
+ input_x--;
+- instr[scroll + input_x] = '\0';
+- mvwaddch(dialog, box_y, input_x + box_x, ' ');
++
++ if (pos < len) {
++ for (i = pos - 1; i < len; i++) {
++ instr[i] = instr[i+1];
++ }
++ }
++
++ pos--;
++ len--;
++ instr[len] = '\0';
++ wmove(dialog, box_y, box_x);
++ for (i = 0; i < box_width; i++) {
++ if (!instr[show_x + i]) {
++ waddch(dialog, ' ');
++ break;
++ }
++ waddch(dialog, instr[show_x + i]);
++ }
+ wmove(dialog, box_y, input_x + box_x);
+ wrefresh(dialog);
+ }
+ continue;
++ case KEY_LEFT:
++ if (pos > 0) {
++ if (input_x > 0) {
++ wmove(dialog, box_y, --input_x + box_x);
++ } else if (input_x == 0) {
++ show_x--;
++ wmove(dialog, box_y, box_x);
++ for (i = 0; i < box_width; i++) {
++ if (!instr[show_x + i]) {
++ waddch(dialog, ' ');
++ break;
++ }
++ waddch(dialog, instr[show_x + i]);
++ }
++ wmove(dialog, box_y, box_x);
++ }
++ pos--;
++ }
++ continue;
++ case KEY_RIGHT:
++ if (pos < len) {
++ if (input_x < box_width - 1) {
++ wmove(dialog, box_y, ++input_x + box_x);
++ } else if (input_x == box_width - 1) {
++ show_x++;
++ wmove(dialog, box_y, box_x);
++ for (i = 0; i < box_width; i++) {
++ if (!instr[show_x + i]) {
++ waddch(dialog, ' ');
++ break;
++ }
++ waddch(dialog, instr[show_x + i]);
++ }
++ wmove(dialog, box_y, input_x + box_x);
++ }
++ pos++;
++ }
++ continue;
+ default:
+ if (key < 0x100 && isprint(key)) {
+- if (scroll + input_x < MAX_LEN) {
++ if (len < MAX_LEN) {
+ wattrset(dialog, dlg.inputbox.atr);
+- instr[scroll + input_x] = key;
+- instr[scroll + input_x + 1] = '\0';
++ if (pos < len) {
++ for (i = len; i > pos; i--)
++ instr[i] = instr[i-1];
++ instr[pos] = key;
++ } else {
++ instr[len] = key;
++ }
++ pos++;
++ len++;
++ instr[len] = '\0';
++
+ if (input_x == box_width - 1) {
+- scroll++;
+- wmove(dialog, box_y, box_x);
+- for (i = 0; i < box_width - 1; i++)
+- waddch(dialog, instr [scroll + i]);
++ show_x++;
+ } else {
+- wmove(dialog, box_y, input_x++ + box_x);
+- waddch(dialog, key);
++ input_x++;
++ }
++
++ wmove(dialog, box_y, box_x);
++ for (i = 0; i < box_width; i++) {
++ if (!instr[show_x + i]) {
++ waddch(dialog, ' ');
++ break;
++ }
++ waddch(dialog, instr[show_x + i]);
+ }
++ wmove(dialog, box_y, input_x + box_x);
+ wrefresh(dialog);
+ } else
+ flash(); /* Alarm user about overflow */
+@@ -180,7 +243,7 @@
+ case KEY_LEFT:
+ switch (button) {
+ case -1:
+- button = 1; /* Indicates "Cancel" button is selected */
++ button = 1; /* Indicates "Help" button is selected */
+ print_buttons(dialog, height, width, 1);
+ break;
+ case 0:
+@@ -204,7 +267,7 @@
+ print_buttons(dialog, height, width, 0);
+ break;
+ case 0:
+- button = 1; /* Indicates "Cancel" button is selected */
++ button = 1; /* Indicates "Help" button is selected */
+ print_buttons(dialog, height, width, 1);
+ break;
+ case 1:
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/menubox.c uClibc-git/extra/config/lxdialog/menubox.c
+--- uClibc-0.9.33.2/extra/config/lxdialog/menubox.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/menubox.c 2014-02-03 12:32:56.000000000 +0100
+@@ -154,12 +154,14 @@
+ */
+ static void print_buttons(WINDOW * win, int height, int width, int selected)
+ {
+- int x = width / 2 - 16;
++ int x = width / 2 - 28;
+ int y = height - 2;
+
+ print_button(win, gettext("Select"), y, x, selected == 0);
+ print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
+ print_button(win, gettext(" Help "), y, x + 24, selected == 2);
++ print_button(win, gettext(" Save "), y, x + 36, selected == 3);
++ print_button(win, gettext(" Load "), y, x + 48, selected == 4);
+
+ wmove(win, y, x + 1 + 12 * selected);
+ wrefresh(win);
+@@ -191,7 +193,7 @@
+ do_resize:
+ height = getmaxy(stdscr);
+ width = getmaxx(stdscr);
+- if (height < 15 || width < 65)
++ if (height < MENUBOX_HEIGTH_MIN || width < MENUBOX_WIDTH_MIN)
+ return -ERRDISPLAYTOOSMALL;
+
+ height -= 4;
+@@ -201,8 +203,8 @@
+ max_choice = MIN(menu_height, item_count());
+
+ /* center dialog box on screen */
+- x = (COLS - width) / 2;
+- y = (LINES - height) / 2;
++ x = (getmaxx(stdscr) - width) / 2;
++ y = (getmaxy(stdscr) - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+@@ -301,10 +303,11 @@
+ }
+ }
+
+- if (i < max_choice ||
+- key == KEY_UP || key == KEY_DOWN ||
+- key == '-' || key == '+' ||
+- key == KEY_PPAGE || key == KEY_NPAGE) {
++ if (item_count() != 0 &&
++ (i < max_choice ||
++ key == KEY_UP || key == KEY_DOWN ||
++ key == '-' || key == '+' ||
++ key == KEY_PPAGE || key == KEY_NPAGE)) {
+ /* Remove highligt of current item */
+ print_item(scroll + choice, choice, FALSE);
+
+@@ -372,7 +375,7 @@
+ case TAB:
+ case KEY_RIGHT:
+ button = ((key == KEY_LEFT ? --button : ++button) < 0)
+- ? 2 : (button > 2 ? 0 : button);
++ ? 4 : (button > 4 ? 0 : button);
+
+ print_buttons(dialog, height, width, button);
+ wrefresh(menu);
+@@ -383,6 +386,10 @@
+ case 'n':
+ case 'm':
+ case '/':
++ case 'h':
++ case '?':
++ case 'z':
++ case '\n':
+ /* save scroll info */
+ *s_scroll = scroll;
+ delwin(menu);
+@@ -390,30 +397,26 @@
+ item_set(scroll + choice);
+ item_set_selected(1);
+ switch (key) {
++ case 'h':
++ case '?':
++ return 2;
+ case 's':
+- return 3;
+ case 'y':
+- return 3;
++ return 5;
+ case 'n':
+- return 4;
++ return 6;
+ case 'm':
+- return 5;
++ return 7;
+ case ' ':
+- return 6;
++ return 8;
+ case '/':
+- return 7;
++ return 9;
++ case 'z':
++ return 10;
++ case '\n':
++ return button;
+ }
+ return 0;
+- case 'h':
+- case '?':
+- button = 2;
+- case '\n':
+- *s_scroll = scroll;
+- delwin(menu);
+- delwin(dialog);
+- item_set(scroll + choice);
+- item_set_selected(1);
+- return button;
+ case 'e':
+ case 'x':
+ key = KEY_ESC;
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/textbox.c uClibc-git/extra/config/lxdialog/textbox.c
+--- uClibc-0.9.33.2/extra/config/lxdialog/textbox.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/textbox.c 2014-02-03 12:32:56.000000000 +0100
+@@ -22,23 +22,25 @@
+ #include "dialog.h"
+
+ static void back_lines(int n);
+-static void print_page(WINDOW * win, int height, int width);
+-static void print_line(WINDOW * win, int row, int width);
++static void print_page(WINDOW *win, int height, int width, update_text_fn
++ update_text, void *data);
++static void print_line(WINDOW *win, int row, int width);
+ static char *get_line(void);
+ static void print_position(WINDOW * win);
+
+ static int hscroll;
+ static int begin_reached, end_reached, page_length;
+-static const char *buf;
+-static const char *page;
++static char *buf;
++static char *page;
+
+ /*
+ * refresh window content
+ */
+ static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
+- int cur_y, int cur_x)
++ int cur_y, int cur_x, update_text_fn update_text,
++ void *data)
+ {
+- print_page(box, boxh, boxw);
++ print_page(box, boxh, boxw, update_text, data);
+ print_position(dialog);
+ wmove(dialog, cur_y, cur_x); /* Restore cursor position */
+ wrefresh(dialog);
+@@ -47,14 +49,18 @@
+
+ /*
+ * Display text from a file in a dialog box.
++ *
++ * keys is a null-terminated array
++ * update_text() may not add or remove any '\n' or '\0' in tbuf
+ */
+-int dialog_textbox(const char *title, const char *tbuf,
+- int initial_height, int initial_width)
++int dialog_textbox(const char *title, char *tbuf, int initial_height,
++ int initial_width, int *keys, int *_vscroll, int *_hscroll,
++ update_text_fn update_text, void *data)
+ {
+ int i, x, y, cur_x, cur_y, key = 0;
+ int height, width, boxh, boxw;
+- int passed_end;
+ WINDOW *dialog, *box;
++ bool done = false;
+
+ begin_reached = 1;
+ end_reached = 0;
+@@ -63,9 +69,18 @@
+ buf = tbuf;
+ page = buf; /* page is pointer to start of page to be displayed */
+
++ if (_vscroll && *_vscroll) {
++ begin_reached = 0;
++
++ for (i = 0; i < *_vscroll; i++)
++ get_line();
++ }
++ if (_hscroll)
++ hscroll = *_hscroll;
++
+ do_resize:
+ getmaxyx(stdscr, height, width);
+- if (height < 8 || width < 8)
++ if (height < TEXTBOX_HEIGTH_MIN || width < TEXTBOX_WIDTH_MIN)
+ return -ERRDISPLAYTOOSMALL;
+ if (initial_height != 0)
+ height = initial_height;
+@@ -83,8 +98,8 @@
+ width = 0;
+
+ /* center dialog box on screen */
+- x = (COLS - width) / 2;
+- y = (LINES - height) / 2;
++ x = (getmaxx(stdscr) - width) / 2;
++ y = (getmaxy(stdscr) - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+@@ -120,25 +135,28 @@
+
+ /* Print first page of text */
+ attr_clear(box, boxh, boxw, dlg.dialog.atr);
+- refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text,
++ data);
+
+- while ((key != KEY_ESC) && (key != '\n')) {
++ while (!done) {
+ key = wgetch(dialog);
+ switch (key) {
+ case 'E': /* Exit */
+ case 'e':
+ case 'X':
+ case 'x':
+- delwin(box);
+- delwin(dialog);
+- return 0;
++ case 'q':
++ case '\n':
++ done = true;
++ break;
+ case 'g': /* First page */
+ case KEY_HOME:
+ if (!begin_reached) {
+ begin_reached = 1;
+ page = buf;
+ refresh_text_box(dialog, box, boxh, boxw,
+- cur_y, cur_x);
++ cur_y, cur_x, update_text,
++ data);
+ }
+ break;
+ case 'G': /* Last page */
+@@ -148,78 +166,48 @@
+ /* point to last char in buf */
+ page = buf + strlen(buf);
+ back_lines(boxh);
+- refresh_text_box(dialog, box, boxh, boxw,
+- cur_y, cur_x);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case 'K': /* Previous line */
+ case 'k':
+ case KEY_UP:
+- if (!begin_reached) {
+- back_lines(page_length + 1);
+-
+- /* We don't call print_page() here but use
+- * scrolling to ensure faster screen update.
+- * However, 'end_reached' and 'page_length'
+- * should still be updated, and 'page' should
+- * point to start of next page. This is done
+- * by calling get_line() in the following
+- * 'for' loop. */
+- scrollok(box, TRUE);
+- wscrl(box, -1); /* Scroll box region down one line */
+- scrollok(box, FALSE);
+- page_length = 0;
+- passed_end = 0;
+- for (i = 0; i < boxh; i++) {
+- if (!i) {
+- /* print first line of page */
+- print_line(box, 0, boxw);
+- wnoutrefresh(box);
+- } else
+- /* Called to update 'end_reached' and 'page' */
+- get_line();
+- if (!passed_end)
+- page_length++;
+- if (end_reached && !passed_end)
+- passed_end = 1;
+- }
++ if (begin_reached)
++ break;
+
+- print_position(dialog);
+- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
+- wrefresh(dialog);
+- }
++ back_lines(page_length + 1);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case 'B': /* Previous page */
+ case 'b':
++ case 'u':
+ case KEY_PPAGE:
+ if (begin_reached)
+ break;
+ back_lines(page_length + boxh);
+- refresh_text_box(dialog, box, boxh, boxw,
+- cur_y, cur_x);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case 'J': /* Next line */
+ case 'j':
+ case KEY_DOWN:
+- if (!end_reached) {
+- begin_reached = 0;
+- scrollok(box, TRUE);
+- scroll(box); /* Scroll box region up one line */
+- scrollok(box, FALSE);
+- print_line(box, boxh - 1, boxw);
+- wnoutrefresh(box);
+- print_position(dialog);
+- wmove(dialog, cur_y, cur_x); /* Restore cursor position */
+- wrefresh(dialog);
+- }
++ if (end_reached)
++ break;
++
++ back_lines(page_length - 1);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case KEY_NPAGE: /* Next page */
+ case ' ':
++ case 'd':
+ if (end_reached)
+ break;
+
+ begin_reached = 0;
+- refresh_text_box(dialog, box, boxh, boxw,
+- cur_y, cur_x);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case '0': /* Beginning of line */
+ case 'H': /* Scroll left */
+@@ -234,8 +222,8 @@
+ hscroll--;
+ /* Reprint current page to scroll horizontally */
+ back_lines(page_length);
+- refresh_text_box(dialog, box, boxh, boxw,
+- cur_y, cur_x);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case 'L': /* Scroll right */
+ case 'l':
+@@ -245,11 +233,12 @@
+ hscroll++;
+ /* Reprint current page to scroll horizontally */
+ back_lines(page_length);
+- refresh_text_box(dialog, box, boxh, boxw,
+- cur_y, cur_x);
++ refresh_text_box(dialog, box, boxh, boxw, cur_y,
++ cur_x, update_text, data);
+ break;
+ case KEY_ESC:
+- key = on_key_esc(dialog);
++ if (on_key_esc(dialog) == KEY_ESC)
++ done = true;
+ break;
+ case KEY_RESIZE:
+ back_lines(height);
+@@ -257,11 +246,31 @@
+ delwin(dialog);
+ on_key_resize();
+ goto do_resize;
++ default:
++ for (i = 0; keys[i]; i++) {
++ if (key == keys[i]) {
++ done = true;
++ break;
++ }
++ }
+ }
+ }
+ delwin(box);
+ delwin(dialog);
+- return key; /* ESC pressed */
++ if (_vscroll) {
++ const char *s;
++
++ s = buf;
++ *_vscroll = 0;
++ back_lines(page_length);
++ while (s < page && (s = strchr(s, '\n'))) {
++ (*_vscroll)++;
++ s++;
++ }
++ }
++ if (_hscroll)
++ *_hscroll = hscroll;
++ return key;
+ }
+
+ /*
+@@ -298,12 +307,23 @@
+ }
+
+ /*
+- * Print a new page of text. Called by dialog_textbox().
++ * Print a new page of text.
+ */
+-static void print_page(WINDOW * win, int height, int width)
++static void print_page(WINDOW *win, int height, int width, update_text_fn
++ update_text, void *data)
+ {
+ int i, passed_end = 0;
+
++ if (update_text) {
++ char *end;
++
++ for (i = 0; i < height; i++)
++ get_line();
++ end = page;
++ back_lines(height);
++ update_text(buf, page - buf, end - buf, data);
++ }
++
+ page_length = 0;
+ for (i = 0; i < height; i++) {
+ print_line(win, i, width);
+@@ -316,11 +336,10 @@
+ }
+
+ /*
+- * Print a new line of text. Called by dialog_textbox() and print_page().
++ * Print a new line of text.
+ */
+ static void print_line(WINDOW * win, int row, int width)
+ {
+- int y, x;
+ char *line;
+
+ line = get_line();
+@@ -329,10 +348,10 @@
+ waddch(win, ' ');
+ waddnstr(win, line, MIN(strlen(line), width - 2));
+
+- getyx(win, y, x);
+ /* Clear 'residue' of previous line */
+ #if OLD_NCURSES
+ {
++ int x = getcurx(win);
+ int i;
+ for (i = 0; i < width - x; i++)
+ waddch(win, ' ');
+@@ -355,10 +374,8 @@
+ end_reached = 0;
+ while (*page != '\n') {
+ if (*page == '\0') {
+- if (!end_reached) {
+- end_reached = 1;
+- break;
+- }
++ end_reached = 1;
++ break;
+ } else if (i < MAX_LEN)
+ line[i++] = *(page++);
+ else {
+@@ -371,7 +388,7 @@
+ if (i <= MAX_LEN)
+ line[i] = '\0';
+ if (!end_reached)
+- page++; /* move pass '\n' */
++ page++; /* move past '\n' */
+
+ return line;
+ }
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/util.c uClibc-git/extra/config/lxdialog/util.c
+--- uClibc-0.9.33.2/extra/config/lxdialog/util.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/util.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,8 +19,13 @@
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <stdarg.h>
++
+ #include "dialog.h"
+
++/* Needed in signal handler in mconf.c */
++int saved_x, saved_y;
++
+ struct dialog_info dlg;
+
+ static void set_mono_theme(void)
+@@ -249,15 +254,56 @@
+
+ void dialog_clear(void)
+ {
+- attr_clear(stdscr, LINES, COLS, dlg.screen.atr);
++ int lines, columns;
++
++ lines = getmaxy(stdscr);
++ columns = getmaxx(stdscr);
++
++ attr_clear(stdscr, lines, columns, dlg.screen.atr);
+ /* Display background title if it exists ... - SLH */
+ if (dlg.backtitle != NULL) {
+- int i;
++ int i, len = 0, skip = 0;
++ struct subtitle_list *pos;
+
+ wattrset(stdscr, dlg.screen.atr);
+ mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle);
++
++ for (pos = dlg.subtitles; pos != NULL; pos = pos->next) {
++ /* 3 is for the arrow and spaces */
++ len += strlen(pos->text) + 3;
++ }
++
+ wmove(stdscr, 1, 1);
+- for (i = 1; i < COLS - 1; i++)
++ if (len > columns - 2) {
++ const char *ellipsis = "[...] ";
++ waddstr(stdscr, ellipsis);
++ skip = len - (columns - 2 - strlen(ellipsis));
++ }
++
++ for (pos = dlg.subtitles; pos != NULL; pos = pos->next) {
++ if (skip == 0)
++ waddch(stdscr, ACS_RARROW);
++ else
++ skip--;
++
++ if (skip == 0)
++ waddch(stdscr, ' ');
++ else
++ skip--;
++
++ if (skip < strlen(pos->text)) {
++ waddstr(stdscr, pos->text + skip);
++ skip = 0;
++ } else
++ skip -= strlen(pos->text);
++
++ if (skip == 0)
++ waddch(stdscr, ' ');
++ else
++ skip--;
++ }
++
++ for (i = len + 1; i < columns - 1; i++)
+ waddch(stdscr, ACS_HLINE);
+ }
+ wnoutrefresh(stdscr);
+@@ -271,8 +317,12 @@
+ int height, width;
+
+ initscr(); /* Init curses */
++
++ /* Get current cursor position for signal handler in mconf.c */
++ getyx(stdscr, saved_y, saved_x);
++
+ getmaxyx(stdscr, height, width);
+- if (height < 19 || width < 80) {
++ if (height < WINDOW_HEIGTH_MIN || width < WINDOW_WIDTH_MIN) {
+ endwin();
+ return -ERRDISPLAYTOOSMALL;
+ }
+@@ -293,6 +343,11 @@
+ dlg.backtitle = backtitle;
+ }
+
++void set_dialog_subtitles(struct subtitle_list *subtitles)
++{
++ dlg.subtitles = subtitles;
++}
++
+ /*
+ * End using dialog functions.
+ */
+@@ -321,27 +376,19 @@
+ /*
+ * Print a string of text in a window, automatically wrap around to the
+ * next line if the string is too long to fit on one line. Newline
+- * characters '\n' are replaced by spaces. We start on a new line
++ * characters '\n' are propperly processed. We start on a new line
+ * if there is no room for at least 4 nonblanks following a double-space.
+ */
+ void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
+ {
+ int newl, cur_x, cur_y;
+- int i, prompt_len, room, wlen;
+- char tempstr[MAX_LEN + 1], *word, *sp, *sp2;
++ int prompt_len, room, wlen;
++ char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = 0;
+
+ strcpy(tempstr, prompt);
+
+ prompt_len = strlen(tempstr);
+
+- /*
+- * Remove newlines
+- */
+- for (i = 0; i < prompt_len; i++) {
+- if (tempstr[i] == '\n')
+- tempstr[i] = ' ';
+- }
+-
+ if (prompt_len <= width - x * 2) { /* If prompt is short */
+ wmove(win, y, (width - prompt_len) / 2);
+ waddstr(win, tempstr);
+@@ -351,7 +398,10 @@
+ newl = 1;
+ word = tempstr;
+ while (word && *word) {
+- sp = strchr(word, ' ');
++ sp = strpbrk(word, "\n ");
++ if (sp && *sp == '\n')
++ newline_separator = sp;
++
+ if (sp)
+ *sp++ = 0;
+
+@@ -363,7 +413,7 @@
+ if (wlen > room ||
+ (newl && wlen < 4 && sp
+ && wlen + 1 + strlen(sp) > room
+- && (!(sp2 = strchr(sp, ' '))
++ && (!(sp2 = strpbrk(sp, "\n "))
+ || wlen + 1 + (sp2 - sp) > room))) {
+ cur_y++;
+ cur_x = x;
+@@ -371,7 +421,15 @@
+ wmove(win, cur_y, cur_x);
+ waddstr(win, word);
+ getyx(win, cur_y, cur_x);
+- cur_x++;
++
++ /* Move to the next line if the word separator was a newline */
++ if (newline_separator) {
++ cur_y++;
++ cur_x = x;
++ newline_separator = 0;
++ } else
++ cur_x++;
++
+ if (sp && *sp == ' ') {
+ cur_x++; /* double space */
+ while (*++sp == ' ') ;
+diff -Nur uClibc-0.9.33.2/extra/config/lxdialog/yesno.c uClibc-git/extra/config/lxdialog/yesno.c
+--- uClibc-0.9.33.2/extra/config/lxdialog/yesno.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/lxdialog/yesno.c 2014-02-03 12:32:56.000000000 +0100
+@@ -45,14 +45,14 @@
+ WINDOW *dialog;
+
+ do_resize:
+- if (getmaxy(stdscr) < (height + 4))
++ if (getmaxy(stdscr) < (height + YESNO_HEIGTH_MIN))
+ return -ERRDISPLAYTOOSMALL;
+- if (getmaxx(stdscr) < (width + 4))
++ if (getmaxx(stdscr) < (width + YESNO_WIDTH_MIN))
+ return -ERRDISPLAYTOOSMALL;
+
+ /* center dialog box on screen */
+- x = (COLS - width) / 2;
+- y = (LINES - height) / 2;
++ x = (getmaxx(stdscr) - width) / 2;
++ y = (getmaxy(stdscr) - height) / 2;
+
+ draw_shadow(stdscr, y, x, height, width);
+
+diff -Nur uClibc-0.9.33.2/extra/config/Makefile uClibc-git/extra/config/Makefile
+--- uClibc-0.9.33.2/extra/config/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -1,16 +1,17 @@
+ top_srcdir ?= ../../
+
+-include $(top_srcdir)Rules.mak
+-include $(top_srcdir)Makerules
+-
+-# ugh
+-top_srcdir:=$(shell cd $(top_srcdir) && pwd)/
+ ifdef O
+ top_builddir ?= ../../
+ else
+ top_builddir = ../../
+ endif
+-srctree := $(top_srcdir)
++
++include $(top_srcdir)Rules.mak
++include $(top_srcdir)Makerules
++
++# ugh
++top_srcdir:=$(shell cd $(top_srcdir) && pwd)/
++
+ src := extra/config
+ obj := $(top_builddir)$(src)
+
+@@ -18,29 +19,23 @@
+ generated := $(addprefix $(obj)/,$(generated:.c=.o))
+
+ include $(top_srcdir)extra/config/Makefile.kconfig
+-PHONY += $(always)
+-chk-lxdialog := $(top_srcdir)$(src)/lxdialog/check-lxdialog.sh
+-check-lxdialog := cd $(obj) && $(CONFIG_SHELL) $(chk-lxdialog)
+-HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) -c '$(check-lxdialog) -ccflags')
+-HOST_LOADLIBES = $(shell $(CONFIG_SHELL) -c '$(check-lxdialog) -ldflags $(HOSTCC)')
+-HOST_EXTRACFLAGS += -DLOCALE
+-HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) -c '$(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS)')
++HOST_EXTRACFLAGS += -DCONFIG_='""'
+
+ # do not create temporary object in the readonly srctree
+-$(obj)/dochecklxdialog:
+- $(Q)cd $(obj) && $(CONFIG_SHELL) $(chk-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES)
+-HOSTCFLAGS_lex.zconf.o := -I$(top_srcdir)$(src)
++$(obj)/dochecklxdialog: CONFIG_SHELL:=cd $(obj) && $(CONFIG_SHELL)
++HOSTCFLAGS_zconf.lex.o := -I$(top_srcdir)$(src)
+ HOSTCFLAGS_zconf.tab.o := -I$(top_srcdir)$(src)
+ conf-objs := $(addprefix $(obj)/,$(conf-objs))
+ mconf-objs := $(addprefix $(obj)/,$(mconf-objs))
++nconf-objs := $(addprefix $(obj)/,$(nconf-objs))
+ kxgettext-objs := $(addprefix $(obj)/,$(kxgettext-objs))
+
+ ifeq ($(findstring mconf,$(MAKECMDGOALS)),mconf)
+ hostprogs-y += mconf
+ endif
+-
+-#BUILD_CFLAGS-config = -W -Wall -pedantic
+-#BUILD_CFLAGS-lxdialog = -W -Wall -pedantic
++ifeq ($(findstring nconf,$(MAKECMDGOALS)),nconf)
++hostprogs-y += nconf
++endif
+
+ __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
+ host-csingle:= $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
+@@ -48,16 +43,18 @@
+ $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
+ host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
+
+-conf mconf kxgettext: %: $(obj)/%
+-$(obj)/conf $(obj)/mconf $(obj)/kxgettext: BUILD_LDFLAGS=$(HOST_LOADLIBES)
++conf mconf nconf kxgettext: %: $(obj)/%
++$(obj)/conf $(obj)/mconf $(obj)/nconf $(obj)/kxgettext: BUILD_LDFLAGS=$(HOSTLOADLIBES_$(@F))
+ $(obj)/conf: $(conf-objs)
+ $(hcompile.u)
+ $(obj)/mconf: $(mconf-objs)
+ $(hcompile.u)
++$(obj)/nconf: $(nconf-objs)
++ $(hcompile.u)
+ $(obj)/kxgettext: $(kxgettext-objs)
+ $(hcompile.u)
+
+-$(host-csingle) $(host-cmulti) $(host-cobjs): BUILD_CFLAGS=$(HOST_EXTRACFLAGS) \
++$(host-csingle) $(host-cmulti) $(host-cobjs): BUILD_CFLAGS+=$(HOST_EXTRACFLAGS) \
+ $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F))
+
+ host-cobjs.nogen := $(filter-out $(generated),$(host-cobjs))
+@@ -68,19 +65,18 @@
+ $(host-cobjs.generated): $(obj)/%.o: $(obj)/%.c
+ $(hcompile.o)
+
+-ifndef LKC_GENPARSER
++# we use the pre-generated always
+ $(obj)/%:: $(top_srcdir)$(src)/%_shipped
+ @$(disp_gen)
+ $(Q)cat $< > $@
+-endif
++
+ CLEAN_extra/config menuconfig_clean:
+ $(do_rm) $(clean-files) $(lxdialog) conf $(wildcard *.o)
+-distclean: clean
+- $(do_rm) $(lxdialog) $(conf-objs) $(mconf-objs) \
++distclean: CLEAN_extra/config
++ $(Q)$(RM) -r $(lxdialog) $(conf-objs) $(mconf-objs) $(nconf-objs) \
+ $(kxgettext-objs) \
+ $(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \
+- .depend
+- $(do_rm) -r $(top_builddir)include/config
++ .depend \
++ $(top_builddir)include/config $(top_builddir)include/generated
+
+-FORCE:
+-.PHONY: FORCE clean distclean $(always)
++.PHONY: clean distclean $(PHONY)
+diff -Nur uClibc-0.9.33.2/extra/config/Makefile.kconfig uClibc-git/extra/config/Makefile.kconfig
+--- uClibc-0.9.33.2/extra/config/Makefile.kconfig 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/Makefile.kconfig 2014-02-03 12:32:56.000000000 +0100
+@@ -2,14 +2,18 @@
+ # Kernel configuration targets
+ # These targets are used from top-level makefile
+
+-PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
++PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
++ localmodconfig localyesconfig
+
+ ifdef KBUILD_KCONFIG
+ Kconfig := $(KBUILD_KCONFIG)
+ else
+-Kconfig := arch/$(SRCARCH)/Kconfig
++Kconfig := Kconfig
+ endif
+
++# We need this, in case the user has it in its environment
++unexport CONFIG_
++
+ xconfig: $(obj)/qconf
+ $< $(Kconfig)
+
+@@ -20,91 +24,121 @@
+ $< $(Kconfig)
+
+ config: $(obj)/conf
++ $< --oldaskconfig $(Kconfig)
++
++nconfig: $(obj)/nconf
+ $< $(Kconfig)
+
+ oldconfig: $(obj)/conf
+- $< -o $(Kconfig)
++ $< --$@ $(Kconfig)
+
+ silentoldconfig: $(obj)/conf
+- $< -s $(Kconfig)
++ $(Q)mkdir -p include/generated
++ $< --$@ $(Kconfig)
++
++localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
++ $(Q)mkdir -p include/generated
++ $(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
++ $(Q)if [ -f .config ]; then \
++ cmp -s .tmp.config .config || \
++ (mv -f .config .config.old.1; \
++ mv -f .tmp.config .config; \
++ $(obj)/conf --silentoldconfig $(Kconfig); \
++ mv -f .config.old.1 .config.old) \
++ else \
++ mv -f .tmp.config .config; \
++ $(obj)/conf --silentoldconfig $(Kconfig); \
++ fi
++ $(Q)rm -f .tmp.config
+
+ # Create new linux.pot file
+ # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
+-# The symlink is used to repair a deficiency in arch/um
+ update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
+- $(Q)echo " GEN config"
+- $(Q)xgettext --default-domain=linux \
+- --add-comments --keyword=_ --keyword=N_ \
+- --from-code=UTF-8 \
+- --files-from=scripts/kconfig/POTFILES.in \
++ $(Q)echo " GEN config.pot"
++ $(Q)xgettext --default-domain=linux \
++ --add-comments --keyword=_ --keyword=N_ \
++ --from-code=UTF-8 \
++ --files-from=$(srctree)/scripts/kconfig/POTFILES.in \
++ --directory=$(srctree) --directory=$(objtree) \
+ --output $(obj)/config.pot
+ $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
+- $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch
+- $(Q)(for i in `ls arch/*/Kconfig`; \
++ $(Q)(for i in `ls $(srctree)/arch/*/Kconfig \
++ $(srctree)/arch/*/um/Kconfig`; \
+ do \
+- echo " GEN $$i"; \
++ echo " GEN $$i"; \
+ $(obj)/kxgettext $$i \
+ >> $(obj)/config.pot; \
+ done )
++ $(Q)echo " GEN linux.pot"
+ $(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
+ --output $(obj)/linux.pot
+- $(Q)rm -f arch/um/Kconfig.arch
+ $(Q)rm -f $(obj)/config.pot
+
+-PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
++PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
+
+-randconfig: $(obj)/conf
+- $< -r $(Kconfig)
++allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
++ $< --$@ $(Kconfig)
+
+-allyesconfig: $(obj)/conf
+- $< -y $(Kconfig)
++PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
+
+-allnoconfig: $(obj)/conf
+- $< -n $(Kconfig)
++listnewconfig olddefconfig: $(obj)/conf
++ $< --$@ $(Kconfig)
+
+-allmodconfig: $(obj)/conf
+- $< -m $(Kconfig)
++# oldnoconfig is an alias of olddefconfig, because people already are dependent
++# on its behavior(sets new symbols to their default value but not 'n') with the
++# counter-intuitive name.
++oldnoconfig: $(obj)/conf
++ $< --olddefconfig $(Kconfig)
++
++savedefconfig: $(obj)/conf
++ $< --$@=defconfig $(Kconfig)
+
+ defconfig: $(obj)/conf
+ ifeq ($(KBUILD_DEFCONFIG),)
+- $< -d $(Kconfig)
++ $< --defconfig $(Kconfig)
+ else
+ @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
+- $(Q)$< -D arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
++ $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
+ endif
+
+ %_defconfig: $(obj)/conf
+- $(Q)$< -D arch/$(SRCARCH)/configs/$@ $(Kconfig)
++ $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+
+ # Help text used by make help
+ help:
+ @echo ' config - Update current config utilising a line-oriented program'
++ @echo ' nconfig - Update current config utilising a ncurses menu based program'
+ @echo ' menuconfig - Update current config utilising a menu based program'
+ @echo ' xconfig - Update current config utilising a QT based front-end'
+ @echo ' gconfig - Update current config utilising a GTK based front-end'
+ @echo ' oldconfig - Update current config utilising a provided .config as base'
+- @echo ' silentoldconfig - Same as oldconfig, but quietly'
+- @echo ' randconfig - New config with random answer to all options'
+- @echo ' defconfig - New config with default answer to all options'
+- @echo ' allmodconfig - New config selecting modules when possible'
+- @echo ' allyesconfig - New config where all options are accepted with yes'
++ @echo ' localmodconfig - Update current config disabling modules not loaded'
++ @echo ' localyesconfig - Update current config converting local mods to core'
++ @echo ' silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
++ @echo ' defconfig - New config with default from ARCH supplied defconfig'
++ @echo ' savedefconfig - Save current config as ./defconfig (minimal config)'
+ @echo ' allnoconfig - New config where all options are answered with no'
++ @echo ' allyesconfig - New config where all options are accepted with yes'
++ @echo ' allmodconfig - New config selecting modules when possible'
++ @echo ' alldefconfig - New config with all symbols set to default'
++ @echo ' randconfig - New config with random answer to all options'
++ @echo ' listnewconfig - List new options'
++ @echo ' olddefconfig - Same as silentoldconfig but sets new symbols to their default value'
+
+ # lxdialog stuff
+ check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
+
+ # Use recursively expanded variables so we do not call gcc unless
+ # we really need to do so. (Do not call gcc as part of make mrproper)
+-HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
+-HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
+-
+-HOST_EXTRACFLAGS += -DLOCALE
+-
++HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
++ -DLOCALE
+
+ # ===========================================================================
+ # Shared Makefile for the various kconfig executables:
+ # conf: Used for defconfig, oldconfig and related targets
+-# mconf: Used for the mconfig target.
++# nconf: Used for the nconfig target.
++# Utilizes ncurses
++# mconf: Used for the menuconfig target
+ # Utilizes the lxdialog package
+ # qconf: Used for the xconfig target
+ # Based on QT which needs to be installed to compile it
+@@ -116,15 +150,27 @@
+ lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
+
+ conf-objs := conf.o zconf.tab.o
+-mconf-objs := mconf.o zconf.tab.o $(lxdialog)
++mconf-objs := mconf.o zconf.tab.o $(lxdialog)
++nconf-objs := nconf.o zconf.tab.o nconf.gui.o
+ kxgettext-objs := kxgettext.o zconf.tab.o
++qconf-cxxobjs := qconf.o
++qconf-objs := zconf.tab.o
++gconf-objs := gconf.o zconf.tab.o
++
++hostprogs-y := conf
+
+-hostprogs-y := conf qconf gconf kxgettext
++ifeq ($(MAKECMDGOALS),nconfig)
++ hostprogs-y += nconf
++endif
+
+ ifeq ($(MAKECMDGOALS),menuconfig)
+ hostprogs-y += mconf
+ endif
+
++ifeq ($(MAKECMDGOALS),update-po-config)
++ hostprogs-y += kxgettext
++endif
++
+ ifeq ($(MAKECMDGOALS),xconfig)
+ qconf-target := 1
+ endif
+@@ -134,24 +180,23 @@
+
+
+ ifeq ($(qconf-target),1)
+-qconf-cxxobjs := qconf.o
+-qconf-objs := kconfig_load.o zconf.tab.o
++ hostprogs-y += qconf
+ endif
+
+ ifeq ($(gconf-target),1)
+-gconf-objs := gconf.o kconfig_load.o zconf.tab.o
++ hostprogs-y += gconf
+ endif
+
+-clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
+- .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
+-clean-files += mconf qconf gconf
++clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
++clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
++clean-files += mconf qconf gconf nconf
+ clean-files += config.pot linux.pot
+
+ # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
+ PHONY += $(obj)/dochecklxdialog
+ $(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
+-#$(obj)/dochecklxdialog:
+-# $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES)
++$(obj)/dochecklxdialog:
++ $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
+
+ always := dochecklxdialog
+
+@@ -159,16 +204,24 @@
+ HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
+
+ # generated files seem to need this to find local include files
+-HOSTCFLAGS_lex.zconf.o := -I$(src)
++HOSTCFLAGS_zconf.lex.o := -I$(src)
+ HOSTCFLAGS_zconf.tab.o := -I$(src)
+
+-HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
+-HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
++LEX_PREFIX_zconf := zconf
++YACC_PREFIX_zconf := zconf
++
++HOSTLOADLIBES_qconf = $(KC_QT_LIBS)
++HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS)
+
+ HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
+ HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
+- -D LKC_DIRECT_LINK
++ -Wno-missing-prototypes
+
++HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
++
++HOSTLOADLIBES_nconf = $(shell \
++ pkg-config --libs menu panel ncurses 2>/dev/null \
++ || echo "-lmenu -lpanel -lncurses" )
+ $(obj)/qconf.o: $(obj)/.tmp_qtcheck
+
+ ifeq ($(qconf-target),1)
+@@ -178,40 +231,48 @@
+ # QT needs some extra effort...
+ $(obj)/.tmp_qtcheck:
+ @set -e; echo " CHECK qt"; dir=""; pkg=""; \
+- pkg-config --exists qt 2> /dev/null && pkg=qt; \
+- pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
+- if [ -n "$$pkg" ]; then \
+- cflags="\$$(shell pkg-config $$pkg --cflags)"; \
+- libs="\$$(shell pkg-config $$pkg --libs)"; \
+- moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
+- dir="$$(pkg-config $$pkg --variable=prefix)"; \
++ if ! pkg-config --exists QtCore 2> /dev/null; then \
++ echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
++ pkg-config --exists qt 2> /dev/null && pkg=qt; \
++ pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
++ if [ -n "$$pkg" ]; then \
++ cflags="\$$(shell pkg-config $$pkg --cflags)"; \
++ libs="\$$(shell pkg-config $$pkg --libs)"; \
++ moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
++ dir="$$(pkg-config $$pkg --variable=prefix)"; \
++ else \
++ for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
++ if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
++ done; \
++ if [ -z "$$dir" ]; then \
++ echo >&2 "*"; \
++ echo >&2 "* Unable to find any QT installation. Please make sure that"; \
++ echo >&2 "* the QT4 or QT3 development package is correctly installed and"; \
++ echo >&2 "* either qmake can be found or install pkg-config or set"; \
++ echo >&2 "* the QTDIR environment variable to the correct location."; \
++ echo >&2 "*"; \
++ false; \
++ fi; \
++ libpath=$$dir/lib; lib=qt; osdir=""; \
++ $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
++ osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
++ test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
++ test -f $$libpath/libqt-mt.so && lib=qt-mt; \
++ cflags="-I$$dir/include"; \
++ libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
++ moc="$$dir/bin/moc"; \
++ fi; \
++ if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
++ echo "*"; \
++ echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
++ echo "*"; \
++ moc="/usr/bin/moc"; \
++ fi; \
+ else \
+- for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
+- if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
+- done; \
+- if [ -z "$$dir" ]; then \
+- echo "*"; \
+- echo "* Unable to find the QT3 installation. Please make sure that"; \
+- echo "* the QT3 development package is correctly installed and"; \
+- echo "* either install pkg-config or set the QTDIR environment"; \
+- echo "* variable to the correct location."; \
+- echo "*"; \
+- false; \
+- fi; \
+- libpath=$$dir/lib; lib=qt; osdir=""; \
+- $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
+- osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
+- test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
+- test -f $$libpath/libqt-mt.so && lib=qt-mt; \
+- cflags="-I$$dir/include"; \
+- libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
+- moc="$$dir/bin/moc"; \
+- fi; \
+- if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
+- echo "*"; \
+- echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
+- echo "*"; \
+- moc="/usr/bin/moc"; \
++ cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
++ libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
++ moc="\$$(shell pkg-config QtCore --variable=moc_location)"; \
++ [ -n "$$moc" ] || moc="\$$(shell pkg-config QtCore --variable=prefix)/bin/moc"; \
+ fi; \
+ echo "KC_QT_CFLAGS=$$cflags" > $@; \
+ echo "KC_QT_LIBS=$$libs" >> $@; \
+@@ -229,61 +290,33 @@
+ if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \
+ touch $@; \
+ else \
+- echo "*"; \
+- echo "* GTK+ is present but version >= 2.0.0 is required."; \
+- echo "*"; \
++ echo >&2 "*"; \
++ echo >&2 "* GTK+ is present but version >= 2.0.0 is required."; \
++ echo >&2 "*"; \
+ false; \
+ fi \
+ else \
+- echo "*"; \
+- echo "* Unable to find the GTK+ installation. Please make sure that"; \
+- echo "* the GTK+ 2.0 development package is correctly installed..."; \
+- echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
+- echo "*"; \
++ echo >&2 "*"; \
++ echo >&2 "* Unable to find the GTK+ installation. Please make sure that"; \
++ echo >&2 "* the GTK+ 2.0 development package is correctly installed..."; \
++ echo >&2 "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
++ echo >&2 "*"; \
+ false; \
+ fi
+ endif
+
+-$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
+-
+-$(obj)/kconfig_load.o: $(obj)/lkc_defs.h
++$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
+
+-$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
++$(obj)/qconf.o: $(obj)/qconf.moc
+
+-$(obj)/gconf.o: $(obj)/lkc_defs.h
++quiet_cmd_moc = MOC $@
++ cmd_moc = $(KC_QT_MOC) -i $< -o $@
+
+-$(obj)/%.moc: $(src)/%.h
+- $(KC_QT_MOC) -i $< -o $@
+-
+-$(obj)/lkc_defs.h: $(src)/lkc_proto.h
+- sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
++$(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
++ $(call cmd,moc)
+
+ # Extract gconf menu items for I18N support
+ $(obj)/gconf.glade.h: $(obj)/gconf.glade
+- intltool-extract --type=gettext/glade $(obj)/gconf.glade
+-
+-###
+-# The following requires flex/bison/gperf
+-# By default we use the _shipped versions, uncomment the following line if
+-# you are modifying the flex/bison src.
+-# LKC_GENPARSER := 1
+-
+-ifdef LKC_GENPARSER
+-
+-$(obj)/zconf.tab.c: $(src)/zconf.y
+-$(obj)/lex.zconf.c: $(src)/zconf.l
+-$(obj)/zconf.hash.c: $(src)/zconf.gperf
+-
+-%.tab.c: %.y
+- bison -l -b $* -p $(notdir $*) $<
+- cp $@ $@_shipped
+-
+-lex.%.c: %.l
+- flex -L -P$(notdir $*) -o$@ $<
+- cp $@ $@_shipped
+-
+-%.hash.c: %.gperf
+- gperf < $< > $@
+- cp $@ $@_shipped
++ $(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
++ $(obj)/gconf.glade
+
+-endif
+diff -Nur uClibc-0.9.33.2/extra/config/mconf.c uClibc-git/extra/config/mconf.c
+--- uClibc-0.9.33.2/extra/config/mconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/mconf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,20 +15,19 @@
+ #include <stdarg.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <signal.h>
+ #include <unistd.h>
+ #include <locale.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+ #include "lxdialog/dialog.h"
+
+ static const char mconf_readme[] = N_(
+ "Overview\n"
+ "--------\n"
+-"Some features may be built directly into uClibc. Some features\n"
+-"may be completely removed altogether. There are also certain\n"
+-"parameters which are not really features, but must be\n"
+-"entered in as decimal or hexadecimal numbers or possibly text.\n"
++"This interface let you select features and parameters for the build.\n"
++"Features can either be built-in, modularized, or ignored. Parameters\n"
++"must be entered in as decimal or hexadecimal numbers or text.\n"
+ "\n"
+ "Menu items beginning with following braces represent features that\n"
+ " [ ] can be built in or removed\n"
+@@ -49,7 +48,7 @@
+ "----------\n"
+ "o Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
+ " you wish to change or submenu wish to select and press <Enter>.\n"
+-" Submenus are designated by \"--->\".\n"
++" Submenus are designated by \"--->\", empty ones by \"----\".\n"
+ "\n"
+ " Shortcut: Press the option's highlighted letter (hotkey).\n"
+ " Pressing a hotkey more than once will sequence\n"
+@@ -66,13 +65,15 @@
+ " there is a delayed response which you may find annoying.\n"
+ "\n"
+ " Also, the <TAB> and cursor keys will cycle between <Select>,\n"
+-" <Exit> and <Help>\n"
++" <Exit> and <Help>.\n"
+ "\n"
+ "o To get help with an item, use the cursor keys to highlight <Help>\n"
+-" and Press <ENTER>.\n"
++" and press <ENTER>.\n"
+ "\n"
+ " Shortcut: Press <H> or <?>.\n"
+ "\n"
++"o To toggle the display of hidden options, press <Z>.\n"
++"\n"
+ "\n"
+ "Radiolists (Choice lists)\n"
+ "-----------\n"
+@@ -104,10 +105,10 @@
+ "Text Box (Help Window)\n"
+ "--------\n"
+ "o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
+-" keys h,j,k,l function here as do <SPACE BAR> and <B> for those\n"
+-" who are familiar with less and lynx.\n"
++" keys h,j,k,l function here as do <u>, <d>, <SPACE BAR> and <B> for \n"
++" those who are familiar with less and lynx.\n"
+ "\n"
+-"o Press <E>, <X>, <Enter> or <Esc><Esc> to exit.\n"
++"o Press <E>, <X>, <q>, <Enter> or <Esc><Esc> to exit.\n"
+ "\n"
+ "\n"
+ "Alternate Configuration Files\n"
+@@ -147,9 +148,9 @@
+ "\n"
+ "Optional personality available\n"
+ "------------------------------\n"
+-"If you prefer to have all of the options listed in a single\n"
+-"menu, rather than the default multimenu hierarchy, run the menuconfig\n"
+-"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
++"If you prefer to have all of the options listed in a single menu, rather\n"
++"than the default multimenu hierarchy, run the menuconfig with\n"
++"MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
+ "\n"
+ "make MENUCONFIG_MODE=single_menu menuconfig\n"
+ "\n"
+@@ -175,11 +176,11 @@
+ "\n"),
+ menu_instructions[] = N_(
+ "Arrow keys navigate the menu. "
+- "<Enter> selects submenus --->. "
++ "<Enter> selects submenus ---> (or empty submenus ----). "
+ "Highlighted letters are hotkeys. "
+- "Pressing <Y> selectes a feature, while <N> will exclude a feature. "
++ "Pressing <Y> includes, <N> excludes, <M> modularizes features. "
+ "Press <Esc><Esc> to exit, <?> for Help, </> for Search. "
+- "Legend: [*] feature is selected [ ] feature is excluded"),
++ "Legend: [*] built-in [ ] excluded <M> module < > module capable"),
+ radiolist_instructions[] = N_(
+ "Use the arrow keys to navigate this window or "
+ "press the hotkey of the item you wish to select "
+@@ -198,8 +199,6 @@
+ setmod_text[] = N_(
+ "This feature depends on another which has been configured as a module.\n"
+ "As a result, this feature will be built as a module."),
+-nohelp_text[] = N_(
+- "There is no help available for this option.\n"),
+ load_config_text[] = N_(
+ "Enter the name of the configuration file you wish to load. "
+ "Accept the name shown to restore the configuration you "
+@@ -210,18 +209,18 @@
+ "configurations available on a single machine.\n"
+ "\n"
+ "If you have saved a previous configuration in a file other than the\n"
+- "default, entering the name of the file here will allow you\n"
+- "to modify that configuration.\n"
++ "default one, entering its name here will allow you to modify that\n"
++ "configuration.\n"
+ "\n"
+ "If you are uncertain, then you have probably never used alternate\n"
+- "configuration files. You should therefor leave this blank to abort.\n"),
++ "configuration files. You should therefore leave this blank to abort.\n"),
+ save_config_text[] = N_(
+ "Enter a filename to which this configuration should be saved "
+ "as an alternate. Leave blank to abort."),
+ save_config_help[] = N_(
+ "\n"
+- "For various reasons, one may wish to keep different\n"
+- "configurations available on a single machine.\n"
++ "For various reasons, one may wish to keep different configurations\n"
++ "available on a single machine.\n"
+ "\n"
+ "Entering a file name here will allow you to later retrieve, modify\n"
+ "and use the current configuration as an alternate to whatever\n"
+@@ -231,32 +230,39 @@
+ "leave this blank.\n"),
+ search_help[] = N_(
+ "\n"
+- "Search for CONFIG_ symbols and display their relations.\n"
++ "Search for symbols and display their relations.\n"
+ "Regular expressions are allowed.\n"
+ "Example: search for \"^FOO\"\n"
+ "Result:\n"
+ "-----------------------------------------------------------------\n"
+ "Symbol: FOO [=m]\n"
++ "Type : tristate\n"
+ "Prompt: Foo bus is used to drive the bar HW\n"
+- "Defined at drivers/pci/Kconfig:47\n"
+- "Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
+- "Location:\n"
+- " -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n"
+- " -> PCI support (PCI [=y])\n"
+- " -> PCI access mode (<choice> [=y])\n"
+- "Selects: LIBCRC32\n"
+- "Selected by: BAR\n"
++ " Defined at drivers/pci/Kconfig:47\n"
++ " Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
++ " Location:\n"
++ " -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
++ " -> PCI support (PCI [=y])\n"
++ "(1) -> PCI access mode (<choice> [=y])\n"
++ " Selects: LIBCRC32\n"
++ " Selected by: BAR\n"
+ "-----------------------------------------------------------------\n"
++ "o The line 'Type:' shows the type of the configuration option for\n"
++ " this symbol (boolean, tristate, string, ...)\n"
+ "o The line 'Prompt:' shows the text used in the menu structure for\n"
+- " this CONFIG_ symbol\n"
++ " this symbol\n"
+ "o The 'Defined at' line tell at what file / line number the symbol\n"
+ " is defined\n"
+ "o The 'Depends on:' line tell what symbols needs to be defined for\n"
+ " this symbol to be visible in the menu (selectable)\n"
+ "o The 'Location:' lines tell where in the menu structure this symbol\n"
+ " is located\n"
+- " A location followed by a [=y] indicate that this is a selectable\n"
+- " menu item - and current value is displayed inside brackets.\n"
++ " A location followed by a [=y] indicates that this is a\n"
++ " selectable menu item - and the current value is displayed inside\n"
++ " brackets.\n"
++ " Press the key in the (#) prefix to jump directly to that\n"
++ " location. You will be returned to the current search results\n"
++ " after exiting this new menu.\n"
+ "o The 'Selects:' line tell what symbol will be automatically\n"
+ " selected if this symbol is selected (y or m)\n"
+ "o The 'Selected by' line tell what symbol has selected this symbol\n"
+@@ -264,131 +270,144 @@
+ "Only relevant lines are shown.\n"
+ "\n\n"
+ "Search examples:\n"
+- "Examples: USB => find all CONFIG_ symbols containing USB\n"
+- " ^USB => find all CONFIG_ symbols starting with USB\n"
+- " USB$ => find all CONFIG_ symbols ending with USB\n"
++ "Examples: USB => find all symbols containing USB\n"
++ " ^USB => find all symbols starting with USB\n"
++ " USB$ => find all symbols ending with USB\n"
+ "\n");
+
+ static int indent;
+ static struct menu *current_menu;
+ static int child_count;
+ static int single_menu_mode;
++static int show_all_options;
++static int save_and_exit;
+
+-static void conf(struct menu *menu);
++static void conf(struct menu *menu, struct menu *active_menu);
+ static void conf_choice(struct menu *menu);
+ static void conf_string(struct menu *menu);
+ static void conf_load(void);
+ static void conf_save(void);
++static int show_textbox_ext(const char *title, char *text, int r, int c,
++ int *keys, int *vscroll, int *hscroll,
++ update_text_fn update_text, void *data);
+ static void show_textbox(const char *title, const char *text, int r, int c);
+ static void show_helptext(const char *title, const char *text);
+ static void show_help(struct menu *menu);
+
+-static void get_prompt_str(struct gstr *r, struct property *prop)
++static char filename[PATH_MAX+1];
++static void set_config_filename(const char *config_filename)
+ {
+- int i, j;
+- struct menu *submenu[8], *menu;
++ static char menu_backtitle[PATH_MAX+128];
++ int size;
+
+- str_printf(r, _("Prompt: %s\n"), _(prop->text));
+- str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
+- prop->menu->lineno);
+- if (!expr_is_yes(prop->visible.expr)) {
+- str_append(r, _(" Depends on: "));
+- expr_gstr_print(prop->visible.expr, r);
+- str_append(r, "\n");
+- }
+- menu = prop->menu->parent;
+- for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent)
+- submenu[i++] = menu;
+- if (i > 0) {
+- str_printf(r, _(" Location:\n"));
+- for (j = 4; --i >= 0; j += 2) {
+- menu = submenu[i];
+- str_printf(r, "%*c-> %s", j, ' ', _(menu_get_prompt(menu)));
+- if (menu->sym) {
+- str_printf(r, " (%s [=%s])", menu->sym->name ?
+- menu->sym->name : _("<choice>"),
+- sym_get_string_value(menu->sym));
+- }
+- str_append(r, "\n");
+- }
+- }
++ size = snprintf(menu_backtitle, sizeof(menu_backtitle),
++ "%s - %s", config_filename, rootmenu.prompt->text);
++ if (size >= sizeof(menu_backtitle))
++ menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
++ set_dialog_backtitle(menu_backtitle);
++
++ size = snprintf(filename, sizeof(filename), "%s", config_filename);
++ if (size >= sizeof(filename))
++ filename[sizeof(filename)-1] = '\0';
+ }
+
+-static void get_symbol_str(struct gstr *r, struct symbol *sym)
++struct subtitle_part {
++ struct list_head entries;
++ const char *text;
++};
++static LIST_HEAD(trail);
++
++static struct subtitle_list *subtitles;
++static void set_subtitle(void)
+ {
+- bool hit;
+- struct property *prop;
++ struct subtitle_part *sp;
++ struct subtitle_list *pos, *tmp;
+
+- if (sym && sym->name)
+- str_printf(r, "Symbol: %s [=%s]\n", sym->name,
+- sym_get_string_value(sym));
+- for_all_prompts(sym, prop)
+- get_prompt_str(r, prop);
+- hit = false;
+- for_all_properties(sym, prop, P_SELECT) {
+- if (!hit) {
+- str_append(r, " Selects: ");
+- hit = true;
+- } else
+- str_printf(r, " && ");
+- expr_gstr_print(prop->expr, r);
++ for (pos = subtitles; pos != NULL; pos = tmp) {
++ tmp = pos->next;
++ free(pos);
+ }
+- if (hit)
+- str_append(r, "\n");
+- if (sym->rev_dep.expr) {
+- str_append(r, _(" Selected by: "));
+- expr_gstr_print(sym->rev_dep.expr, r);
+- str_append(r, "\n");
++
++ subtitles = NULL;
++ list_for_each_entry(sp, &trail, entries) {
++ if (sp->text) {
++ if (pos) {
++ pos->next = xcalloc(sizeof(*pos), 1);
++ pos = pos->next;
++ } else {
++ subtitles = pos = xcalloc(sizeof(*pos), 1);
++ }
++ pos->text = sp->text;
++ }
+ }
+- str_append(r, "\n\n");
++
++ set_dialog_subtitles(subtitles);
+ }
+
+-static struct gstr get_relations_str(struct symbol **sym_arr)
++static void reset_subtitle(void)
+ {
+- struct symbol *sym;
+- struct gstr res = str_new();
+- int i;
++ struct subtitle_list *pos, *tmp;
+
+- for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
+- get_symbol_str(&res, sym);
+- if (!i)
+- str_append(&res, _("No matches found.\n"));
+- return res;
++ for (pos = subtitles; pos != NULL; pos = tmp) {
++ tmp = pos->next;
++ free(pos);
++ }
++ subtitles = NULL;
++ set_dialog_subtitles(subtitles);
+ }
+
+-static char filename[PATH_MAX+1];
+-static void set_config_filename(const char *config_filename)
+-{
+- static char menu_backtitle[PATH_MAX+128];
+- int size;
+- struct symbol *sym;
++struct search_data {
++ struct list_head *head;
++ struct menu **targets;
++ int *keys;
++};
+
+- sym = sym_lookup("VERSION", 0);
+- sym_calc_value(sym);
+- size = snprintf(menu_backtitle, sizeof(menu_backtitle),
+- _("%s - uClibc v%s Configuration"),
+- config_filename, sym_get_string_value(sym));
+- if (size >= sizeof(menu_backtitle))
+- menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
+- set_dialog_backtitle(menu_backtitle);
++static void update_text(char *buf, size_t start, size_t end, void *_data)
++{
++ struct search_data *data = _data;
++ struct jump_key *pos;
++ int k = 0;
++
++ list_for_each_entry(pos, data->head, entries) {
++ if (pos->offset >= start && pos->offset < end) {
++ char header[4];
++
++ if (k < JUMP_NB) {
++ int key = '0' + (pos->index % JUMP_NB) + 1;
++
++ sprintf(header, "(%c)", key);
++ data->keys[k] = key;
++ data->targets[k] = pos->target;
++ k++;
++ } else {
++ sprintf(header, " ");
++ }
+
+- size = snprintf(filename, sizeof(filename), "%s", config_filename);
+- if (size >= sizeof(filename))
+- filename[sizeof(filename)-1] = '\0';
++ memcpy(buf + pos->offset, header, sizeof(header) - 1);
++ }
++ }
++ data->keys[k] = 0;
+ }
+
+-
+ static void search_conf(void)
+ {
+ struct symbol **sym_arr;
+ struct gstr res;
++ struct gstr title;
+ char *dialog_input;
+- int dres;
++ int dres, vscroll = 0, hscroll = 0;
++ bool again;
++ struct gstr sttext;
++ struct subtitle_part stpart;
++
++ title = str_new();
++ str_printf( &title, _("Enter %s (sub)string or regexp to search for "
++ "(with or without \"%s\")"), CONFIG_, CONFIG_);
++
+ again:
+ dialog_clear();
+ dres = dialog_inputbox(_("Search Configuration Parameter"),
+- _("Enter CONFIG_ (sub)string to search for "
+- "(with or without \"CONFIG\")"),
++ str_get(&title),
+ 10, 75, "");
+ switch (dres) {
+ case 0:
+@@ -397,19 +416,52 @@
+ show_helptext(_("Search Configuration"), search_help);
+ goto again;
+ default:
++ str_free(&title);
+ return;
+ }
+
+- /* strip CONFIG_ if necessary */
++ /* strip the prefix if necessary */
+ dialog_input = dialog_input_result;
+- if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
+- dialog_input += 7;
++ if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
++ dialog_input += strlen(CONFIG_);
++
++ sttext = str_new();
++ str_printf(&sttext, "Search (%s)", dialog_input_result);
++ stpart.text = str_get(&sttext);
++ list_add_tail(&stpart.entries, &trail);
+
+ sym_arr = sym_re_search(dialog_input);
+- res = get_relations_str(sym_arr);
++ do {
++ LIST_HEAD(head);
++ struct menu *targets[JUMP_NB];
++ int keys[JUMP_NB + 1], i;
++ struct search_data data = {
++ .head = &head,
++ .targets = targets,
++ .keys = keys,
++ };
++ struct jump_key *pos, *tmp;
++
++ res = get_relations_str(sym_arr, &head);
++ set_subtitle();
++ dres = show_textbox_ext(_("Search Results"), (char *)
++ str_get(&res), 0, 0, keys, &vscroll,
++ &hscroll, &update_text, (void *)
++ &data);
++ again = false;
++ for (i = 0; i < JUMP_NB && keys[i]; i++)
++ if (dres == keys[i]) {
++ conf(targets[i]->parent, targets[i]);
++ again = true;
++ }
++ str_free(&res);
++ list_for_each_entry_safe(pos, tmp, &head, entries)
++ free(pos);
++ } while (again);
+ free(sym_arr);
+- show_textbox(_("Search Results"), str_get(&res), 0, 0);
+- str_free(&res);
++ str_free(&title);
++ list_del(trail.prev);
++ str_free(&sttext);
+ }
+
+ static void build_conf(struct menu *menu)
+@@ -420,8 +472,16 @@
+ int type, tmp, doint = 2;
+ tristate val;
+ char ch;
++ bool visible;
+
+- if (!menu_is_visible(menu))
++ /*
++ * note: menu_is_visible() has side effect that it will
++ * recalc the value of the symbol.
++ */
++ visible = menu_is_visible(menu);
++ if (show_all_options && !menu_has_prompt(menu))
++ return;
++ else if (!show_all_options && !visible)
+ return;
+
+ sym = menu->sym;
+@@ -438,8 +498,9 @@
+ menu->data ? "-->" : "++>",
+ indent + 1, ' ', prompt);
+ } else
+- item_make(" %*c%s --->", indent + 1, ' ', prompt);
+-
++ item_make(" %*c%s %s",
++ indent + 1, ' ', prompt,
++ menu_is_empty(menu) ? "----" : "--->");
+ item_set_tag('m');
+ item_set_data(menu);
+ if (single_menu_mode && menu->data)
+@@ -570,7 +631,7 @@
+ (sym_has_value(sym) || !sym_is_changable(sym)) ?
+ "" : _(" (NEW)"));
+ if (menu->prompt->type == P_MENU) {
+- item_add_str(" --->");
++ item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->");
+ return;
+ }
+ }
+@@ -582,40 +643,40 @@
+ indent -= doint;
+ }
+
+-static void conf(struct menu *menu)
++static void conf(struct menu *menu, struct menu *active_menu)
+ {
+ struct menu *submenu;
+ const char *prompt = menu_get_prompt(menu);
++ struct subtitle_part stpart;
+ struct symbol *sym;
+- struct menu *active_menu = NULL;
+ int res;
+ int s_scroll = 0;
+
++ if (menu != &rootmenu)
++ stpart.text = menu_get_prompt(menu);
++ else
++ stpart.text = NULL;
++ list_add_tail(&stpart.entries, &trail);
++
+ while (1) {
+ item_reset();
+ current_menu = menu;
+ build_conf(menu);
+ if (!child_count)
+ break;
+- if (menu == &rootmenu) {
+- item_make("--- ");
+- item_set_tag(':');
+- item_make(_(" Load an Alternate Configuration File"));
+- item_set_tag('L');
+- item_make(_(" Save an Alternate Configuration File"));
+- item_set_tag('S');
+- }
++ set_subtitle();
+ dialog_clear();
+ res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
+ _(menu_instructions),
+ active_menu, &s_scroll);
+ if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)
+ break;
+- if (!item_activate_selected())
+- continue;
+- if (!item_tag())
+- continue;
+-
++ if (item_count() != 0) {
++ if (!item_activate_selected())
++ continue;
++ if (!item_tag())
++ continue;
++ }
+ submenu = item_data();
+ active_menu = item_data();
+ if (submenu)
+@@ -630,32 +691,36 @@
+ if (single_menu_mode)
+ submenu->data = (void *) (long) !submenu->data;
+ else
+- conf(submenu);
++ conf(submenu, NULL);
+ break;
+ case 't':
+ if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
+ conf_choice(submenu);
+ else if (submenu->prompt->type == P_MENU)
+- conf(submenu);
++ conf(submenu, NULL);
+ break;
+ case 's':
+ conf_string(submenu);
+ break;
+- case 'L':
+- conf_load();
+- break;
+- case 'S':
+- conf_save();
+- break;
+ }
+ break;
+ case 2:
+ if (sym)
+ show_help(submenu);
+- else
++ else {
++ reset_subtitle();
+ show_helptext(_("README"), _(mconf_readme));
++ }
+ break;
+ case 3:
++ reset_subtitle();
++ conf_save();
++ break;
++ case 4:
++ reset_subtitle();
++ conf_load();
++ break;
++ case 5:
+ if (item_is_tag('t')) {
+ if (sym_set_tristate_value(sym, yes))
+ break;
+@@ -663,31 +728,45 @@
+ show_textbox(NULL, setmod_text, 6, 74);
+ }
+ break;
+- case 4:
++ case 6:
+ if (item_is_tag('t'))
+ sym_set_tristate_value(sym, no);
+ break;
+- case 5:
++ case 7:
+ if (item_is_tag('t'))
+ sym_set_tristate_value(sym, mod);
+ break;
+- case 6:
++ case 8:
+ if (item_is_tag('t'))
+ sym_toggle_tristate_value(sym);
+ else if (item_is_tag('m'))
+- conf(submenu);
++ conf(submenu, NULL);
+ break;
+- case 7:
++ case 9:
+ search_conf();
+ break;
++ case 10:
++ show_all_options = !show_all_options;
++ break;
+ }
+ }
++
++ list_del(trail.prev);
+ }
+
+-static void show_textbox(const char *title, const char *text, int r, int c)
++static int show_textbox_ext(const char *title, char *text, int r, int c, int
++ *keys, int *vscroll, int *hscroll, update_text_fn
++ update_text, void *data)
+ {
+ dialog_clear();
+- dialog_textbox(title, text, r, c);
++ return dialog_textbox(title, text, r, c, keys, vscroll, hscroll,
++ update_text, data);
++}
++
++static void show_textbox(const char *title, const char *text, int r, int c)
++{
++ show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL,
++ NULL, NULL);
+ }
+
+ static void show_helptext(const char *title, const char *text)
+@@ -695,25 +774,24 @@
+ show_textbox(title, text, 0, 0);
+ }
+
++static void conf_message_callback(const char *fmt, va_list ap)
++{
++ char buf[PATH_MAX+1];
++
++ vsnprintf(buf, sizeof(buf), fmt, ap);
++ if (save_and_exit)
++ printf("%s", buf);
++ else
++ show_textbox(NULL, buf, 6, 60);
++}
++
+ static void show_help(struct menu *menu)
+ {
+ struct gstr help = str_new();
+- struct symbol *sym = menu->sym;
+
+- if (menu_has_help(menu))
+- {
+- if (sym->name) {
+- str_printf(&help, "%s:\n\n", sym->name);
+- }
+- str_append(&help, _(menu_get_help(menu)));
+- str_append(&help, "\n");
+- } else if (menu_has_help(sym->prop->menu->parent)) {
+- str_append(&help, _(menu_get_help(sym->prop->menu->parent)));
+- str_append(&help, "\n");
+- } else {
+- str_append(&help, nohelp_text);
+- }
+- get_symbol_str(&help, sym);
++ help.max_width = getmaxx(stdscr) - 10;
++ menu_get_ext_help(menu, &help);
++
+ show_helptext(_(menu_get_prompt(menu)), str_get(&help));
+ str_free(&help);
+ }
+@@ -734,7 +812,12 @@
+ for (child = menu->list; child; child = child->next) {
+ if (!menu_is_visible(child))
+ continue;
+- item_make("%s", _(menu_get_prompt(child)));
++ if (child->sym)
++ item_make("%s", _(menu_get_prompt(child)));
++ else {
++ item_make("*** %s ***", _(menu_get_prompt(child)));
++ item_set_tag(':');
++ }
+ item_set_data(child);
+ if (child->sym == active)
+ item_set_selected(1);
+@@ -744,12 +827,17 @@
+ dialog_clear();
+ res = dialog_checklist(prompt ? _(prompt) : _("Main Menu"),
+ _(radiolist_instructions),
+- 15, 70, 6);
++ MENUBOX_HEIGTH_MIN,
++ MENUBOX_WIDTH_MIN,
++ CHECKLIST_HEIGTH_MIN);
+ selected = item_activate_selected();
+ switch (res) {
+ case 0:
+ if (selected) {
+ child = item_data();
++ if (!child->sym)
++ break;
++
+ sym_set_tristate_value(child->sym, yes);
+ }
+ return;
+@@ -863,9 +951,58 @@
+ }
+ }
+
++static int handle_exit(void)
++{
++ int res;
++
++ save_and_exit = 1;
++ reset_subtitle();
++ dialog_clear();
++ if (conf_get_changed())
++ res = dialog_yesno(NULL,
++ _("Do you wish to save your new configuration?\n"
++ "(Press <ESC><ESC> to continue configuration.)"),
++ 6, 60);
++ else
++ res = -1;
++
++ end_dialog(saved_x, saved_y);
++
++ switch (res) {
++ case 0:
++ if (conf_write(filename)) {
++ fprintf(stderr, _("\n\n"
++ "Error while writing of the configuration.\n"
++ "Your configuration changes were NOT saved."
++ "\n\n"));
++ return 1;
++ }
++ /* fall through */
++ case -1:
++ printf(_("\n\n"
++ "*** End of the configuration.\n"
++ "*** Execute 'make' to start the build or try 'make help'."
++ "\n\n"));
++ res = 0;
++ break;
++ default:
++ fprintf(stderr, _("\n\n"
++ "Your configuration changes were NOT saved."
++ "\n\n"));
++ if (res != KEY_ESC)
++ res = 0;
++ }
++
++ return res;
++}
++
++static void sig_handler(int signo)
++{
++ exit(handle_exit());
++}
++
+ int main(int ac, char **av)
+ {
+- int saved_x, saved_y;
+ char *mode;
+ int res;
+
+@@ -873,6 +1010,8 @@
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
++ signal(SIGINT, sig_handler);
++
+ conf_parse(av[1]);
+ conf_read(NULL);
+
+@@ -882,7 +1021,6 @@
+ single_menu_mode = 1;
+ }
+
+- getyx(stdscr, saved_y, saved_x);
+ if (init_dialog(NULL)) {
+ fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
+ fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
+@@ -890,41 +1028,12 @@
+ }
+
+ set_config_filename(conf_get_configname());
++ conf_set_message_callback(conf_message_callback);
+ do {
+- conf(&rootmenu);
+- dialog_clear();
+- if (conf_get_changed())
+- res = dialog_yesno(NULL,
+- _("Do you wish to save your "
+- "new configuration?\n"
+- "<ESC><ESC> to continue."),
+- 6, 60);
+- else
+- res = -1;
++ conf(&rootmenu, NULL);
++ res = handle_exit();
+ } while (res == KEY_ESC);
+- end_dialog(saved_x, saved_y);
+-
+- switch (res) {
+- case 0:
+- if (conf_write(filename)) {
+- fprintf(stderr, _("\n\n"
+- "Error during writing of the configuration.\n"
+- "Your configuration changes were NOT saved."
+- "\n\n"));
+- return 1;
+- }
+- case -1:
+- printf(_("\n\n"
+- "*** End of configuration.\n"
+- "*** Execute 'make' to build or try 'make help'."
+- "\n\n"));
+- break;
+- default:
+- fprintf(stderr, _("\n\n"
+- "Your configuration changes were NOT saved."
+- "\n\n"));
+- }
+
+- return conf_write_autoconf();
++ return res;
+ }
+
+diff -Nur uClibc-0.9.33.2/extra/config/menu.c uClibc-git/extra/config/menu.c
+--- uClibc-0.9.33.2/extra/config/menu.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/menu.c 2014-02-03 12:32:56.000000000 +0100
+@@ -3,12 +3,15 @@
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
++#include <ctype.h>
++#include <stdarg.h>
+ #include <stdlib.h>
+ #include <string.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
++static const char nohelp_text[] = "There is no help available for this option.";
++
+ struct menu rootmenu;
+ static struct menu **last_entry_ptr;
+
+@@ -35,7 +38,7 @@
+ va_end(ap);
+ }
+
+-void menu_init(void)
++void _menu_init(void)
+ {
+ current_entry = current_menu = &rootmenu;
+ last_entry_ptr = &rootmenu.list;
+@@ -45,7 +48,7 @@
+ {
+ struct menu *menu;
+
+- menu = malloc(sizeof(*menu));
++ menu = xmalloc(sizeof(*menu));
+ memset(menu, 0, sizeof(*menu));
+ menu->sym = sym;
+ menu->parent = current_menu;
+@@ -55,6 +58,8 @@
+ *last_entry_ptr = menu;
+ last_entry_ptr = &menu->next;
+ current_entry = menu;
++ if (sym)
++ menu_add_symbol(P_SYMBOL, sym, NULL);
+ }
+
+ void menu_end_entry(void)
+@@ -74,7 +79,7 @@
+ current_menu = current_menu->parent;
+ }
+
+-struct expr *menu_check_dep(struct expr *e)
++static struct expr *menu_check_dep(struct expr *e)
+ {
+ if (!e)
+ return e;
+@@ -133,8 +138,35 @@
+ while (isspace(*prompt))
+ prompt++;
+ }
+- if (current_entry->prompt)
++ if (current_entry->prompt && current_entry != &rootmenu)
+ prop_warn(prop, "prompt redefined");
++
++ /* Apply all upper menus' visibilities to actual prompts. */
++ if(type == P_PROMPT) {
++ struct menu *menu = current_entry;
++
++ while ((menu = menu->parent) != NULL) {
++ struct expr *dup_expr;
++
++ if (!menu->visibility)
++ continue;
++ /*
++ * Do not add a reference to the
++ * menu's visibility expression but
++ * use a copy of it. Otherwise the
++ * expression reduction functions
++ * will modify expressions that have
++ * multiple references which can
++ * cause unwanted side effects.
++ */
++ dup_expr = expr_copy(menu->visibility);
++
++ prop->visible.expr
++ = expr_alloc_and(prop->visible.expr,
++ dup_expr);
++ }
++ }
++
+ current_entry->prompt = prop;
+ }
+ prop->text = prompt;
+@@ -147,6 +179,12 @@
+ return menu_add_prop(type, prompt, NULL, dep);
+ }
+
++void menu_add_visibility(struct expr *expr)
++{
++ current_entry->visibility = expr_alloc_and(current_entry->visibility,
++ expr);
++}
++
+ void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep)
+ {
+ menu_add_prop(type, NULL, expr, dep);
+@@ -178,13 +216,13 @@
+ }
+ }
+
+-static int menu_range_valid_sym(struct symbol *sym, struct symbol *sym2)
++static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
+ {
+ return sym2->type == S_INT || sym2->type == S_HEX ||
+ (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name));
+ }
+
+-void sym_check_prop(struct symbol *sym)
++static void sym_check_prop(struct symbol *sym)
+ {
+ struct property *prop;
+ struct symbol *sym2;
+@@ -194,8 +232,17 @@
+ if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) &&
+ prop->expr->type != E_SYMBOL)
+ prop_warn(prop,
+- "default for config symbol '%'"
++ "default for config symbol '%s'"
+ " must be a single symbol", sym->name);
++ if (prop->expr->type != E_SYMBOL)
++ break;
++ sym2 = prop_get_symbol(prop);
++ if (sym->type == S_HEX || sym->type == S_INT) {
++ if (!menu_validate_number(sym, sym2))
++ prop_warn(prop,
++ "'%s': number is invalid",
++ sym->name);
++ }
+ break;
+ case P_SELECT:
+ sym2 = prop_get_symbol(prop);
+@@ -215,8 +262,8 @@
+ if (sym->type != S_INT && sym->type != S_HEX)
+ prop_warn(prop, "range is only allowed "
+ "for int or hex symbols");
+- if (!menu_range_valid_sym(sym, prop->expr->left.sym) ||
+- !menu_range_valid_sym(sym, prop->expr->right.sym))
++ if (!menu_validate_number(sym, prop->expr->left.sym) ||
++ !menu_validate_number(sym, prop->expr->right.sym))
+ prop_warn(prop, "range is invalid");
+ break;
+ default:
+@@ -315,6 +362,8 @@
+ parent->next = last_menu->next;
+ last_menu->next = NULL;
+ }
++
++ sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep);
+ }
+ for (menu = parent->list; menu; menu = menu->next) {
+ if (sym && sym_is_choice(sym) &&
+@@ -387,6 +436,29 @@
+ }
+ }
+
++bool menu_has_prompt(struct menu *menu)
++{
++ if (!menu->prompt)
++ return false;
++ return true;
++}
++
++/*
++ * Determine if a menu is empty.
++ * A menu is considered empty if it contains no or only
++ * invisible entries.
++ */
++bool menu_is_empty(struct menu *menu)
++{
++ struct menu *child;
++
++ for (child = menu->list; child; child = child->next) {
++ if (menu_is_visible(child))
++ return(false);
++ }
++ return(true);
++}
++
+ bool menu_is_visible(struct menu *menu)
+ {
+ struct menu *child;
+@@ -395,6 +467,12 @@
+
+ if (!menu->prompt)
+ return false;
++
++ if (menu->visibility) {
++ if (expr_calc_value(menu->visibility) == no)
++ return no;
++ }
++
+ sym = menu->sym;
+ if (sym) {
+ sym_calc_value(sym);
+@@ -404,12 +482,18 @@
+
+ if (visible != no)
+ return true;
++
+ if (!sym || sym_get_tristate_value(menu->sym) == no)
+ return false;
+
+- for (child = menu->list; child; child = child->next)
+- if (menu_is_visible(child))
++ for (child = menu->list; child; child = child->next) {
++ if (menu_is_visible(child)) {
++ if (sym)
++ sym->flags |= SYMBOL_DEF_USER;
+ return true;
++ }
++ }
++
+ return false;
+ }
+
+@@ -451,3 +535,156 @@
+ else
+ return "";
+ }
++
++static void get_prompt_str(struct gstr *r, struct property *prop,
++ struct list_head *head)
++{
++ int i, j;
++ struct menu *submenu[8], *menu, *location = NULL;
++ struct jump_key *jump;
++
++ str_printf(r, _("Prompt: %s\n"), _(prop->text));
++ menu = prop->menu->parent;
++ for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
++ bool accessible = menu_is_visible(menu);
++
++ submenu[i++] = menu;
++ if (location == NULL && accessible)
++ location = menu;
++ }
++ if (head && location) {
++ jump = xmalloc(sizeof(struct jump_key));
++
++ if (menu_is_visible(prop->menu)) {
++ /*
++ * There is not enough room to put the hint at the
++ * beginning of the "Prompt" line. Put the hint on the
++ * last "Location" line even when it would belong on
++ * the former.
++ */
++ jump->target = prop->menu;
++ } else
++ jump->target = location;
++
++ if (list_empty(head))
++ jump->index = 0;
++ else
++ jump->index = list_entry(head->prev, struct jump_key,
++ entries)->index + 1;
++
++ list_add_tail(&jump->entries, head);
++ }
++
++ if (i > 0) {
++ str_printf(r, _(" Location:\n"));
++ for (j = 4; --i >= 0; j += 2) {
++ menu = submenu[i];
++ if (head && location && menu == location)
++ jump->offset = r->len - 1;
++ str_printf(r, "%*c-> %s", j, ' ',
++ _(menu_get_prompt(menu)));
++ if (menu->sym) {
++ str_printf(r, " (%s [=%s])", menu->sym->name ?
++ menu->sym->name : _("<choice>"),
++ sym_get_string_value(menu->sym));
++ }
++ str_append(r, "\n");
++ }
++ }
++}
++
++/*
++ * get peoperty of type P_SYMBOL
++ */
++static struct property *get_symbol_prop(struct symbol *sym)
++{
++ struct property *prop = NULL;
++
++ for_all_properties(sym, prop, P_SYMBOL)
++ break;
++ return prop;
++}
++
++/*
++ * head is optional and may be NULL
++ */
++void get_symbol_str(struct gstr *r, struct symbol *sym,
++ struct list_head *head)
++{
++ bool hit;
++ struct property *prop;
++
++ if (sym && sym->name) {
++ str_printf(r, "Symbol: %s [=%s]\n", sym->name,
++ sym_get_string_value(sym));
++ str_printf(r, "Type : %s\n", sym_type_name(sym->type));
++ if (sym->type == S_INT || sym->type == S_HEX) {
++ prop = sym_get_range_prop(sym);
++ if (prop) {
++ str_printf(r, "Range : ");
++ expr_gstr_print(prop->expr, r);
++ str_append(r, "\n");
++ }
++ }
++ }
++ for_all_prompts(sym, prop)
++ get_prompt_str(r, prop, head);
++
++ prop = get_symbol_prop(sym);
++ if (prop) {
++ str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
++ prop->menu->lineno);
++ if (!expr_is_yes(prop->visible.expr)) {
++ str_append(r, _(" Depends on: "));
++ expr_gstr_print(prop->visible.expr, r);
++ str_append(r, "\n");
++ }
++ }
++
++ hit = false;
++ for_all_properties(sym, prop, P_SELECT) {
++ if (!hit) {
++ str_append(r, " Selects: ");
++ hit = true;
++ } else
++ str_printf(r, " && ");
++ expr_gstr_print(prop->expr, r);
++ }
++ if (hit)
++ str_append(r, "\n");
++ if (sym->rev_dep.expr) {
++ str_append(r, _(" Selected by: "));
++ expr_gstr_print(sym->rev_dep.expr, r);
++ str_append(r, "\n");
++ }
++ str_append(r, "\n\n");
++}
++
++struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head)
++{
++ struct symbol *sym;
++ struct gstr res = str_new();
++ int i;
++
++ for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
++ get_symbol_str(&res, sym, head);
++ if (!i)
++ str_append(&res, _("No matches found.\n"));
++ return res;
++}
++
++
++void menu_get_ext_help(struct menu *menu, struct gstr *help)
++{
++ struct symbol *sym = menu->sym;
++ const char *help_text = nohelp_text;
++
++ if (menu_has_help(menu)) {
++ if (sym->name)
++ str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
++ help_text = menu_get_help(menu);
++ }
++ str_printf(help, "%s\n", _(help_text));
++ if (sym)
++ get_symbol_str(help, sym, NULL);
++}
+diff -Nur uClibc-0.9.33.2/extra/config/merge_config.sh uClibc-git/extra/config/merge_config.sh
+--- uClibc-0.9.33.2/extra/config/merge_config.sh 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/merge_config.sh 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,150 @@
++#!/bin/sh
++# merge_config.sh - Takes a list of config fragment values, and merges
++# them one by one. Provides warnings on overridden values, and specified
++# values that did not make it to the resulting .config file (due to missed
++# dependencies or config symbol removal).
++#
++# Portions reused from kconf_check and generate_cfg:
++# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
++# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
++#
++# Copyright (c) 2009-2010 Wind River Systems, Inc.
++# Copyright 2011 Linaro
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License version 2 as
++# published by the Free Software Foundation.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++# See the GNU General Public License for more details.
++
++clean_up() {
++ rm -f $TMP_FILE
++ exit
++}
++trap clean_up HUP INT TERM
++
++usage() {
++ echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
++ echo " -h display this help text"
++ echo " -m only merge the fragments, do not execute the make command"
++ echo " -n use allnoconfig instead of alldefconfig"
++ echo " -r list redundant entries when merging fragments"
++ echo " -O dir to put generated output files"
++}
++
++MAKE=true
++ALLTARGET=alldefconfig
++WARNREDUN=false
++OUTPUT=.
++
++while true; do
++ case $1 in
++ "-n")
++ ALLTARGET=allnoconfig
++ shift
++ continue
++ ;;
++ "-m")
++ MAKE=false
++ shift
++ continue
++ ;;
++ "-h")
++ usage
++ exit
++ ;;
++ "-r")
++ WARNREDUN=true
++ shift
++ continue
++ ;;
++ "-O")
++ if [ -d $2 ];then
++ OUTPUT=$(echo $2 | sed 's/\/*$//')
++ else
++ echo "output directory $2 does not exist" 1>&2
++ exit 1
++ fi
++ shift 2
++ continue
++ ;;
++ *)
++ break
++ ;;
++ esac
++done
++
++INITFILE=$1
++shift;
++
++MERGE_LIST=$*
++SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
++TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
++
++echo "Using $INITFILE as base"
++cat $INITFILE > $TMP_FILE
++
++# Merge files, printing warnings on overrided values
++for MERGE_FILE in $MERGE_LIST ; do
++ echo "Merging $MERGE_FILE"
++ CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
++
++ for CFG in $CFG_LIST ; do
++ grep -q -w $CFG $TMP_FILE
++ if [ $? -eq 0 ] ; then
++ PREV_VAL=$(grep -w $CFG $TMP_FILE)
++ NEW_VAL=$(grep -w $CFG $MERGE_FILE)
++ if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
++ echo Value of $CFG is redefined by fragment $MERGE_FILE:
++ echo Previous value: $PREV_VAL
++ echo New value: $NEW_VAL
++ echo
++ elif [ "$WARNREDUN" = "true" ]; then
++ echo Value of $CFG is redundant by fragment $MERGE_FILE:
++ fi
++ sed -i "/$CFG[ =]/d" $TMP_FILE
++ fi
++ done
++ cat $MERGE_FILE >> $TMP_FILE
++done
++
++if [ "$MAKE" = "false" ]; then
++ cp $TMP_FILE $OUTPUT/.config
++ echo "#"
++ echo "# merged configuration written to $OUTPUT/.config (needs make)"
++ echo "#"
++ clean_up
++ exit
++fi
++
++# If we have an output dir, setup the O= argument, otherwise leave
++# it blank, since O=. will create an unnecessary ./source softlink
++OUTPUT_ARG=""
++if [ "$OUTPUT" != "." ] ; then
++ OUTPUT_ARG="O=$OUTPUT"
++fi
++
++
++# Use the merged file as the starting point for:
++# alldefconfig: Fills in any missing symbols with Kconfig default
++# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
++make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
++
++
++# Check all specified config values took (might have missed-dependency issues)
++for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
++
++ REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
++ ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
++ if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
++ echo "Value requested for $CFG not in final .config"
++ echo "Requested value: $REQUESTED_VAL"
++ echo "Actual value: $ACTUAL_VAL"
++ echo ""
++ fi
++done
++
++clean_up
+diff -Nur uClibc-0.9.33.2/extra/config/nconf.c uClibc-git/extra/config/nconf.c
+--- uClibc-0.9.33.2/extra/config/nconf.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/nconf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,1557 @@
++/*
++ * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
++ * Released under the terms of the GNU GPL v2.0.
++ *
++ * Derived from menuconfig.
++ *
++ */
++#define _GNU_SOURCE
++#include <string.h>
++#include <stdlib.h>
++
++#include "lkc.h"
++#include "nconf.h"
++#include <ctype.h>
++
++static const char nconf_global_help[] = N_(
++"Help windows\n"
++"------------\n"
++"o Global help: Unless in a data entry window, pressing <F1> will give \n"
++" you the global help window, which you are just reading.\n"
++"\n"
++"o A short version of the global help is available by pressing <F3>.\n"
++"\n"
++"o Local help: To get help related to the current menu entry, use any\n"
++" of <?> <h>, or if in a data entry window then press <F1>.\n"
++"\n"
++"\n"
++"Menu entries\n"
++"------------\n"
++"This interface lets you select features and parameters for the \n"
++"build. Features can either be built-in, modularized, or removed.\n"
++"Parameters must be entered as text or decimal or hexadecimal numbers.\n"
++"\n"
++"Menu entries beginning with following braces represent features that\n"
++" [ ] can be built in or removed\n"
++" < > can be built in, modularized or removed\n"
++" { } can be built in or modularized, are selected by another feature\n"
++" - - are selected by another feature\n"
++" XXX cannot be selected. Symbol Info <F2> tells you why.\n"
++"*, M or whitespace inside braces means to build in, build as a module\n"
++"or to exclude the feature respectively.\n"
++"\n"
++"To change any of these features, highlight it with the movement keys\n"
++"listed below and press <y> to build it in, <m> to make it a module or\n"
++"<n> to remove it. You may press the <Space> key to cycle through the\n"
++"available options.\n"
++"\n"
++"A trailing \"--->\" designates a submenu, a trailing \"----\" an\n"
++"empty submenu.\n"
++"\n"
++"Menu navigation keys\n"
++"----------------------------------------------------------------------\n"
++"Linewise up <Up>\n"
++"Linewise down <Down>\n"
++"Pagewise up <Page Up>\n"
++"Pagewise down <Page Down>\n"
++"First entry <Home>\n"
++"Last entry <End>\n"
++"Enter a submenu <Right> <Enter>\n"
++"Go back to parent menu <Left> <Esc> <F5>\n"
++"Close a help window <Enter> <Esc> <F5>\n"
++"Close entry window, apply <Enter>\n"
++"Close entry window, forget <Esc> <F5>\n"
++"Start incremental, case-insensitive search for STRING in menu entries,\n"
++" no regex support, STRING is displayed in upper left corner\n"
++" </>STRING\n"
++" Remove last character <Backspace>\n"
++" Jump to next hit <Down>\n"
++" Jump to previous hit <Up>\n"
++"Exit menu search mode </> <Esc>\n"
++"Search for configuration variables with or without leading CONFIG_\n"
++" <F8>RegExpr<Enter>\n"
++"Verbose search help <F8><F1>\n"
++"----------------------------------------------------------------------\n"
++"\n"
++"Unless in a data entry window, key <1> may be used instead of <F1>,\n"
++"<2> instead of <F2>, etc.\n"
++"\n"
++"\n"
++"Radiolist (Choice list)\n"
++"-----------------------\n"
++"Use the movement keys listed above to select the option you wish to set\n"
++"and press <Space>.\n"
++"\n"
++"\n"
++"Data entry\n"
++"----------\n"
++"Enter the requested information and press <Enter>. Hexadecimal values\n"
++"may be entered without the \"0x\" prefix.\n"
++"\n"
++"\n"
++"Text Box (Help Window)\n"
++"----------------------\n"
++"Use movement keys as listed in table above.\n"
++"\n"
++"Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
++"\n"
++"\n"
++"Alternate configuration files\n"
++"-----------------------------\n"
++"nconfig supports switching between different configurations.\n"
++"Press <F6> to save your current configuration. Press <F7> and enter\n"
++"a file name to load a previously saved configuration.\n"
++"\n"
++"\n"
++"Terminal configuration\n"
++"----------------------\n"
++"If you use nconfig in a xterm window, make sure your TERM environment\n"
++"variable specifies a terminal configuration which supports at least\n"
++"16 colors. Otherwise nconfig will look rather bad.\n"
++"\n"
++"If the \"stty size\" command reports the current terminalsize correctly,\n"
++"nconfig will adapt to sizes larger than the traditional 80x25 \"standard\"\n"
++"and display longer menus properly.\n"
++"\n"
++"\n"
++"Single menu mode\n"
++"----------------\n"
++"If you prefer to have all of the menu entries listed in a single menu,\n"
++"rather than the default multimenu hierarchy, run nconfig with\n"
++"NCONFIG_MODE environment variable set to single_menu. Example:\n"
++"\n"
++"make NCONFIG_MODE=single_menu nconfig\n"
++"\n"
++"<Enter> will then unfold the appropriate category, or fold it if it\n"
++"is already unfolded. Folded menu entries will be designated by a\n"
++"leading \"++>\" and unfolded entries by a leading \"-->\".\n"
++"\n"
++"Note that this mode can eventually be a little more CPU expensive than\n"
++"the default mode, especially with a larger number of unfolded submenus.\n"
++"\n"),
++menu_no_f_instructions[] = N_(
++"Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
++"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n"
++"\n"
++"Use the following keys to navigate the menus:\n"
++"Move up or down with <Up> and <Down>.\n"
++"Enter a submenu with <Enter> or <Right>.\n"
++"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
++"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
++"Pressing <Space> cycles through the available options.\n"
++"To search for menu entries press </>.\n"
++"<Esc> always leaves the current window.\n"
++"\n"
++"You do not have function keys support.\n"
++"Press <1> instead of <F1>, <2> instead of <F2>, etc.\n"
++"For verbose global help use key <1>.\n"
++"For help related to the current menu entry press <?> or <h>.\n"),
++menu_instructions[] = N_(
++"Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
++"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n"
++"\n"
++"Use the following keys to navigate the menus:\n"
++"Move up or down with <Up> or <Down>.\n"
++"Enter a submenu with <Enter> or <Right>.\n"
++"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
++"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
++"Pressing <Space> cycles through the available options.\n"
++"To search for menu entries press </>.\n"
++"<Esc> always leaves the current window.\n"
++"\n"
++"Pressing <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
++"For verbose global help press <F1>.\n"
++"For help related to the current menu entry press <?> or <h>.\n"),
++radiolist_instructions[] = N_(
++"Press <Up>, <Down>, <Home> or <End> to navigate a radiolist, select\n"
++"with <Space>.\n"
++"For help related to the current entry press <?> or <h>.\n"
++"For global help press <F1>.\n"),
++inputbox_instructions_int[] = N_(
++"Please enter a decimal value.\n"
++"Fractions will not be accepted.\n"
++"Press <Enter> to apply, <Esc> to cancel."),
++inputbox_instructions_hex[] = N_(
++"Please enter a hexadecimal value.\n"
++"Press <Enter> to apply, <Esc> to cancel."),
++inputbox_instructions_string[] = N_(
++"Please enter a string value.\n"
++"Press <Enter> to apply, <Esc> to cancel."),
++setmod_text[] = N_(
++"This feature depends on another feature which has been configured as a\n"
++"module. As a result, the current feature will be built as a module too."),
++load_config_text[] = N_(
++"Enter the name of the configuration file you wish to load.\n"
++"Accept the name shown to restore the configuration you last\n"
++"retrieved. Leave empty to abort."),
++load_config_help[] = N_(
++"For various reasons, one may wish to keep several different\n"
++"configurations available on a single machine.\n"
++"\n"
++"If you have saved a previous configuration in a file other than the\n"
++"default one, entering its name here will allow you to load and modify\n"
++"that configuration.\n"
++"\n"
++"Leave empty to abort.\n"),
++save_config_text[] = N_(
++"Enter a filename to which this configuration should be saved\n"
++"as an alternate. Leave empty to abort."),
++save_config_help[] = N_(
++"For various reasons, one may wish to keep several different\n"
++"configurations available on a single machine.\n"
++"\n"
++"Entering a file name here will allow you to later retrieve, modify\n"
++"and use the current configuration as an alternate to whatever\n"
++"configuration options you have selected at that time.\n"
++"\n"
++"Leave empty to abort.\n"),
++search_help[] = N_(
++"Search for symbols (configuration variable names CONFIG_*) and display\n"
++"their relations. Regular expressions are supported.\n"
++"Example: Search for \"^FOO\".\n"
++"Result:\n"
++"-----------------------------------------------------------------\n"
++"Symbol: FOO [ = m]\n"
++"Prompt: Foo bus is used to drive the bar HW\n"
++"Defined at drivers/pci/Kconfig:47\n"
++"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
++"Location:\n"
++" -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
++" -> PCI support (PCI [ = y])\n"
++" -> PCI access mode (<choice> [ = y])\n"
++"Selects: LIBCRC32\n"
++"Selected by: BAR\n"
++"-----------------------------------------------------------------\n"
++"o The line 'Prompt:' shows the text displayed for this symbol in\n"
++" the menu hierarchy.\n"
++"o The 'Defined at' line tells at what file / line number the symbol is\n"
++" defined.\n"
++"o The 'Depends on:' line lists symbols that need to be defined for\n"
++" this symbol to be visible and selectable in the menu.\n"
++"o The 'Location:' lines tell, where in the menu structure this symbol\n"
++" is located. A location followed by a [ = y] indicates that this is\n"
++" a selectable menu item, and the current value is displayed inside\n"
++" brackets.\n"
++"o The 'Selects:' line tells, what symbol will be automatically selected\n"
++" if this symbol is selected (y or m).\n"
++"o The 'Selected by' line tells what symbol has selected this symbol.\n"
++"\n"
++"Only relevant lines are shown.\n"
++"\n\n"
++"Search examples:\n"
++"USB => find all symbols containing USB\n"
++"^USB => find all symbols starting with USB\n"
++"USB$ => find all symbols ending with USB\n"
++"\n");
++
++struct mitem {
++ char str[256];
++ char tag;
++ void *usrptr;
++ int is_visible;
++};
++
++#define MAX_MENU_ITEMS 4096
++static int show_all_items;
++static int indent;
++static struct menu *current_menu;
++static int child_count;
++static int single_menu_mode;
++/* the window in which all information appears */
++static WINDOW *main_window;
++/* the largest size of the menu window */
++static int mwin_max_lines;
++static int mwin_max_cols;
++/* the window in which we show option buttons */
++static MENU *curses_menu;
++static ITEM *curses_menu_items[MAX_MENU_ITEMS];
++static struct mitem k_menu_items[MAX_MENU_ITEMS];
++static int items_num;
++static int global_exit;
++/* the currently selected button */
++const char *current_instructions = menu_instructions;
++
++static char *dialog_input_result;
++static int dialog_input_result_len;
++
++static void conf(struct menu *menu);
++static void conf_choice(struct menu *menu);
++static void conf_string(struct menu *menu);
++static void conf_load(void);
++static void conf_save(void);
++static void show_help(struct menu *menu);
++static int do_exit(void);
++static void setup_windows(void);
++static void search_conf(void);
++
++typedef void (*function_key_handler_t)(int *key, struct menu *menu);
++static void handle_f1(int *key, struct menu *current_item);
++static void handle_f2(int *key, struct menu *current_item);
++static void handle_f3(int *key, struct menu *current_item);
++static void handle_f4(int *key, struct menu *current_item);
++static void handle_f5(int *key, struct menu *current_item);
++static void handle_f6(int *key, struct menu *current_item);
++static void handle_f7(int *key, struct menu *current_item);
++static void handle_f8(int *key, struct menu *current_item);
++static void handle_f9(int *key, struct menu *current_item);
++
++struct function_keys {
++ const char *key_str;
++ const char *func;
++ function_key key;
++ function_key_handler_t handler;
++};
++
++static const int function_keys_num = 9;
++struct function_keys function_keys[] = {
++ {
++ .key_str = "F1",
++ .func = "Help",
++ .key = F_HELP,
++ .handler = handle_f1,
++ },
++ {
++ .key_str = "F2",
++ .func = "SymInfo",
++ .key = F_SYMBOL,
++ .handler = handle_f2,
++ },
++ {
++ .key_str = "F3",
++ .func = "Help 2",
++ .key = F_INSTS,
++ .handler = handle_f3,
++ },
++ {
++ .key_str = "F4",
++ .func = "ShowAll",
++ .key = F_CONF,
++ .handler = handle_f4,
++ },
++ {
++ .key_str = "F5",
++ .func = "Back",
++ .key = F_BACK,
++ .handler = handle_f5,
++ },
++ {
++ .key_str = "F6",
++ .func = "Save",
++ .key = F_SAVE,
++ .handler = handle_f6,
++ },
++ {
++ .key_str = "F7",
++ .func = "Load",
++ .key = F_LOAD,
++ .handler = handle_f7,
++ },
++ {
++ .key_str = "F8",
++ .func = "SymSearch",
++ .key = F_SEARCH,
++ .handler = handle_f8,
++ },
++ {
++ .key_str = "F9",
++ .func = "Exit",
++ .key = F_EXIT,
++ .handler = handle_f9,
++ },
++};
++
++static void print_function_line(void)
++{
++ int i;
++ int offset = 1;
++ const int skip = 1;
++ int lines = getmaxy(stdscr);
++
++ for (i = 0; i < function_keys_num; i++) {
++ (void) wattrset(main_window, attributes[FUNCTION_HIGHLIGHT]);
++ mvwprintw(main_window, lines-3, offset,
++ "%s",
++ function_keys[i].key_str);
++ (void) wattrset(main_window, attributes[FUNCTION_TEXT]);
++ offset += strlen(function_keys[i].key_str);
++ mvwprintw(main_window, lines-3,
++ offset, "%s",
++ function_keys[i].func);
++ offset += strlen(function_keys[i].func) + skip;
++ }
++ (void) wattrset(main_window, attributes[NORMAL]);
++}
++
++/* help */
++static void handle_f1(int *key, struct menu *current_item)
++{
++ show_scroll_win(main_window,
++ _("Global help"), _(nconf_global_help));
++ return;
++}
++
++/* symbole help */
++static void handle_f2(int *key, struct menu *current_item)
++{
++ show_help(current_item);
++ return;
++}
++
++/* instructions */
++static void handle_f3(int *key, struct menu *current_item)
++{
++ show_scroll_win(main_window,
++ _("Short help"),
++ _(current_instructions));
++ return;
++}
++
++/* config */
++static void handle_f4(int *key, struct menu *current_item)
++{
++ int res = btn_dialog(main_window,
++ _("Show all symbols?"),
++ 2,
++ " <Show All> ",
++ "<Don't show all>");
++ if (res == 0)
++ show_all_items = 1;
++ else if (res == 1)
++ show_all_items = 0;
++
++ return;
++}
++
++/* back */
++static void handle_f5(int *key, struct menu *current_item)
++{
++ *key = KEY_LEFT;
++ return;
++}
++
++/* save */
++static void handle_f6(int *key, struct menu *current_item)
++{
++ conf_save();
++ return;
++}
++
++/* load */
++static void handle_f7(int *key, struct menu *current_item)
++{
++ conf_load();
++ return;
++}
++
++/* search */
++static void handle_f8(int *key, struct menu *current_item)
++{
++ search_conf();
++ return;
++}
++
++/* exit */
++static void handle_f9(int *key, struct menu *current_item)
++{
++ do_exit();
++ return;
++}
++
++/* return != 0 to indicate the key was handles */
++static int process_special_keys(int *key, struct menu *menu)
++{
++ int i;
++
++ if (*key == KEY_RESIZE) {
++ setup_windows();
++ return 1;
++ }
++
++ for (i = 0; i < function_keys_num; i++) {
++ if (*key == KEY_F(function_keys[i].key) ||
++ *key == '0' + function_keys[i].key){
++ function_keys[i].handler(key, menu);
++ return 1;
++ }
++ }
++
++ return 0;
++}
++
++static void clean_items(void)
++{
++ int i;
++ for (i = 0; curses_menu_items[i]; i++)
++ free_item(curses_menu_items[i]);
++ bzero(curses_menu_items, sizeof(curses_menu_items));
++ bzero(k_menu_items, sizeof(k_menu_items));
++ items_num = 0;
++}
++
++typedef enum {MATCH_TINKER_PATTERN_UP, MATCH_TINKER_PATTERN_DOWN,
++ FIND_NEXT_MATCH_DOWN, FIND_NEXT_MATCH_UP} match_f;
++
++/* return the index of the matched item, or -1 if no such item exists */
++static int get_mext_match(const char *match_str, match_f flag)
++{
++ int match_start = item_index(current_item(curses_menu));
++ int index;
++
++ if (flag == FIND_NEXT_MATCH_DOWN)
++ ++match_start;
++ else if (flag == FIND_NEXT_MATCH_UP)
++ --match_start;
++
++ index = match_start;
++ index = (index + items_num) % items_num;
++ while (true) {
++ char *str = k_menu_items[index].str;
++ if (strcasestr(str, match_str) != 0)
++ return index;
++ if (flag == FIND_NEXT_MATCH_UP ||
++ flag == MATCH_TINKER_PATTERN_UP)
++ --index;
++ else
++ ++index;
++ index = (index + items_num) % items_num;
++ if (index == match_start)
++ return -1;
++ }
++}
++
++/* Make a new item. */
++static void item_make(struct menu *menu, char tag, const char *fmt, ...)
++{
++ va_list ap;
++
++ if (items_num > MAX_MENU_ITEMS-1)
++ return;
++
++ bzero(&k_menu_items[items_num], sizeof(k_menu_items[0]));
++ k_menu_items[items_num].tag = tag;
++ k_menu_items[items_num].usrptr = menu;
++ if (menu != NULL)
++ k_menu_items[items_num].is_visible =
++ menu_is_visible(menu);
++ else
++ k_menu_items[items_num].is_visible = 1;
++
++ va_start(ap, fmt);
++ vsnprintf(k_menu_items[items_num].str,
++ sizeof(k_menu_items[items_num].str),
++ fmt, ap);
++ va_end(ap);
++
++ if (!k_menu_items[items_num].is_visible)
++ memcpy(k_menu_items[items_num].str, "XXX", 3);
++
++ curses_menu_items[items_num] = new_item(
++ k_menu_items[items_num].str,
++ k_menu_items[items_num].str);
++ set_item_userptr(curses_menu_items[items_num],
++ &k_menu_items[items_num]);
++ /*
++ if (!k_menu_items[items_num].is_visible)
++ item_opts_off(curses_menu_items[items_num], O_SELECTABLE);
++ */
++
++ items_num++;
++ curses_menu_items[items_num] = NULL;
++}
++
++/* very hackish. adds a string to the last item added */
++static void item_add_str(const char *fmt, ...)
++{
++ va_list ap;
++ int index = items_num-1;
++ char new_str[256];
++ char tmp_str[256];
++
++ if (index < 0)
++ return;
++
++ va_start(ap, fmt);
++ vsnprintf(new_str, sizeof(new_str), fmt, ap);
++ va_end(ap);
++ snprintf(tmp_str, sizeof(tmp_str), "%s%s",
++ k_menu_items[index].str, new_str);
++ strncpy(k_menu_items[index].str,
++ tmp_str,
++ sizeof(k_menu_items[index].str));
++
++ free_item(curses_menu_items[index]);
++ curses_menu_items[index] = new_item(
++ k_menu_items[index].str,
++ k_menu_items[index].str);
++ set_item_userptr(curses_menu_items[index],
++ &k_menu_items[index]);
++}
++
++/* get the tag of the currently selected item */
++static char item_tag(void)
++{
++ ITEM *cur;
++ struct mitem *mcur;
++
++ cur = current_item(curses_menu);
++ if (cur == NULL)
++ return 0;
++ mcur = (struct mitem *) item_userptr(cur);
++ return mcur->tag;
++}
++
++static int curses_item_index(void)
++{
++ return item_index(current_item(curses_menu));
++}
++
++static void *item_data(void)
++{
++ ITEM *cur;
++ struct mitem *mcur;
++
++ cur = current_item(curses_menu);
++ if (!cur)
++ return NULL;
++ mcur = (struct mitem *) item_userptr(cur);
++ return mcur->usrptr;
++
++}
++
++static int item_is_tag(char tag)
++{
++ return item_tag() == tag;
++}
++
++static char filename[PATH_MAX+1];
++static char menu_backtitle[PATH_MAX+128];
++static const char *set_config_filename(const char *config_filename)
++{
++ int size;
++
++ size = snprintf(menu_backtitle, sizeof(menu_backtitle),
++ "%s - %s", config_filename, rootmenu.prompt->text);
++ if (size >= sizeof(menu_backtitle))
++ menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
++
++ size = snprintf(filename, sizeof(filename), "%s", config_filename);
++ if (size >= sizeof(filename))
++ filename[sizeof(filename)-1] = '\0';
++ return menu_backtitle;
++}
++
++/* return = 0 means we are successful.
++ * -1 means go on doing what you were doing
++ */
++static int do_exit(void)
++{
++ int res;
++ if (!conf_get_changed()) {
++ global_exit = 1;
++ return 0;
++ }
++ res = btn_dialog(main_window,
++ _("Do you wish to save your new configuration?\n"
++ "<ESC> to cancel and resume nconfig."),
++ 2,
++ " <save> ",
++ "<don't save>");
++ if (res == KEY_EXIT) {
++ global_exit = 0;
++ return -1;
++ }
++
++ /* if we got here, the user really wants to exit */
++ switch (res) {
++ case 0:
++ res = conf_write(filename);
++ if (res)
++ btn_dialog(
++ main_window,
++ _("Error during writing of configuration.\n"
++ "Your configuration changes were NOT saved."),
++ 1,
++ "<OK>");
++ break;
++ default:
++ btn_dialog(
++ main_window,
++ _("Your configuration changes were NOT saved."),
++ 1,
++ "<OK>");
++ break;
++ }
++ global_exit = 1;
++ return 0;
++}
++
++
++static void search_conf(void)
++{
++ struct symbol **sym_arr;
++ struct gstr res;
++ struct gstr title;
++ char *dialog_input;
++ int dres;
++
++ title = str_new();
++ str_printf( &title, _("Enter %s (sub)string or regexp to search for "
++ "(with or without \"%s\")"), CONFIG_, CONFIG_);
++
++again:
++ dres = dialog_inputbox(main_window,
++ _("Search Configuration Parameter"),
++ str_get(&title),
++ "", &dialog_input_result, &dialog_input_result_len);
++ switch (dres) {
++ case 0:
++ break;
++ case 1:
++ show_scroll_win(main_window,
++ _("Search Configuration"), search_help);
++ goto again;
++ default:
++ str_free(&title);
++ return;
++ }
++
++ /* strip the prefix if necessary */
++ dialog_input = dialog_input_result;
++ if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
++ dialog_input += strlen(CONFIG_);
++
++ sym_arr = sym_re_search(dialog_input);
++ res = get_relations_str(sym_arr, NULL);
++ free(sym_arr);
++ show_scroll_win(main_window,
++ _("Search Results"), str_get(&res));
++ str_free(&res);
++ str_free(&title);
++}
++
++
++static void build_conf(struct menu *menu)
++{
++ struct symbol *sym;
++ struct property *prop;
++ struct menu *child;
++ int type, tmp, doint = 2;
++ tristate val;
++ char ch;
++
++ if (!menu || (!show_all_items && !menu_is_visible(menu)))
++ return;
++
++ sym = menu->sym;
++ prop = menu->prompt;
++ if (!sym) {
++ if (prop && menu != current_menu) {
++ const char *prompt = menu_get_prompt(menu);
++ enum prop_type ptype;
++ ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
++ switch (ptype) {
++ case P_MENU:
++ child_count++;
++ prompt = _(prompt);
++ if (single_menu_mode) {
++ item_make(menu, 'm',
++ "%s%*c%s",
++ menu->data ? "-->" : "++>",
++ indent + 1, ' ', prompt);
++ } else
++ item_make(menu, 'm',
++ " %*c%s %s",
++ indent + 1, ' ', prompt,
++ menu_is_empty(menu) ? "----" : "--->");
++
++ if (single_menu_mode && menu->data)
++ goto conf_childs;
++ return;
++ case P_COMMENT:
++ if (prompt) {
++ child_count++;
++ item_make(menu, ':',
++ " %*c*** %s ***",
++ indent + 1, ' ',
++ _(prompt));
++ }
++ break;
++ default:
++ if (prompt) {
++ child_count++;
++ item_make(menu, ':', "---%*c%s",
++ indent + 1, ' ',
++ _(prompt));
++ }
++ }
++ } else
++ doint = 0;
++ goto conf_childs;
++ }
++
++ type = sym_get_type(sym);
++ if (sym_is_choice(sym)) {
++ struct symbol *def_sym = sym_get_choice_value(sym);
++ struct menu *def_menu = NULL;
++
++ child_count++;
++ for (child = menu->list; child; child = child->next) {
++ if (menu_is_visible(child) && child->sym == def_sym)
++ def_menu = child;
++ }
++
++ val = sym_get_tristate_value(sym);
++ if (sym_is_changable(sym)) {
++ switch (type) {
++ case S_BOOLEAN:
++ item_make(menu, 't', "[%c]",
++ val == no ? ' ' : '*');
++ break;
++ case S_TRISTATE:
++ switch (val) {
++ case yes:
++ ch = '*';
++ break;
++ case mod:
++ ch = 'M';
++ break;
++ default:
++ ch = ' ';
++ break;
++ }
++ item_make(menu, 't', "<%c>", ch);
++ break;
++ }
++ } else {
++ item_make(menu, def_menu ? 't' : ':', " ");
++ }
++
++ item_add_str("%*c%s", indent + 1,
++ ' ', _(menu_get_prompt(menu)));
++ if (val == yes) {
++ if (def_menu) {
++ item_add_str(" (%s)",
++ _(menu_get_prompt(def_menu)));
++ item_add_str(" --->");
++ if (def_menu->list) {
++ indent += 2;
++ build_conf(def_menu);
++ indent -= 2;
++ }
++ }
++ return;
++ }
++ } else {
++ if (menu == current_menu) {
++ item_make(menu, ':',
++ "---%*c%s", indent + 1,
++ ' ', _(menu_get_prompt(menu)));
++ goto conf_childs;
++ }
++ child_count++;
++ val = sym_get_tristate_value(sym);
++ if (sym_is_choice_value(sym) && val == yes) {
++ item_make(menu, ':', " ");
++ } else {
++ switch (type) {
++ case S_BOOLEAN:
++ if (sym_is_changable(sym))
++ item_make(menu, 't', "[%c]",
++ val == no ? ' ' : '*');
++ else
++ item_make(menu, 't', "-%c-",
++ val == no ? ' ' : '*');
++ break;
++ case S_TRISTATE:
++ switch (val) {
++ case yes:
++ ch = '*';
++ break;
++ case mod:
++ ch = 'M';
++ break;
++ default:
++ ch = ' ';
++ break;
++ }
++ if (sym_is_changable(sym)) {
++ if (sym->rev_dep.tri == mod)
++ item_make(menu,
++ 't', "{%c}", ch);
++ else
++ item_make(menu,
++ 't', "<%c>", ch);
++ } else
++ item_make(menu, 't', "-%c-", ch);
++ break;
++ default:
++ tmp = 2 + strlen(sym_get_string_value(sym));
++ item_make(menu, 's', " (%s)",
++ sym_get_string_value(sym));
++ tmp = indent - tmp + 4;
++ if (tmp < 0)
++ tmp = 0;
++ item_add_str("%*c%s%s", tmp, ' ',
++ _(menu_get_prompt(menu)),
++ (sym_has_value(sym) ||
++ !sym_is_changable(sym)) ? "" :
++ _(" (NEW)"));
++ goto conf_childs;
++ }
++ }
++ item_add_str("%*c%s%s", indent + 1, ' ',
++ _(menu_get_prompt(menu)),
++ (sym_has_value(sym) || !sym_is_changable(sym)) ?
++ "" : _(" (NEW)"));
++ if (menu->prompt && menu->prompt->type == P_MENU) {
++ item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->");
++ return;
++ }
++ }
++
++conf_childs:
++ indent += doint;
++ for (child = menu->list; child; child = child->next)
++ build_conf(child);
++ indent -= doint;
++}
++
++static void reset_menu(void)
++{
++ unpost_menu(curses_menu);
++ clean_items();
++}
++
++/* adjust the menu to show this item.
++ * prefer not to scroll the menu if possible*/
++static void center_item(int selected_index, int *last_top_row)
++{
++ int toprow;
++
++ set_top_row(curses_menu, *last_top_row);
++ toprow = top_row(curses_menu);
++ if (selected_index < toprow ||
++ selected_index >= toprow+mwin_max_lines) {
++ toprow = max(selected_index-mwin_max_lines/2, 0);
++ if (toprow >= item_count(curses_menu)-mwin_max_lines)
++ toprow = item_count(curses_menu)-mwin_max_lines;
++ set_top_row(curses_menu, toprow);
++ }
++ set_current_item(curses_menu,
++ curses_menu_items[selected_index]);
++ *last_top_row = toprow;
++ post_menu(curses_menu);
++ refresh_all_windows(main_window);
++}
++
++/* this function assumes reset_menu has been called before */
++static void show_menu(const char *prompt, const char *instructions,
++ int selected_index, int *last_top_row)
++{
++ int maxx, maxy;
++ WINDOW *menu_window;
++
++ current_instructions = instructions;
++
++ clear();
++ (void) wattrset(main_window, attributes[NORMAL]);
++ print_in_middle(stdscr, 1, 0, getmaxx(stdscr),
++ menu_backtitle,
++ attributes[MAIN_HEADING]);
++
++ (void) wattrset(main_window, attributes[MAIN_MENU_BOX]);
++ box(main_window, 0, 0);
++ (void) wattrset(main_window, attributes[MAIN_MENU_HEADING]);
++ mvwprintw(main_window, 0, 3, " %s ", prompt);
++ (void) wattrset(main_window, attributes[NORMAL]);
++
++ set_menu_items(curses_menu, curses_menu_items);
++
++ /* position the menu at the middle of the screen */
++ scale_menu(curses_menu, &maxy, &maxx);
++ maxx = min(maxx, mwin_max_cols-2);
++ maxy = mwin_max_lines;
++ menu_window = derwin(main_window,
++ maxy,
++ maxx,
++ 2,
++ (mwin_max_cols-maxx)/2);
++ keypad(menu_window, TRUE);
++ set_menu_win(curses_menu, menu_window);
++ set_menu_sub(curses_menu, menu_window);
++
++ /* must reassert this after changing items, otherwise returns to a
++ * default of 16
++ */
++ set_menu_format(curses_menu, maxy, 1);
++ center_item(selected_index, last_top_row);
++ set_menu_format(curses_menu, maxy, 1);
++
++ print_function_line();
++
++ /* Post the menu */
++ post_menu(curses_menu);
++ refresh_all_windows(main_window);
++}
++
++static void adj_match_dir(match_f *match_direction)
++{
++ if (*match_direction == FIND_NEXT_MATCH_DOWN)
++ *match_direction =
++ MATCH_TINKER_PATTERN_DOWN;
++ else if (*match_direction == FIND_NEXT_MATCH_UP)
++ *match_direction =
++ MATCH_TINKER_PATTERN_UP;
++ /* else, do no change.. */
++}
++
++struct match_state
++{
++ int in_search;
++ match_f match_direction;
++ char pattern[256];
++};
++
++/* Return 0 means I have handled the key. In such a case, ans should hold the
++ * item to center, or -1 otherwise.
++ * Else return -1 .
++ */
++static int do_match(int key, struct match_state *state, int *ans)
++{
++ char c = (char) key;
++ int terminate_search = 0;
++ *ans = -1;
++ if (key == '/' || (state->in_search && key == 27)) {
++ move(0, 0);
++ refresh();
++ clrtoeol();
++ state->in_search = 1-state->in_search;
++ bzero(state->pattern, sizeof(state->pattern));
++ state->match_direction = MATCH_TINKER_PATTERN_DOWN;
++ return 0;
++ } else if (!state->in_search)
++ return 1;
++
++ if (isalnum(c) || isgraph(c) || c == ' ') {
++ state->pattern[strlen(state->pattern)] = c;
++ state->pattern[strlen(state->pattern)] = '\0';
++ adj_match_dir(&state->match_direction);
++ *ans = get_mext_match(state->pattern,
++ state->match_direction);
++ } else if (key == KEY_DOWN) {
++ state->match_direction = FIND_NEXT_MATCH_DOWN;
++ *ans = get_mext_match(state->pattern,
++ state->match_direction);
++ } else if (key == KEY_UP) {
++ state->match_direction = FIND_NEXT_MATCH_UP;
++ *ans = get_mext_match(state->pattern,
++ state->match_direction);
++ } else if (key == KEY_BACKSPACE || key == 127) {
++ state->pattern[strlen(state->pattern)-1] = '\0';
++ adj_match_dir(&state->match_direction);
++ } else
++ terminate_search = 1;
++
++ if (terminate_search) {
++ state->in_search = 0;
++ bzero(state->pattern, sizeof(state->pattern));
++ move(0, 0);
++ refresh();
++ clrtoeol();
++ return -1;
++ }
++ return 0;
++}
++
++static void conf(struct menu *menu)
++{
++ struct menu *submenu = 0;
++ const char *prompt = menu_get_prompt(menu);
++ struct symbol *sym;
++ int res;
++ int current_index = 0;
++ int last_top_row = 0;
++ struct match_state match_state = {
++ .in_search = 0,
++ .match_direction = MATCH_TINKER_PATTERN_DOWN,
++ .pattern = "",
++ };
++
++ while (!global_exit) {
++ reset_menu();
++ current_menu = menu;
++ build_conf(menu);
++ if (!child_count)
++ break;
++
++ show_menu(prompt ? _(prompt) : _("Main Menu"),
++ _(menu_instructions),
++ current_index, &last_top_row);
++ keypad((menu_win(curses_menu)), TRUE);
++ while (!global_exit) {
++ if (match_state.in_search) {
++ mvprintw(0, 0,
++ "searching: %s", match_state.pattern);
++ clrtoeol();
++ }
++ refresh_all_windows(main_window);
++ res = wgetch(menu_win(curses_menu));
++ if (!res)
++ break;
++ if (do_match(res, &match_state, &current_index) == 0) {
++ if (current_index != -1)
++ center_item(current_index,
++ &last_top_row);
++ continue;
++ }
++ if (process_special_keys(&res,
++ (struct menu *) item_data()))
++ break;
++ switch (res) {
++ case KEY_DOWN:
++ menu_driver(curses_menu, REQ_DOWN_ITEM);
++ break;
++ case KEY_UP:
++ menu_driver(curses_menu, REQ_UP_ITEM);
++ break;
++ case KEY_NPAGE:
++ menu_driver(curses_menu, REQ_SCR_DPAGE);
++ break;
++ case KEY_PPAGE:
++ menu_driver(curses_menu, REQ_SCR_UPAGE);
++ break;
++ case KEY_HOME:
++ menu_driver(curses_menu, REQ_FIRST_ITEM);
++ break;
++ case KEY_END:
++ menu_driver(curses_menu, REQ_LAST_ITEM);
++ break;
++ case 'h':
++ case '?':
++ show_help((struct menu *) item_data());
++ break;
++ }
++ if (res == 10 || res == 27 ||
++ res == 32 || res == 'n' || res == 'y' ||
++ res == KEY_LEFT || res == KEY_RIGHT ||
++ res == 'm')
++ break;
++ refresh_all_windows(main_window);
++ }
++
++ refresh_all_windows(main_window);
++ /* if ESC or left*/
++ if (res == 27 || (menu != &rootmenu && res == KEY_LEFT))
++ break;
++
++ /* remember location in the menu */
++ last_top_row = top_row(curses_menu);
++ current_index = curses_item_index();
++
++ if (!item_tag())
++ continue;
++
++ submenu = (struct menu *) item_data();
++ if (!submenu || !menu_is_visible(submenu))
++ continue;
++ sym = submenu->sym;
++
++ switch (res) {
++ case ' ':
++ if (item_is_tag('t'))
++ sym_toggle_tristate_value(sym);
++ else if (item_is_tag('m'))
++ conf(submenu);
++ break;
++ case KEY_RIGHT:
++ case 10: /* ENTER WAS PRESSED */
++ switch (item_tag()) {
++ case 'm':
++ if (single_menu_mode)
++ submenu->data =
++ (void *) (long) !submenu->data;
++ else
++ conf(submenu);
++ break;
++ case 't':
++ if (sym_is_choice(sym) &&
++ sym_get_tristate_value(sym) == yes)
++ conf_choice(submenu);
++ else if (submenu->prompt &&
++ submenu->prompt->type == P_MENU)
++ conf(submenu);
++ else if (res == 10)
++ sym_toggle_tristate_value(sym);
++ break;
++ case 's':
++ conf_string(submenu);
++ break;
++ }
++ break;
++ case 'y':
++ if (item_is_tag('t')) {
++ if (sym_set_tristate_value(sym, yes))
++ break;
++ if (sym_set_tristate_value(sym, mod))
++ btn_dialog(main_window, setmod_text, 0);
++ }
++ break;
++ case 'n':
++ if (item_is_tag('t'))
++ sym_set_tristate_value(sym, no);
++ break;
++ case 'm':
++ if (item_is_tag('t'))
++ sym_set_tristate_value(sym, mod);
++ break;
++ }
++ }
++}
++
++static void conf_message_callback(const char *fmt, va_list ap)
++{
++ char buf[1024];
++
++ vsnprintf(buf, sizeof(buf), fmt, ap);
++ btn_dialog(main_window, buf, 1, "<OK>");
++}
++
++static void show_help(struct menu *menu)
++{
++ struct gstr help;
++
++ if (!menu)
++ return;
++
++ help = str_new();
++ menu_get_ext_help(menu, &help);
++ show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help));
++ str_free(&help);
++}
++
++static void conf_choice(struct menu *menu)
++{
++ const char *prompt = _(menu_get_prompt(menu));
++ struct menu *child = 0;
++ struct symbol *active;
++ int selected_index = 0;
++ int last_top_row = 0;
++ int res, i = 0;
++ struct match_state match_state = {
++ .in_search = 0,
++ .match_direction = MATCH_TINKER_PATTERN_DOWN,
++ .pattern = "",
++ };
++
++ active = sym_get_choice_value(menu->sym);
++ /* this is mostly duplicated from the conf() function. */
++ while (!global_exit) {
++ reset_menu();
++
++ for (i = 0, child = menu->list; child; child = child->next) {
++ if (!show_all_items && !menu_is_visible(child))
++ continue;
++
++ if (child->sym == sym_get_choice_value(menu->sym))
++ item_make(child, ':', "<X> %s",
++ _(menu_get_prompt(child)));
++ else if (child->sym)
++ item_make(child, ':', " %s",
++ _(menu_get_prompt(child)));
++ else
++ item_make(child, ':', "*** %s ***",
++ _(menu_get_prompt(child)));
++
++ if (child->sym == active){
++ last_top_row = top_row(curses_menu);
++ selected_index = i;
++ }
++ i++;
++ }
++ show_menu(prompt ? _(prompt) : _("Choice Menu"),
++ _(radiolist_instructions),
++ selected_index,
++ &last_top_row);
++ while (!global_exit) {
++ if (match_state.in_search) {
++ mvprintw(0, 0, "searching: %s",
++ match_state.pattern);
++ clrtoeol();
++ }
++ refresh_all_windows(main_window);
++ res = wgetch(menu_win(curses_menu));
++ if (!res)
++ break;
++ if (do_match(res, &match_state, &selected_index) == 0) {
++ if (selected_index != -1)
++ center_item(selected_index,
++ &last_top_row);
++ continue;
++ }
++ if (process_special_keys(
++ &res,
++ (struct menu *) item_data()))
++ break;
++ switch (res) {
++ case KEY_DOWN:
++ menu_driver(curses_menu, REQ_DOWN_ITEM);
++ break;
++ case KEY_UP:
++ menu_driver(curses_menu, REQ_UP_ITEM);
++ break;
++ case KEY_NPAGE:
++ menu_driver(curses_menu, REQ_SCR_DPAGE);
++ break;
++ case KEY_PPAGE:
++ menu_driver(curses_menu, REQ_SCR_UPAGE);
++ break;
++ case KEY_HOME:
++ menu_driver(curses_menu, REQ_FIRST_ITEM);
++ break;
++ case KEY_END:
++ menu_driver(curses_menu, REQ_LAST_ITEM);
++ break;
++ case 'h':
++ case '?':
++ show_help((struct menu *) item_data());
++ break;
++ }
++ if (res == 10 || res == 27 || res == ' ' ||
++ res == KEY_LEFT){
++ break;
++ }
++ refresh_all_windows(main_window);
++ }
++ /* if ESC or left */
++ if (res == 27 || res == KEY_LEFT)
++ break;
++
++ child = item_data();
++ if (!child || !menu_is_visible(child) || !child->sym)
++ continue;
++ switch (res) {
++ case ' ':
++ case 10:
++ case KEY_RIGHT:
++ sym_set_tristate_value(child->sym, yes);
++ return;
++ case 'h':
++ case '?':
++ show_help(child);
++ active = child->sym;
++ break;
++ case KEY_EXIT:
++ return;
++ }
++ }
++}
++
++static void conf_string(struct menu *menu)
++{
++ const char *prompt = menu_get_prompt(menu);
++
++ while (1) {
++ int res;
++ const char *heading;
++
++ switch (sym_get_type(menu->sym)) {
++ case S_INT:
++ heading = _(inputbox_instructions_int);
++ break;
++ case S_HEX:
++ heading = _(inputbox_instructions_hex);
++ break;
++ case S_STRING:
++ heading = _(inputbox_instructions_string);
++ break;
++ default:
++ heading = _("Internal nconf error!");
++ }
++ res = dialog_inputbox(main_window,
++ prompt ? _(prompt) : _("Main Menu"),
++ heading,
++ sym_get_string_value(menu->sym),
++ &dialog_input_result,
++ &dialog_input_result_len);
++ switch (res) {
++ case 0:
++ if (sym_set_string_value(menu->sym,
++ dialog_input_result))
++ return;
++ btn_dialog(main_window,
++ _("You have made an invalid entry."), 0);
++ break;
++ case 1:
++ show_help(menu);
++ break;
++ case KEY_EXIT:
++ return;
++ }
++ }
++}
++
++static void conf_load(void)
++{
++ while (1) {
++ int res;
++ res = dialog_inputbox(main_window,
++ NULL, load_config_text,
++ filename,
++ &dialog_input_result,
++ &dialog_input_result_len);
++ switch (res) {
++ case 0:
++ if (!dialog_input_result[0])
++ return;
++ if (!conf_read(dialog_input_result)) {
++ set_config_filename(dialog_input_result);
++ sym_set_change_count(1);
++ return;
++ }
++ btn_dialog(main_window, _("File does not exist!"), 0);
++ break;
++ case 1:
++ show_scroll_win(main_window,
++ _("Load Alternate Configuration"),
++ load_config_help);
++ break;
++ case KEY_EXIT:
++ return;
++ }
++ }
++}
++
++static void conf_save(void)
++{
++ while (1) {
++ int res;
++ res = dialog_inputbox(main_window,
++ NULL, save_config_text,
++ filename,
++ &dialog_input_result,
++ &dialog_input_result_len);
++ switch (res) {
++ case 0:
++ if (!dialog_input_result[0])
++ return;
++ res = conf_write(dialog_input_result);
++ if (!res) {
++ set_config_filename(dialog_input_result);
++ return;
++ }
++ btn_dialog(main_window, _("Can't create file! "
++ "Probably a nonexistent directory."),
++ 1, "<OK>");
++ break;
++ case 1:
++ show_scroll_win(main_window,
++ _("Save Alternate Configuration"),
++ save_config_help);
++ break;
++ case KEY_EXIT:
++ return;
++ }
++ }
++}
++
++void setup_windows(void)
++{
++ int lines, columns;
++
++ getmaxyx(stdscr, lines, columns);
++
++ if (main_window != NULL)
++ delwin(main_window);
++
++ /* set up the menu and menu window */
++ main_window = newwin(lines-2, columns-2, 2, 1);
++ keypad(main_window, TRUE);
++ mwin_max_lines = lines-7;
++ mwin_max_cols = columns-6;
++
++ /* panels order is from bottom to top */
++ new_panel(main_window);
++}
++
++int main(int ac, char **av)
++{
++ int lines, columns;
++ char *mode;
++
++ setlocale(LC_ALL, "");
++ bindtextdomain(PACKAGE, LOCALEDIR);
++ textdomain(PACKAGE);
++
++ conf_parse(av[1]);
++ conf_read(NULL);
++
++ mode = getenv("NCONFIG_MODE");
++ if (mode) {
++ if (!strcasecmp(mode, "single_menu"))
++ single_menu_mode = 1;
++ }
++
++ /* Initialize curses */
++ initscr();
++ /* set color theme */
++ set_colors();
++
++ cbreak();
++ noecho();
++ keypad(stdscr, TRUE);
++ curs_set(0);
++
++ getmaxyx(stdscr, lines, columns);
++ if (columns < 75 || lines < 20) {
++ endwin();
++ printf("Your terminal should have at "
++ "least 20 lines and 75 columns\n");
++ return 1;
++ }
++
++ notimeout(stdscr, FALSE);
++#if NCURSES_REENTRANT
++ set_escdelay(1);
++#else
++ ESCDELAY = 1;
++#endif
++
++ /* set btns menu */
++ curses_menu = new_menu(curses_menu_items);
++ menu_opts_off(curses_menu, O_SHOWDESC);
++ menu_opts_on(curses_menu, O_SHOWMATCH);
++ menu_opts_on(curses_menu, O_ONEVALUE);
++ menu_opts_on(curses_menu, O_NONCYCLIC);
++ menu_opts_on(curses_menu, O_IGNORECASE);
++ set_menu_mark(curses_menu, " ");
++ set_menu_fore(curses_menu, attributes[MAIN_MENU_FORE]);
++ set_menu_back(curses_menu, attributes[MAIN_MENU_BACK]);
++ set_menu_grey(curses_menu, attributes[MAIN_MENU_GREY]);
++
++ set_config_filename(conf_get_configname());
++ setup_windows();
++
++ /* check for KEY_FUNC(1) */
++ if (has_key(KEY_F(1)) == FALSE) {
++ show_scroll_win(main_window,
++ _("Instructions"),
++ _(menu_no_f_instructions));
++ }
++
++ conf_set_message_callback(conf_message_callback);
++ /* do the work */
++ while (!global_exit) {
++ conf(&rootmenu);
++ if (!global_exit && do_exit() == 0)
++ break;
++ }
++ /* ok, we are done */
++ unpost_menu(curses_menu);
++ free_menu(curses_menu);
++ delwin(main_window);
++ clear();
++ refresh();
++ endwin();
++ return 0;
++}
++
+diff -Nur uClibc-0.9.33.2/extra/config/nconf.gui.c uClibc-git/extra/config/nconf.gui.c
+--- uClibc-0.9.33.2/extra/config/nconf.gui.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/nconf.gui.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,656 @@
++/*
++ * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
++ * Released under the terms of the GNU GPL v2.0.
++ *
++ * Derived from menuconfig.
++ *
++ */
++#include "nconf.h"
++
++/* a list of all the different widgets we use */
++attributes_t attributes[ATTR_MAX+1] = {0};
++
++/* available colors:
++ COLOR_BLACK 0
++ COLOR_RED 1
++ COLOR_GREEN 2
++ COLOR_YELLOW 3
++ COLOR_BLUE 4
++ COLOR_MAGENTA 5
++ COLOR_CYAN 6
++ COLOR_WHITE 7
++ */
++static void set_normal_colors(void)
++{
++ init_pair(NORMAL, -1, -1);
++ init_pair(MAIN_HEADING, COLOR_MAGENTA, -1);
++
++ /* FORE is for the selected item */
++ init_pair(MAIN_MENU_FORE, -1, -1);
++ /* BACK for all the rest */
++ init_pair(MAIN_MENU_BACK, -1, -1);
++ init_pair(MAIN_MENU_GREY, -1, -1);
++ init_pair(MAIN_MENU_HEADING, COLOR_GREEN, -1);
++ init_pair(MAIN_MENU_BOX, COLOR_YELLOW, -1);
++
++ init_pair(SCROLLWIN_TEXT, -1, -1);
++ init_pair(SCROLLWIN_HEADING, COLOR_GREEN, -1);
++ init_pair(SCROLLWIN_BOX, COLOR_YELLOW, -1);
++
++ init_pair(DIALOG_TEXT, -1, -1);
++ init_pair(DIALOG_BOX, COLOR_YELLOW, -1);
++ init_pair(DIALOG_MENU_BACK, COLOR_YELLOW, -1);
++ init_pair(DIALOG_MENU_FORE, COLOR_RED, -1);
++
++ init_pair(INPUT_BOX, COLOR_YELLOW, -1);
++ init_pair(INPUT_HEADING, COLOR_GREEN, -1);
++ init_pair(INPUT_TEXT, -1, -1);
++ init_pair(INPUT_FIELD, -1, -1);
++
++ init_pair(FUNCTION_HIGHLIGHT, -1, -1);
++ init_pair(FUNCTION_TEXT, COLOR_YELLOW, -1);
++}
++
++/* available attributes:
++ A_NORMAL Normal display (no highlight)
++ A_STANDOUT Best highlighting mode of the terminal.
++ A_UNDERLINE Underlining
++ A_REVERSE Reverse video
++ A_BLINK Blinking
++ A_DIM Half bright
++ A_BOLD Extra bright or bold
++ A_PROTECT Protected mode
++ A_INVIS Invisible or blank mode
++ A_ALTCHARSET Alternate character set
++ A_CHARTEXT Bit-mask to extract a character
++ COLOR_PAIR(n) Color-pair number n
++ */
++static void normal_color_theme(void)
++{
++ /* automatically add color... */
++#define mkattr(name, attr) do { \
++attributes[name] = attr | COLOR_PAIR(name); } while (0)
++ mkattr(NORMAL, NORMAL);
++ mkattr(MAIN_HEADING, A_BOLD | A_UNDERLINE);
++
++ mkattr(MAIN_MENU_FORE, A_REVERSE);
++ mkattr(MAIN_MENU_BACK, A_NORMAL);
++ mkattr(MAIN_MENU_GREY, A_NORMAL);
++ mkattr(MAIN_MENU_HEADING, A_BOLD);
++ mkattr(MAIN_MENU_BOX, A_NORMAL);
++
++ mkattr(SCROLLWIN_TEXT, A_NORMAL);
++ mkattr(SCROLLWIN_HEADING, A_BOLD);
++ mkattr(SCROLLWIN_BOX, A_BOLD);
++
++ mkattr(DIALOG_TEXT, A_BOLD);
++ mkattr(DIALOG_BOX, A_BOLD);
++ mkattr(DIALOG_MENU_FORE, A_STANDOUT);
++ mkattr(DIALOG_MENU_BACK, A_NORMAL);
++
++ mkattr(INPUT_BOX, A_NORMAL);
++ mkattr(INPUT_HEADING, A_BOLD);
++ mkattr(INPUT_TEXT, A_NORMAL);
++ mkattr(INPUT_FIELD, A_UNDERLINE);
++
++ mkattr(FUNCTION_HIGHLIGHT, A_BOLD);
++ mkattr(FUNCTION_TEXT, A_REVERSE);
++}
++
++static void no_colors_theme(void)
++{
++ /* automatically add highlight, no color */
++#define mkattrn(name, attr) { attributes[name] = attr; }
++
++ mkattrn(NORMAL, NORMAL);
++ mkattrn(MAIN_HEADING, A_BOLD | A_UNDERLINE);
++
++ mkattrn(MAIN_MENU_FORE, A_STANDOUT);
++ mkattrn(MAIN_MENU_BACK, A_NORMAL);
++ mkattrn(MAIN_MENU_GREY, A_NORMAL);
++ mkattrn(MAIN_MENU_HEADING, A_BOLD);
++ mkattrn(MAIN_MENU_BOX, A_NORMAL);
++
++ mkattrn(SCROLLWIN_TEXT, A_NORMAL);
++ mkattrn(SCROLLWIN_HEADING, A_BOLD);
++ mkattrn(SCROLLWIN_BOX, A_BOLD);
++
++ mkattrn(DIALOG_TEXT, A_NORMAL);
++ mkattrn(DIALOG_BOX, A_BOLD);
++ mkattrn(DIALOG_MENU_FORE, A_STANDOUT);
++ mkattrn(DIALOG_MENU_BACK, A_NORMAL);
++
++ mkattrn(INPUT_BOX, A_BOLD);
++ mkattrn(INPUT_HEADING, A_BOLD);
++ mkattrn(INPUT_TEXT, A_NORMAL);
++ mkattrn(INPUT_FIELD, A_UNDERLINE);
++
++ mkattrn(FUNCTION_HIGHLIGHT, A_BOLD);
++ mkattrn(FUNCTION_TEXT, A_REVERSE);
++}
++
++void set_colors()
++{
++ start_color();
++ use_default_colors();
++ set_normal_colors();
++ if (has_colors()) {
++ normal_color_theme();
++ } else {
++ /* give defaults */
++ no_colors_theme();
++ }
++}
++
++
++/* this changes the windows attributes !!! */
++void print_in_middle(WINDOW *win,
++ int starty,
++ int startx,
++ int width,
++ const char *string,
++ chtype color)
++{ int length, x, y;
++ float temp;
++
++
++ if (win == NULL)
++ win = stdscr;
++ getyx(win, y, x);
++ if (startx != 0)
++ x = startx;
++ if (starty != 0)
++ y = starty;
++ if (width == 0)
++ width = 80;
++
++ length = strlen(string);
++ temp = (width - length) / 2;
++ x = startx + (int)temp;
++ (void) wattrset(win, color);
++ mvwprintw(win, y, x, "%s", string);
++ refresh();
++}
++
++int get_line_no(const char *text)
++{
++ int i;
++ int total = 1;
++
++ if (!text)
++ return 0;
++
++ for (i = 0; text[i] != '\0'; i++)
++ if (text[i] == '\n')
++ total++;
++ return total;
++}
++
++const char *get_line(const char *text, int line_no)
++{
++ int i;
++ int lines = 0;
++
++ if (!text)
++ return 0;
++
++ for (i = 0; text[i] != '\0' && lines < line_no; i++)
++ if (text[i] == '\n')
++ lines++;
++ return text+i;
++}
++
++int get_line_length(const char *line)
++{
++ int res = 0;
++ while (*line != '\0' && *line != '\n') {
++ line++;
++ res++;
++ }
++ return res;
++}
++
++/* print all lines to the window. */
++void fill_window(WINDOW *win, const char *text)
++{
++ int x, y;
++ int total_lines = get_line_no(text);
++ int i;
++
++ getmaxyx(win, y, x);
++ /* do not go over end of line */
++ total_lines = min(total_lines, y);
++ for (i = 0; i < total_lines; i++) {
++ char tmp[x+10];
++ const char *line = get_line(text, i);
++ int len = get_line_length(line);
++ strncpy(tmp, line, min(len, x));
++ tmp[len] = '\0';
++ mvwprintw(win, i, 0, "%s", tmp);
++ }
++}
++
++/* get the message, and buttons.
++ * each button must be a char*
++ * return the selected button
++ *
++ * this dialog is used for 2 different things:
++ * 1) show a text box, no buttons.
++ * 2) show a dialog, with horizontal buttons
++ */
++int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
++{
++ va_list ap;
++ char *btn;
++ int btns_width = 0;
++ int msg_lines = 0;
++ int msg_width = 0;
++ int total_width;
++ int win_rows = 0;
++ WINDOW *win;
++ WINDOW *msg_win;
++ WINDOW *menu_win;
++ MENU *menu;
++ ITEM *btns[btn_num+1];
++ int i, x, y;
++ int res = -1;
++
++
++ va_start(ap, btn_num);
++ for (i = 0; i < btn_num; i++) {
++ btn = va_arg(ap, char *);
++ btns[i] = new_item(btn, "");
++ btns_width += strlen(btn)+1;
++ }
++ va_end(ap);
++ btns[btn_num] = NULL;
++
++ /* find the widest line of msg: */
++ msg_lines = get_line_no(msg);
++ for (i = 0; i < msg_lines; i++) {
++ const char *line = get_line(msg, i);
++ int len = get_line_length(line);
++ if (msg_width < len)
++ msg_width = len;
++ }
++
++ total_width = max(msg_width, btns_width);
++ /* place dialog in middle of screen */
++ y = (getmaxy(stdscr)-(msg_lines+4))/2;
++ x = (getmaxx(stdscr)-(total_width+4))/2;
++
++
++ /* create the windows */
++ if (btn_num > 0)
++ win_rows = msg_lines+4;
++ else
++ win_rows = msg_lines+2;
++
++ win = newwin(win_rows, total_width+4, y, x);
++ keypad(win, TRUE);
++ menu_win = derwin(win, 1, btns_width, win_rows-2,
++ 1+(total_width+2-btns_width)/2);
++ menu = new_menu(btns);
++ msg_win = derwin(win, win_rows-2, msg_width, 1,
++ 1+(total_width+2-msg_width)/2);
++
++ set_menu_fore(menu, attributes[DIALOG_MENU_FORE]);
++ set_menu_back(menu, attributes[DIALOG_MENU_BACK]);
++
++ (void) wattrset(win, attributes[DIALOG_BOX]);
++ box(win, 0, 0);
++
++ /* print message */
++ (void) wattrset(msg_win, attributes[DIALOG_TEXT]);
++ fill_window(msg_win, msg);
++
++ set_menu_win(menu, win);
++ set_menu_sub(menu, menu_win);
++ set_menu_format(menu, 1, btn_num);
++ menu_opts_off(menu, O_SHOWDESC);
++ menu_opts_off(menu, O_SHOWMATCH);
++ menu_opts_on(menu, O_ONEVALUE);
++ menu_opts_on(menu, O_NONCYCLIC);
++ set_menu_mark(menu, "");
++ post_menu(menu);
++
++
++ touchwin(win);
++ refresh_all_windows(main_window);
++ while ((res = wgetch(win))) {
++ switch (res) {
++ case KEY_LEFT:
++ menu_driver(menu, REQ_LEFT_ITEM);
++ break;
++ case KEY_RIGHT:
++ menu_driver(menu, REQ_RIGHT_ITEM);
++ break;
++ case 10: /* ENTER */
++ case 27: /* ESCAPE */
++ case ' ':
++ case KEY_F(F_BACK):
++ case KEY_F(F_EXIT):
++ break;
++ }
++ touchwin(win);
++ refresh_all_windows(main_window);
++
++ if (res == 10 || res == ' ') {
++ res = item_index(current_item(menu));
++ break;
++ } else if (res == 27 || res == KEY_F(F_BACK) ||
++ res == KEY_F(F_EXIT)) {
++ res = KEY_EXIT;
++ break;
++ }
++ }
++
++ unpost_menu(menu);
++ free_menu(menu);
++ for (i = 0; i < btn_num; i++)
++ free_item(btns[i]);
++
++ delwin(win);
++ return res;
++}
++
++int dialog_inputbox(WINDOW *main_window,
++ const char *title, const char *prompt,
++ const char *init, char **resultp, int *result_len)
++{
++ int prompt_lines = 0;
++ int prompt_width = 0;
++ WINDOW *win;
++ WINDOW *prompt_win;
++ WINDOW *form_win;
++ PANEL *panel;
++ int i, x, y;
++ int res = -1;
++ int cursor_position = strlen(init);
++ int cursor_form_win;
++ char *result = *resultp;
++
++ if (strlen(init)+1 > *result_len) {
++ *result_len = strlen(init)+1;
++ *resultp = result = realloc(result, *result_len);
++ }
++
++ /* find the widest line of msg: */
++ prompt_lines = get_line_no(prompt);
++ for (i = 0; i < prompt_lines; i++) {
++ const char *line = get_line(prompt, i);
++ int len = get_line_length(line);
++ prompt_width = max(prompt_width, len);
++ }
++
++ if (title)
++ prompt_width = max(prompt_width, strlen(title));
++
++ /* place dialog in middle of screen */
++ y = (getmaxy(stdscr)-(prompt_lines+4))/2;
++ x = (getmaxx(stdscr)-(prompt_width+4))/2;
++
++ strncpy(result, init, *result_len);
++
++ /* create the windows */
++ win = newwin(prompt_lines+6, prompt_width+7, y, x);
++ prompt_win = derwin(win, prompt_lines+1, prompt_width, 2, 2);
++ form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
++ keypad(form_win, TRUE);
++
++ (void) wattrset(form_win, attributes[INPUT_FIELD]);
++
++ (void) wattrset(win, attributes[INPUT_BOX]);
++ box(win, 0, 0);
++ (void) wattrset(win, attributes[INPUT_HEADING]);
++ if (title)
++ mvwprintw(win, 0, 3, "%s", title);
++
++ /* print message */
++ (void) wattrset(prompt_win, attributes[INPUT_TEXT]);
++ fill_window(prompt_win, prompt);
++
++ mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
++ cursor_form_win = min(cursor_position, prompt_width-1);
++ mvwprintw(form_win, 0, 0, "%s",
++ result + cursor_position-cursor_form_win);
++
++ /* create panels */
++ panel = new_panel(win);
++
++ /* show the cursor */
++ curs_set(1);
++
++ touchwin(win);
++ refresh_all_windows(main_window);
++ while ((res = wgetch(form_win))) {
++ int len = strlen(result);
++ switch (res) {
++ case 10: /* ENTER */
++ case 27: /* ESCAPE */
++ case KEY_F(F_HELP):
++ case KEY_F(F_EXIT):
++ case KEY_F(F_BACK):
++ break;
++ case 127:
++ case KEY_BACKSPACE:
++ if (cursor_position > 0) {
++ memmove(&result[cursor_position-1],
++ &result[cursor_position],
++ len-cursor_position+1);
++ cursor_position--;
++ cursor_form_win--;
++ len--;
++ }
++ break;
++ case KEY_DC:
++ if (cursor_position >= 0 && cursor_position < len) {
++ memmove(&result[cursor_position],
++ &result[cursor_position+1],
++ len-cursor_position+1);
++ len--;
++ }
++ break;
++ case KEY_UP:
++ case KEY_RIGHT:
++ if (cursor_position < len) {
++ cursor_position++;
++ cursor_form_win++;
++ }
++ break;
++ case KEY_DOWN:
++ case KEY_LEFT:
++ if (cursor_position > 0) {
++ cursor_position--;
++ cursor_form_win--;
++ }
++ break;
++ case KEY_HOME:
++ cursor_position = 0;
++ cursor_form_win = 0;
++ break;
++ case KEY_END:
++ cursor_position = len;
++ cursor_form_win = min(cursor_position, prompt_width-1);
++ break;
++ default:
++ if ((isgraph(res) || isspace(res))) {
++ /* one for new char, one for '\0' */
++ if (len+2 > *result_len) {
++ *result_len = len+2;
++ *resultp = result = realloc(result,
++ *result_len);
++ }
++ /* insert the char at the proper position */
++ memmove(&result[cursor_position+1],
++ &result[cursor_position],
++ len-cursor_position+1);
++ result[cursor_position] = res;
++ cursor_position++;
++ cursor_form_win++;
++ len++;
++ } else {
++ mvprintw(0, 0, "unknown key: %d\n", res);
++ }
++ break;
++ }
++ if (cursor_form_win < 0)
++ cursor_form_win = 0;
++ else if (cursor_form_win > prompt_width-1)
++ cursor_form_win = prompt_width-1;
++
++ wmove(form_win, 0, 0);
++ wclrtoeol(form_win);
++ mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
++ mvwprintw(form_win, 0, 0, "%s",
++ result + cursor_position-cursor_form_win);
++ wmove(form_win, 0, cursor_form_win);
++ touchwin(win);
++ refresh_all_windows(main_window);
++
++ if (res == 10) {
++ res = 0;
++ break;
++ } else if (res == 27 || res == KEY_F(F_BACK) ||
++ res == KEY_F(F_EXIT)) {
++ res = KEY_EXIT;
++ break;
++ } else if (res == KEY_F(F_HELP)) {
++ res = 1;
++ break;
++ }
++ }
++
++ /* hide the cursor */
++ curs_set(0);
++ del_panel(panel);
++ delwin(prompt_win);
++ delwin(form_win);
++ delwin(win);
++ return res;
++}
++
++/* refresh all windows in the correct order */
++void refresh_all_windows(WINDOW *main_window)
++{
++ update_panels();
++ touchwin(main_window);
++ refresh();
++}
++
++/* layman's scrollable window... */
++void show_scroll_win(WINDOW *main_window,
++ const char *title,
++ const char *text)
++{
++ int res;
++ int total_lines = get_line_no(text);
++ int x, y, lines, columns;
++ int start_x = 0, start_y = 0;
++ int text_lines = 0, text_cols = 0;
++ int total_cols = 0;
++ int win_cols = 0;
++ int win_lines = 0;
++ int i = 0;
++ WINDOW *win;
++ WINDOW *pad;
++ PANEL *panel;
++
++ getmaxyx(stdscr, lines, columns);
++
++ /* find the widest line of msg: */
++ total_lines = get_line_no(text);
++ for (i = 0; i < total_lines; i++) {
++ const char *line = get_line(text, i);
++ int len = get_line_length(line);
++ total_cols = max(total_cols, len+2);
++ }
++
++ /* create the pad */
++ pad = newpad(total_lines+10, total_cols+10);
++ (void) wattrset(pad, attributes[SCROLLWIN_TEXT]);
++ fill_window(pad, text);
++
++ win_lines = min(total_lines+4, lines-2);
++ win_cols = min(total_cols+2, columns-2);
++ text_lines = max(win_lines-4, 0);
++ text_cols = max(win_cols-2, 0);
++
++ /* place window in middle of screen */
++ y = (lines-win_lines)/2;
++ x = (columns-win_cols)/2;
++
++ win = newwin(win_lines, win_cols, y, x);
++ keypad(win, TRUE);
++ /* show the help in the help window, and show the help panel */
++ (void) wattrset(win, attributes[SCROLLWIN_BOX]);
++ box(win, 0, 0);
++ (void) wattrset(win, attributes[SCROLLWIN_HEADING]);
++ mvwprintw(win, 0, 3, " %s ", title);
++ panel = new_panel(win);
++
++ /* handle scrolling */
++ do {
++
++ copywin(pad, win, start_y, start_x, 2, 2, text_lines,
++ text_cols, 0);
++ print_in_middle(win,
++ text_lines+2,
++ 0,
++ text_cols,
++ "<OK>",
++ attributes[DIALOG_MENU_FORE]);
++ wrefresh(win);
++
++ res = wgetch(win);
++ switch (res) {
++ case KEY_NPAGE:
++ case ' ':
++ case 'd':
++ start_y += text_lines-2;
++ break;
++ case KEY_PPAGE:
++ case 'u':
++ start_y -= text_lines+2;
++ break;
++ case KEY_HOME:
++ start_y = 0;
++ break;
++ case KEY_END:
++ start_y = total_lines-text_lines;
++ break;
++ case KEY_DOWN:
++ case 'j':
++ start_y++;
++ break;
++ case KEY_UP:
++ case 'k':
++ start_y--;
++ break;
++ case KEY_LEFT:
++ case 'h':
++ start_x--;
++ break;
++ case KEY_RIGHT:
++ case 'l':
++ start_x++;
++ break;
++ }
++ if (res == 10 || res == 27 || res == 'q' ||
++ res == KEY_F(F_HELP) || res == KEY_F(F_BACK) ||
++ res == KEY_F(F_EXIT))
++ break;
++ if (start_y < 0)
++ start_y = 0;
++ if (start_y >= total_lines-text_lines)
++ start_y = total_lines-text_lines;
++ if (start_x < 0)
++ start_x = 0;
++ if (start_x >= total_cols-text_cols)
++ start_x = total_cols-text_cols;
++ } while (res);
++
++ del_panel(panel);
++ delwin(win);
++ refresh_all_windows(main_window);
++}
+diff -Nur uClibc-0.9.33.2/extra/config/nconf.h uClibc-git/extra/config/nconf.h
+--- uClibc-0.9.33.2/extra/config/nconf.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/nconf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,96 @@
++/*
++ * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
++ * Released under the terms of the GNU GPL v2.0.
++ *
++ * Derived from menuconfig.
++ *
++ */
++
++#include <ctype.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <limits.h>
++#include <stdarg.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <locale.h>
++#include <curses.h>
++#include <menu.h>
++#include <panel.h>
++#include <form.h>
++
++#include <stdio.h>
++#include <time.h>
++#include <sys/time.h>
++
++#include "ncurses.h"
++
++#define max(a, b) ({\
++ typeof(a) _a = a;\
++ typeof(b) _b = b;\
++ _a > _b ? _a : _b; })
++
++#define min(a, b) ({\
++ typeof(a) _a = a;\
++ typeof(b) _b = b;\
++ _a < _b ? _a : _b; })
++
++typedef enum {
++ NORMAL = 1,
++ MAIN_HEADING,
++ MAIN_MENU_BOX,
++ MAIN_MENU_FORE,
++ MAIN_MENU_BACK,
++ MAIN_MENU_GREY,
++ MAIN_MENU_HEADING,
++ SCROLLWIN_TEXT,
++ SCROLLWIN_HEADING,
++ SCROLLWIN_BOX,
++ DIALOG_TEXT,
++ DIALOG_MENU_FORE,
++ DIALOG_MENU_BACK,
++ DIALOG_BOX,
++ INPUT_BOX,
++ INPUT_HEADING,
++ INPUT_TEXT,
++ INPUT_FIELD,
++ FUNCTION_TEXT,
++ FUNCTION_HIGHLIGHT,
++ ATTR_MAX
++} attributes_t;
++extern attributes_t attributes[];
++
++typedef enum {
++ F_HELP = 1,
++ F_SYMBOL = 2,
++ F_INSTS = 3,
++ F_CONF = 4,
++ F_BACK = 5,
++ F_SAVE = 6,
++ F_LOAD = 7,
++ F_SEARCH = 8,
++ F_EXIT = 9,
++} function_key;
++
++void set_colors(void);
++
++/* this changes the windows attributes !!! */
++void print_in_middle(WINDOW *win,
++ int starty,
++ int startx,
++ int width,
++ const char *string,
++ chtype color);
++int get_line_length(const char *line);
++int get_line_no(const char *text);
++const char *get_line(const char *text, int line_no);
++void fill_window(WINDOW *win, const char *text);
++int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
++int dialog_inputbox(WINDOW *main_window,
++ const char *title, const char *prompt,
++ const char *init, char **resultp, int *result_len);
++void refresh_all_windows(WINDOW *main_window);
++void show_scroll_win(WINDOW *main_window,
++ const char *title,
++ const char *text);
+diff -Nur uClibc-0.9.33.2/extra/config/qconf.cc uClibc-git/extra/config/qconf.cc
+--- uClibc-0.9.33.2/extra/config/qconf.cc 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/qconf.cc 2014-02-03 12:32:56.000000000 +0100
+@@ -3,24 +3,43 @@
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+-#include <qapplication.h>
++#include <qglobal.h>
++
++#if QT_VERSION < 0x040000
++#include <stddef.h>
+ #include <qmainwindow.h>
++#include <qvbox.h>
++#include <qvaluelist.h>
++#include <qtextbrowser.h>
++#include <qaction.h>
++#include <qheader.h>
++#include <qfiledialog.h>
++#include <qdragobject.h>
++#include <qpopupmenu.h>
++#else
++#include <q3mainwindow.h>
++#include <q3vbox.h>
++#include <q3valuelist.h>
++#include <q3textbrowser.h>
++#include <q3action.h>
++#include <q3header.h>
++#include <q3filedialog.h>
++#include <q3dragobject.h>
++#include <q3popupmenu.h>
++#endif
++
++#include <qapplication.h>
++#include <qdesktopwidget.h>
+ #include <qtoolbar.h>
+ #include <qlayout.h>
+-#include <qvbox.h>
+ #include <qsplitter.h>
+-#include <qlistview.h>
+-#include <qtextbrowser.h>
+ #include <qlineedit.h>
+ #include <qlabel.h>
+ #include <qpushbutton.h>
+ #include <qmenubar.h>
+ #include <qmessagebox.h>
+-#include <qaction.h>
+-#include <qheader.h>
+-#include <qfiledialog.h>
+-#include <qdragobject.h>
+ #include <qregexp.h>
++#include <qevent.h>
+
+ #include <stdlib.h>
+
+@@ -38,7 +57,7 @@
+ static QApplication *configApp;
+ static ConfigSettings *configSettings;
+
+-QAction *ConfigMainWindow::saveAction;
++Q3Action *ConfigMainWindow::saveAction;
+
+ static inline QString qgettext(const char* str)
+ {
+@@ -53,15 +72,14 @@
+ /**
+ * Reads a list of integer values from the application settings.
+ */
+-QValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
++Q3ValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
+ {
+- QValueList<int> result;
++ Q3ValueList<int> result;
+ QStringList entryList = readListEntry(key, ok);
+- if (ok) {
+- QStringList::Iterator it;
+- for (it = entryList.begin(); it != entryList.end(); ++it)
+- result.push_back((*it).toInt());
+- }
++ QStringList::Iterator it;
++
++ for (it = entryList.begin(); it != entryList.end(); ++it)
++ result.push_back((*it).toInt());
+
+ return result;
+ }
+@@ -69,10 +87,10 @@
+ /**
+ * Writes a list of integer values to the application settings.
+ */
+-bool ConfigSettings::writeSizes(const QString& key, const QValueList<int>& value)
++bool ConfigSettings::writeSizes(const QString& key, const Q3ValueList<int>& value)
+ {
+ QStringList stringList;
+- QValueList<int>::ConstIterator it;
++ Q3ValueList<int>::ConstIterator it;
+
+ for (it = value.begin(); it != value.end(); ++it)
+ stringList.push_back(QString::number(*it));
+@@ -80,7 +98,6 @@
+ }
+
+
+-#if QT_VERSION >= 300
+ /*
+ * set the new data
+ * TODO check the value
+@@ -91,7 +108,6 @@
+ sym_set_string_value(menu->sym, text(dataColIdx).latin1());
+ listView()->updateList(this);
+ }
+-#endif
+
+ /*
+ * update the displayed of a menu entry
+@@ -148,7 +164,7 @@
+ case S_TRISTATE:
+ char ch;
+
+- if (!sym_is_changable(sym) && !list->showAll) {
++ if (!sym_is_changable(sym) && list->optMode == normalOpt) {
+ setPixmap(promptColIdx, 0);
+ setText(noColIdx, QString::null);
+ setText(modColIdx, QString::null);
+@@ -195,11 +211,9 @@
+
+ data = sym_get_string_value(sym);
+
+-#if QT_VERSION >= 300
+ int i = list->mapIdx(dataColIdx);
+ if (i >= 0)
+ setRenameEnabled(i, TRUE);
+-#endif
+ setText(dataColIdx, data);
+ if (type == S_STRING)
+ prompt = QString("%1: %2").arg(prompt).arg(data);
+@@ -297,10 +311,10 @@
+ void ConfigLineEdit::keyPressEvent(QKeyEvent* e)
+ {
+ switch (e->key()) {
+- case Key_Escape:
++ case Qt::Key_Escape:
+ break;
+- case Key_Return:
+- case Key_Enter:
++ case Qt::Key_Return:
++ case Qt::Key_Enter:
+ sym_set_string_value(item->menu->sym, text().latin1());
+ parent()->updateList(item);
+ break;
+@@ -319,7 +333,7 @@
+ symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no),
+ choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no),
+ menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), voidPix(xpm_void),
+- showAll(false), showName(false), showRange(false), showData(false),
++ showName(false), showRange(false), showData(false), optMode(normalOpt),
+ rootEntry(0), headerPopup(0)
+ {
+ int i;
+@@ -336,10 +350,10 @@
+
+ if (name) {
+ configSettings->beginGroup(name);
+- showAll = configSettings->readBoolEntry("/showAll", false);
+ showName = configSettings->readBoolEntry("/showName", false);
+ showRange = configSettings->readBoolEntry("/showRange", false);
+ showData = configSettings->readBoolEntry("/showData", false);
++ optMode = (enum optionMode)configSettings->readNumEntry("/optionMode", false);
+ configSettings->endGroup();
+ connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
+ }
+@@ -351,6 +365,17 @@
+ reinit();
+ }
+
++bool ConfigList::menuSkip(struct menu *menu)
++{
++ if (optMode == normalOpt && menu_is_visible(menu))
++ return false;
++ if (optMode == promptOpt && menu_has_prompt(menu))
++ return false;
++ if (optMode == allOpt)
++ return false;
++ return true;
++}
++
+ void ConfigList::reinit(void)
+ {
+ removeColumn(dataColIdx);
+@@ -379,7 +404,7 @@
+ configSettings->writeEntry("/showName", showName);
+ configSettings->writeEntry("/showRange", showRange);
+ configSettings->writeEntry("/showData", showData);
+- configSettings->writeEntry("/showAll", showAll);
++ configSettings->writeEntry("/optionMode", (int)optMode);
+ configSettings->endGroup();
+ }
+ }
+@@ -421,7 +446,7 @@
+ if (!rootEntry) {
+ if (mode != listMode)
+ goto update;
+- QListViewItemIterator it(this);
++ Q3ListViewItemIterator it(this);
+ ConfigItem* item;
+
+ for (; it.current(); ++it) {
+@@ -516,11 +541,9 @@
+ case S_INT:
+ case S_HEX:
+ case S_STRING:
+-#if QT_VERSION >= 300
+ if (colMap[dataColIdx] >= 0)
+ item->startRename(colMap[dataColIdx]);
+ else
+-#endif
+ parent()->lineEdit->show(item);
+ break;
+ }
+@@ -552,7 +575,7 @@
+ return;
+ setRootMenu(menu_get_parent_menu(rootEntry->parent));
+
+- QListViewItemIterator it(this);
++ Q3ListViewItemIterator it(this);
+ for (; (item = (ConfigItem*)it.current()); it++) {
+ if (item->menu == oldroot) {
+ setCurrentItem(item);
+@@ -605,7 +628,7 @@
+ }
+
+ visible = menu_is_visible(child);
+- if (showAll || visible) {
++ if (!menuSkip(child)) {
+ if (!child->sym && !child->list && !child->prompt)
+ continue;
+ if (!item || item->menu != child)
+@@ -634,12 +657,12 @@
+
+ void ConfigList::keyPressEvent(QKeyEvent* ev)
+ {
+- QListViewItem* i = currentItem();
++ Q3ListViewItem* i = currentItem();
+ ConfigItem* item;
+ struct menu *menu;
+ enum prop_type type;
+
+- if (ev->key() == Key_Escape && mode != fullMode && mode != listMode) {
++ if (ev->key() == Qt::Key_Escape && mode != fullMode && mode != listMode) {
+ emit parentSelected();
+ ev->accept();
+ return;
+@@ -652,8 +675,8 @@
+ item = (ConfigItem*)i;
+
+ switch (ev->key()) {
+- case Key_Return:
+- case Key_Enter:
++ case Qt::Key_Return:
++ case Qt::Key_Enter:
+ if (item->goParent) {
+ emit parentSelected();
+ break;
+@@ -667,16 +690,16 @@
+ emit menuSelected(menu);
+ break;
+ }
+- case Key_Space:
++ case Qt::Key_Space:
+ changeValue(item);
+ break;
+- case Key_N:
++ case Qt::Key_N:
+ setValue(item, no);
+ break;
+- case Key_M:
++ case Qt::Key_M:
+ setValue(item, mod);
+ break;
+- case Key_Y:
++ case Qt::Key_Y:
+ setValue(item, yes);
+ break;
+ default:
+@@ -800,10 +823,10 @@
+ {
+ if (e->y() <= header()->geometry().bottom()) {
+ if (!headerPopup) {
+- QAction *action;
++ Q3Action *action;
+
+- headerPopup = new QPopupMenu(this);
+- action = new QAction(NULL, _("Show Name"), 0, this);
++ headerPopup = new Q3PopupMenu(this);
++ action = new Q3Action(NULL, _("Show Name"), 0, this);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)),
+ parent(), SLOT(setShowName(bool)));
+@@ -811,7 +834,7 @@
+ action, SLOT(setOn(bool)));
+ action->setOn(showName);
+ action->addTo(headerPopup);
+- action = new QAction(NULL, _("Show Range"), 0, this);
++ action = new Q3Action(NULL, _("Show Range"), 0, this);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)),
+ parent(), SLOT(setShowRange(bool)));
+@@ -819,7 +842,7 @@
+ action, SLOT(setOn(bool)));
+ action->setOn(showRange);
+ action->addTo(headerPopup);
+- action = new QAction(NULL, _("Show Data"), 0, this);
++ action = new Q3Action(NULL, _("Show Data"), 0, this);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)),
+ parent(), SLOT(setShowData(bool)));
+@@ -834,7 +857,10 @@
+ e->ignore();
+ }
+
+-ConfigView* ConfigView::viewList;
++ConfigView*ConfigView::viewList;
++QAction *ConfigView::showNormalAction;
++QAction *ConfigView::showAllAction;
++QAction *ConfigView::showPromptAction;
+
+ ConfigView::ConfigView(QWidget* parent, const char *name)
+ : Parent(parent, name)
+@@ -859,13 +885,16 @@
+ }
+ }
+
+-void ConfigView::setShowAll(bool b)
++void ConfigView::setOptionMode(QAction *act)
+ {
+- if (list->showAll != b) {
+- list->showAll = b;
+- list->updateListAll();
+- emit showAllChanged(b);
+- }
++ if (act == showNormalAction)
++ list->optMode = normalOpt;
++ else if (act == showAllAction)
++ list->optMode = allOpt;
++ else
++ list->optMode = promptOpt;
++
++ list->updateListAll();
+ }
+
+ void ConfigView::setShowName(bool b)
+@@ -897,7 +926,7 @@
+
+ void ConfigList::setAllOpen(bool open)
+ {
+- QListViewItemIterator it(this);
++ Q3ListViewItemIterator it(this);
+
+ for (; it.current(); it++)
+ it.current()->setOpen(open);
+@@ -920,7 +949,7 @@
+ }
+
+ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
+- : Parent(parent, name), menu(0), sym(0)
++ : Parent(parent, name), sym(0), _menu(0)
+ {
+ if (name) {
+ configSettings->beginGroup(name);
+@@ -943,7 +972,7 @@
+ {
+ if (_showDebug != b) {
+ _showDebug = b;
+- if (menu)
++ if (_menu)
+ menuInfo();
+ else if (sym)
+ symbolInfo();
+@@ -953,44 +982,16 @@
+
+ void ConfigInfoView::setInfo(struct menu *m)
+ {
+- if (menu == m)
++ if (_menu == m)
+ return;
+- menu = m;
++ _menu = m;
+ sym = NULL;
+- if (!menu)
++ if (!_menu)
+ clear();
+ else
+ menuInfo();
+ }
+
+-void ConfigInfoView::setSource(const QString& name)
+-{
+- const char *p = name.latin1();
+-
+- menu = NULL;
+- sym = NULL;
+-
+- switch (p[0]) {
+- case 'm':
+- struct menu *m;
+-
+- if (sscanf(p, "m%p", &m) == 1 && menu != m) {
+- menu = m;
+- menuInfo();
+- emit menuSelected(menu);
+- }
+- break;
+- case 's':
+- struct symbol *s;
+-
+- if (sscanf(p, "s%p", &s) == 1 && sym != s) {
+- sym = s;
+- symbolInfo();
+- }
+- break;
+- }
+-}
+-
+ void ConfigInfoView::symbolInfo(void)
+ {
+ QString str;
+@@ -1012,11 +1013,11 @@
+ struct symbol* sym;
+ QString head, debug, help;
+
+- sym = menu->sym;
++ sym = _menu->sym;
+ if (sym) {
+- if (menu->prompt) {
++ if (_menu->prompt) {
+ head += "<big><b>";
+- head += print_filter(_(menu->prompt->text));
++ head += print_filter(_(_menu->prompt->text));
+ head += "</b></big>";
+ if (sym->name) {
+ head += " (";
+@@ -1041,26 +1042,24 @@
+ if (showDebug())
+ debug = debug_info(sym);
+
+- help = menu_get_help(menu);
+- /* Gettextize if the help text not empty */
+- if (help.isEmpty())
+- help = print_filter(menu_get_help(menu));
+- else
+- help = print_filter(_(menu_get_help(menu)));
+- } else if (menu->prompt) {
++ struct gstr help_gstr = str_new();
++ menu_get_ext_help(_menu, &help_gstr);
++ help = print_filter(str_get(&help_gstr));
++ str_free(&help_gstr);
++ } else if (_menu->prompt) {
+ head += "<big><b>";
+- head += print_filter(_(menu->prompt->text));
++ head += print_filter(_(_menu->prompt->text));
+ head += "</b></big><br><br>";
+ if (showDebug()) {
+- if (menu->prompt->visible.expr) {
++ if (_menu->prompt->visible.expr) {
+ debug += "&nbsp;&nbsp;dep: ";
+- expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
++ expr_print(_menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
+ debug += "<br><br>";
+ }
+ }
+ }
+ if (showDebug())
+- debug += QString().sprintf("defined at %s:%d<br><br>", menu->file->name, menu->lineno);
++ debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
+
+ setText(head + debug + help);
+ }
+@@ -1163,10 +1162,10 @@
+ *text += str2;
+ }
+
+-QPopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
++Q3PopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
+ {
+- QPopupMenu* popup = Parent::createPopupMenu(pos);
+- QAction* action = new QAction(NULL, _("Show Debug Info"), 0, popup);
++ Q3PopupMenu* popup = Parent::createPopupMenu(pos);
++ Q3Action* action = new Q3Action(NULL, _("Show Debug Info"), 0, popup);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool)));
+ connect(this, SIGNAL(showDebugChanged(bool)), action, SLOT(setOn(bool)));
+@@ -1199,7 +1198,7 @@
+ layout1->addLayout(layout2);
+
+ split = new QSplitter(this);
+- split->setOrientation(QSplitter::Vertical);
++ split->setOrientation(Qt::Vertical);
+ list = new ConfigView(split, name);
+ list->list->mode = listMode;
+ info = new ConfigInfoView(split, name);
+@@ -1223,7 +1222,7 @@
+ y = configSettings->readNumEntry("/window y", 0, &ok);
+ if (ok)
+ move(x, y);
+- QValueList<int> sizes = configSettings->readSizes("/split", &ok);
++ Q3ValueList<int> sizes = configSettings->readSizes("/split", &ok);
+ if (ok)
+ split->setSizes(sizes);
+ configSettings->endGroup();
+@@ -1275,9 +1274,15 @@
+ int x, y, width, height;
+ char title[256];
+
+- QWidget *d = configApp->desktop();
+- snprintf(title, sizeof(title), _("uClibc v%s Configuration"),
+- getenv("VERSION"));
++ QDesktopWidget *d = configApp->desktop();
++ snprintf(title, sizeof(title), "%s%s",
++ rootmenu.prompt->text,
++#if QT_VERSION < 0x040000
++ " (Qt3)"
++#else
++ ""
++#endif
++ );
+ setCaption(title);
+
+ width = configSettings->readNumEntry("/window width", d->width() - 64);
+@@ -1290,14 +1295,14 @@
+ move(x, y);
+
+ split1 = new QSplitter(this);
+- split1->setOrientation(QSplitter::Horizontal);
++ split1->setOrientation(Qt::Horizontal);
+ setCentralWidget(split1);
+
+ menuView = new ConfigView(split1, "menu");
+ menuList = menuView->list;
+
+ split2 = new QSplitter(split1);
+- split2->setOrientation(QSplitter::Vertical);
++ split2->setOrientation(Qt::Vertical);
+
+ // create config tree
+ configView = new ConfigView(split2, "config");
+@@ -1310,60 +1315,79 @@
+ configList->setFocus();
+
+ menu = menuBar();
+- toolBar = new QToolBar("Tools", this);
++ toolBar = new Q3ToolBar("Tools", this);
+
+- backAction = new QAction("Back", QPixmap(xpm_back), _("Back"), 0, this);
++ backAction = new Q3Action("Back", QPixmap(xpm_back), _("Back"), 0, this);
+ connect(backAction, SIGNAL(activated()), SLOT(goBack()));
+ backAction->setEnabled(FALSE);
+- QAction *quitAction = new QAction("Quit", _("&Quit"), CTRL+Key_Q, this);
++ Q3Action *quitAction = new Q3Action("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
+ connect(quitAction, SIGNAL(activated()), SLOT(close()));
+- QAction *loadAction = new QAction("Load", QPixmap(xpm_load), _("&Load"), CTRL+Key_L, this);
++ Q3Action *loadAction = new Q3Action("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
+ connect(loadAction, SIGNAL(activated()), SLOT(loadConfig()));
+- saveAction = new QAction("Save", QPixmap(xpm_save), _("&Save"), CTRL+Key_S, this);
++ saveAction = new Q3Action("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
+ connect(saveAction, SIGNAL(activated()), SLOT(saveConfig()));
+ conf_set_changed_callback(conf_changed);
+ // Set saveAction's initial state
+ conf_changed();
+- QAction *saveAsAction = new QAction("Save As...", _("Save &As..."), 0, this);
++ Q3Action *saveAsAction = new Q3Action("Save As...", _("Save &As..."), 0, this);
+ connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs()));
+- QAction *searchAction = new QAction("Find", _("&Find"), CTRL+Key_F, this);
++ Q3Action *searchAction = new Q3Action("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
+ connect(searchAction, SIGNAL(activated()), SLOT(searchConfig()));
+- QAction *singleViewAction = new QAction("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
++ Q3Action *singleViewAction = new Q3Action("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
+ connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView()));
+- QAction *splitViewAction = new QAction("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
++ Q3Action *splitViewAction = new Q3Action("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
+ connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView()));
+- QAction *fullViewAction = new QAction("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
++ Q3Action *fullViewAction = new Q3Action("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
+ connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView()));
+
+- QAction *showNameAction = new QAction(NULL, _("Show Name"), 0, this);
++ Q3Action *showNameAction = new Q3Action(NULL, _("Show Name"), 0, this);
+ showNameAction->setToggleAction(TRUE);
+ connect(showNameAction, SIGNAL(toggled(bool)), configView, SLOT(setShowName(bool)));
+ connect(configView, SIGNAL(showNameChanged(bool)), showNameAction, SLOT(setOn(bool)));
+ showNameAction->setOn(configView->showName());
+- QAction *showRangeAction = new QAction(NULL, _("Show Range"), 0, this);
++ Q3Action *showRangeAction = new Q3Action(NULL, _("Show Range"), 0, this);
+ showRangeAction->setToggleAction(TRUE);
+ connect(showRangeAction, SIGNAL(toggled(bool)), configView, SLOT(setShowRange(bool)));
+ connect(configView, SIGNAL(showRangeChanged(bool)), showRangeAction, SLOT(setOn(bool)));
+ showRangeAction->setOn(configList->showRange);
+- QAction *showDataAction = new QAction(NULL, _("Show Data"), 0, this);
++ Q3Action *showDataAction = new Q3Action(NULL, _("Show Data"), 0, this);
+ showDataAction->setToggleAction(TRUE);
+ connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
+ connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
+ showDataAction->setOn(configList->showData);
+- QAction *showAllAction = new QAction(NULL, _("Show All Options"), 0, this);
+- showAllAction->setToggleAction(TRUE);
+- connect(showAllAction, SIGNAL(toggled(bool)), configView, SLOT(setShowAll(bool)));
+- connect(showAllAction, SIGNAL(toggled(bool)), menuView, SLOT(setShowAll(bool)));
+- showAllAction->setOn(configList->showAll);
+- QAction *showDebugAction = new QAction(NULL, _("Show Debug Info"), 0, this);
++
++ QActionGroup *optGroup = new QActionGroup(this);
++ optGroup->setExclusive(TRUE);
++ connect(optGroup, SIGNAL(selected(QAction *)), configView,
++ SLOT(setOptionMode(QAction *)));
++ connect(optGroup, SIGNAL(selected(QAction *)), menuView,
++ SLOT(setOptionMode(QAction *)));
++
++#if QT_VERSION >= 0x040000
++ configView->showNormalAction = new QAction(_("Show Normal Options"), optGroup);
++ configView->showAllAction = new QAction(_("Show All Options"), optGroup);
++ configView->showPromptAction = new QAction(_("Show Prompt Options"), optGroup);
++#else
++ configView->showNormalAction = new QAction(_("Show Normal Options"), 0, optGroup);
++ configView->showAllAction = new QAction(_("Show All Options"), 0, optGroup);
++ configView->showPromptAction = new QAction(_("Show Prompt Options"), 0, optGroup);
++#endif
++ configView->showNormalAction->setToggleAction(TRUE);
++ configView->showNormalAction->setOn(configList->optMode == normalOpt);
++ configView->showAllAction->setToggleAction(TRUE);
++ configView->showAllAction->setOn(configList->optMode == allOpt);
++ configView->showPromptAction->setToggleAction(TRUE);
++ configView->showPromptAction->setOn(configList->optMode == promptOpt);
++
++ Q3Action *showDebugAction = new Q3Action(NULL, _("Show Debug Info"), 0, this);
+ showDebugAction->setToggleAction(TRUE);
+ connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
+ connect(helpText, SIGNAL(showDebugChanged(bool)), showDebugAction, SLOT(setOn(bool)));
+ showDebugAction->setOn(helpText->showDebug());
+
+- QAction *showIntroAction = new QAction(NULL, _("Introduction"), 0, this);
++ Q3Action *showIntroAction = new Q3Action(NULL, _("Introduction"), 0, this);
+ connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro()));
+- QAction *showAboutAction = new QAction(NULL, _("About"), 0, this);
++ Q3Action *showAboutAction = new Q3Action(NULL, _("About"), 0, this);
+ connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout()));
+
+ // init tool bar
+@@ -1377,7 +1401,7 @@
+ fullViewAction->addTo(toolBar);
+
+ // create config menu
+- QPopupMenu* config = new QPopupMenu(this);
++ Q3PopupMenu* config = new Q3PopupMenu(this);
+ menu->insertItem(_("&File"), config);
+ loadAction->addTo(config);
+ saveAction->addTo(config);
+@@ -1386,22 +1410,22 @@
+ quitAction->addTo(config);
+
+ // create edit menu
+- QPopupMenu* editMenu = new QPopupMenu(this);
++ Q3PopupMenu* editMenu = new Q3PopupMenu(this);
+ menu->insertItem(_("&Edit"), editMenu);
+ searchAction->addTo(editMenu);
+
+ // create options menu
+- QPopupMenu* optionMenu = new QPopupMenu(this);
++ Q3PopupMenu* optionMenu = new Q3PopupMenu(this);
+ menu->insertItem(_("&Option"), optionMenu);
+ showNameAction->addTo(optionMenu);
+ showRangeAction->addTo(optionMenu);
+ showDataAction->addTo(optionMenu);
+ optionMenu->insertSeparator();
+- showAllAction->addTo(optionMenu);
+- showDebugAction->addTo(optionMenu);
++ optGroup->addTo(optionMenu);
++ optionMenu->insertSeparator();
+
+ // create help menu
+- QPopupMenu* helpMenu = new QPopupMenu(this);
++ Q3PopupMenu* helpMenu = new Q3PopupMenu(this);
+ menu->insertSeparator();
+ menu->insertItem(_("&Help"), helpMenu);
+ showIntroAction->addTo(helpMenu);
+@@ -1436,7 +1460,7 @@
+ showSplitView();
+
+ // UI setup done, restore splitter positions
+- QValueList<int> sizes = configSettings->readSizes("/split1", &ok);
++ Q3ValueList<int> sizes = configSettings->readSizes("/split1", &ok);
+ if (ok)
+ split1->setSizes(sizes);
+
+@@ -1447,7 +1471,7 @@
+
+ void ConfigMainWindow::loadConfig(void)
+ {
+- QString s = QFileDialog::getOpenFileName(".config", NULL, this);
++ QString s = Q3FileDialog::getOpenFileName(conf_get_configname(), NULL, this);
+ if (s.isNull())
+ return;
+ if (conf_read(QFile::encodeName(s)))
+@@ -1455,19 +1479,21 @@
+ ConfigView::updateListAll();
+ }
+
+-void ConfigMainWindow::saveConfig(void)
++bool ConfigMainWindow::saveConfig(void)
+ {
+- if (conf_write(NULL))
++ if (conf_write(NULL)) {
+ QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
++ return false;
++ }
++ return true;
+ }
+
+ void ConfigMainWindow::saveConfigAs(void)
+ {
+- QString s = QFileDialog::getSaveFileName(".config", NULL, this);
++ QString s = Q3FileDialog::getSaveFileName(conf_get_configname(), NULL, this);
+ if (s.isNull())
+ return;
+- if (conf_write(QFile::encodeName(s)))
+- QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
++ saveConfig();
+ }
+
+ void ConfigMainWindow::searchConfig(void)
+@@ -1492,7 +1518,7 @@
+ ConfigList* list = NULL;
+ ConfigItem* item;
+
+- if (!menu_is_visible(menu) && !configView->showAll())
++ if (configList->menuSkip(menu))
+ return;
+
+ switch (configList->mode) {
+@@ -1524,6 +1550,8 @@
+ case fullMode:
+ list = configList;
+ break;
++ default:
++ break;
+ }
+
+ if (list) {
+@@ -1618,7 +1646,11 @@
+ mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit"));
+ switch (mb.exec()) {
+ case QMessageBox::Yes:
+- conf_write(NULL);
++ if (saveConfig())
++ e->accept();
++ else
++ e->ignore();
++ break;
+ case QMessageBox::No:
+ e->accept();
+ break;
+@@ -1630,7 +1662,7 @@
+
+ void ConfigMainWindow::showIntro(void)
+ {
+- static const QString str = _("Welcome to the qconf graphical configuration tool for uClibc.\n\n"
++ static const QString str = _("Welcome to the qconf graphical configuration tool.\n\n"
+ "For each option, a blank box indicates the feature is disabled, a check\n"
+ "indicates it is enabled, and a dot indicates that it is to be compiled\n"
+ "as a module. Clicking on the box will cycle through the three states.\n\n"
+@@ -1648,7 +1680,7 @@
+ void ConfigMainWindow::showAbout(void)
+ {
+ static const QString str = _("qconf is Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>.\n\n"
+- "Bug reports and feature request can also be entered at https://bugs.uClibc.org/\n");
++ "Bug reports and feature request can also be entered at http://bugs.uClibc.org/\n");
+
+ QMessageBox::information(this, "qconf", str);
+ }
+@@ -1673,6 +1705,9 @@
+ case fullMode :
+ entry = "full";
+ break;
++
++ default:
++ break;
+ }
+ configSettings->writeEntry("/listMode", entry);
+
+@@ -1718,10 +1753,6 @@
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+-#ifndef LKC_DIRECT_LINK
+- kconfig_load();
+-#endif
+-
+ progname = av[0];
+ configApp = new QApplication(ac, av);
+ if (ac > 1 && av[1][0] == '-') {
+diff -Nur uClibc-0.9.33.2/extra/config/qconf.h uClibc-git/extra/config/qconf.h
+--- uClibc-0.9.33.2/extra/config/qconf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/qconf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -3,26 +3,25 @@
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
++#if QT_VERSION < 0x040000
+ #include <qlistview.h>
+-#if QT_VERSION >= 300
+-#include <qsettings.h>
+ #else
+-class QSettings {
+-public:
+- void beginGroup(const QString& group) { }
+- void endGroup(void) { }
+- bool readBoolEntry(const QString& key, bool def = FALSE, bool* ok = 0) const
+- { if (ok) *ok = FALSE; return def; }
+- int readNumEntry(const QString& key, int def = 0, bool* ok = 0) const
+- { if (ok) *ok = FALSE; return def; }
+- QString readEntry(const QString& key, const QString& def = QString::null, bool* ok = 0) const
+- { if (ok) *ok = FALSE; return def; }
+- QStringList readListEntry(const QString& key, bool* ok = 0) const
+- { if (ok) *ok = FALSE; return QStringList(); }
+- template <class t>
+- bool writeEntry(const QString& key, t value)
+- { return TRUE; }
+-};
++#include <q3listview.h>
++#endif
++#include <qsettings.h>
++
++#if QT_VERSION < 0x040000
++#define Q3ValueList QValueList
++#define Q3PopupMenu QPopupMenu
++#define Q3ListView QListView
++#define Q3ListViewItem QListViewItem
++#define Q3VBox QVBox
++#define Q3TextBrowser QTextBrowser
++#define Q3MainWindow QMainWindow
++#define Q3Action QAction
++#define Q3ToolBar QToolBar
++#define Q3ListViewItemIterator QListViewItemIterator
++#define Q3FileDialog QFileDialog
+ #endif
+
+ class ConfigView;
+@@ -31,11 +30,10 @@
+ class ConfigLineEdit;
+ class ConfigMainWindow;
+
+-
+ class ConfigSettings : public QSettings {
+ public:
+- QValueList<int> readSizes(const QString& key, bool *ok);
+- bool writeSizes(const QString& key, const QValueList<int>& value);
++ Q3ValueList<int> readSizes(const QString& key, bool *ok);
++ bool writeSizes(const QString& key, const Q3ValueList<int>& value);
+ };
+
+ enum colIdx {
+@@ -44,10 +42,13 @@
+ enum listMode {
+ singleMode, menuMode, symbolMode, fullMode, listMode
+ };
++enum optionMode {
++ normalOpt = 0, allOpt, promptOpt
++};
+
+-class ConfigList : public QListView {
++class ConfigList : public Q3ListView {
+ Q_OBJECT
+- typedef class QListView Parent;
++ typedef class Q3ListView Parent;
+ public:
+ ConfigList(ConfigView* p, const char *name = 0);
+ void reinit(void);
+@@ -115,6 +116,8 @@
+ void setAllOpen(bool open);
+ void setParentMenu(void);
+
++ bool menuSkip(struct menu *);
++
+ template <class P>
+ void updateMenuList(P*, struct menu*);
+
+@@ -124,22 +127,23 @@
+ QPixmap choiceYesPix, choiceNoPix;
+ QPixmap menuPix, menuInvPix, menuBackPix, voidPix;
+
+- bool showAll, showName, showRange, showData;
++ bool showName, showRange, showData;
+ enum listMode mode;
++ enum optionMode optMode;
+ struct menu *rootEntry;
+ QColorGroup disabledColorGroup;
+ QColorGroup inactivedColorGroup;
+- QPopupMenu* headerPopup;
++ Q3PopupMenu* headerPopup;
+
+ private:
+ int colMap[colNr];
+ int colRevMap[colNr];
+ };
+
+-class ConfigItem : public QListViewItem {
+- typedef class QListViewItem Parent;
++class ConfigItem : public Q3ListViewItem {
++ typedef class Q3ListViewItem Parent;
+ public:
+- ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v)
++ ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
+ : Parent(parent, after), menu(m), visible(v), goParent(false)
+ {
+ init();
+@@ -149,16 +153,14 @@
+ {
+ init();
+ }
+- ConfigItem(QListView *parent, ConfigItem *after, bool v)
++ ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
+ : Parent(parent, after), menu(0), visible(v), goParent(true)
+ {
+ init();
+ }
+ ~ConfigItem(void);
+ void init(void);
+-#if QT_VERSION >= 300
+ void okRename(int col);
+-#endif
+ void updateMenu(void);
+ void testUpdateMenu(bool v);
+ ConfigList* listView() const
+@@ -213,26 +215,24 @@
+ ConfigItem *item;
+ };
+
+-class ConfigView : public QVBox {
++class ConfigView : public Q3VBox {
+ Q_OBJECT
+- typedef class QVBox Parent;
++ typedef class Q3VBox Parent;
+ public:
+ ConfigView(QWidget* parent, const char *name = 0);
+ ~ConfigView(void);
+ static void updateList(ConfigItem* item);
+ static void updateListAll(void);
+
+- bool showAll(void) const { return list->showAll; }
+ bool showName(void) const { return list->showName; }
+ bool showRange(void) const { return list->showRange; }
+ bool showData(void) const { return list->showData; }
+ public slots:
+- void setShowAll(bool);
+ void setShowName(bool);
+ void setShowRange(bool);
+ void setShowData(bool);
++ void setOptionMode(QAction *);
+ signals:
+- void showAllChanged(bool);
+ void showNameChanged(bool);
+ void showRangeChanged(bool);
+ void showDataChanged(bool);
+@@ -242,11 +242,15 @@
+
+ static ConfigView* viewList;
+ ConfigView* nextView;
++
++ static QAction *showNormalAction;
++ static QAction *showAllAction;
++ static QAction *showPromptAction;
+ };
+
+-class ConfigInfoView : public QTextBrowser {
++class ConfigInfoView : public Q3TextBrowser {
+ Q_OBJECT
+- typedef class QTextBrowser Parent;
++ typedef class Q3TextBrowser Parent;
+ public:
+ ConfigInfoView(QWidget* parent, const char *name = 0);
+ bool showDebug(void) const { return _showDebug; }
+@@ -254,7 +258,6 @@
+ public slots:
+ void setInfo(struct menu *menu);
+ void saveSettings(void);
+- void setSource(const QString& name);
+ void setShowDebug(bool);
+
+ signals:
+@@ -267,11 +270,11 @@
+ QString debug_info(struct symbol *sym);
+ static QString print_filter(const QString &str);
+ static void expr_print_help(void *data, struct symbol *sym, const char *str);
+- QPopupMenu* createPopupMenu(const QPoint& pos);
++ Q3PopupMenu* createPopupMenu(const QPoint& pos);
+ void contentsContextMenuEvent(QContextMenuEvent *e);
+
+ struct symbol *sym;
+- struct menu *menu;
++ struct menu *_menu;
+ bool _showDebug;
+ };
+
+@@ -295,10 +298,10 @@
+ struct symbol **result;
+ };
+
+-class ConfigMainWindow : public QMainWindow {
++class ConfigMainWindow : public Q3MainWindow {
+ Q_OBJECT
+
+- static QAction *saveAction;
++ static Q3Action *saveAction;
+ static void conf_changed(void);
+ public:
+ ConfigMainWindow(void);
+@@ -308,7 +311,7 @@
+ void listFocusChanged(void);
+ void goBack(void);
+ void loadConfig(void);
+- void saveConfig(void);
++ bool saveConfig(void);
+ void saveConfigAs(void);
+ void searchConfig(void);
+ void showSingleView(void);
+@@ -327,8 +330,8 @@
+ ConfigView *configView;
+ ConfigList *configList;
+ ConfigInfoView *helpText;
+- QToolBar *toolBar;
+- QAction *backAction;
++ Q3ToolBar *toolBar;
++ Q3Action *backAction;
+ QSplitter* split1;
+ QSplitter* split2;
+ };
+diff -Nur uClibc-0.9.33.2/extra/config/README.uClibc uClibc-git/extra/config/README.uClibc
+--- uClibc-0.9.33.2/extra/config/README.uClibc 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/README.uClibc 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,7 @@
+ cd extra/config.new
+ cp /usr/src/linux/Documentation/kbuild/kconfig-language.txt .
+ mv Makefile Makefile.kconfig
+- zcat ../config/kconfig-to-uclibc.patch.gz | patch -p1
++ tar -O -xzf ../config/kconfig-to-uclibc.tar.gz | patch -p3
+ cp ../config/README.uClibc .
+ cp ../config/Makefile .
+ cd ..
+diff -Nur uClibc-0.9.33.2/extra/config/streamline_config.pl uClibc-git/extra/config/streamline_config.pl
+--- uClibc-0.9.33.2/extra/config/streamline_config.pl 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/streamline_config.pl 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,640 @@
++#!/usr/bin/perl -w
++#
++# Copyright 2005-2009 - Steven Rostedt
++# Licensed under the terms of the GNU GPL License version 2
++#
++# It's simple enough to figure out how this works.
++# If not, then you can ask me at stripconfig@goodmis.org
++#
++# What it does?
++#
++# If you have installed a Linux kernel from a distribution
++# that turns on way too many modules than you need, and
++# you only want the modules you use, then this program
++# is perfect for you.
++#
++# It gives you the ability to turn off all the modules that are
++# not loaded on your system.
++#
++# Howto:
++#
++# 1. Boot up the kernel that you want to stream line the config on.
++# 2. Change directory to the directory holding the source of the
++# kernel that you just booted.
++# 3. Copy the configuraton file to this directory as .config
++# 4. Have all your devices that you need modules for connected and
++# operational (make sure that their corresponding modules are loaded)
++# 5. Run this script redirecting the output to some other file
++# like config_strip.
++# 6. Back up your old config (if you want too).
++# 7. copy the config_strip file to .config
++# 8. Run "make oldconfig"
++#
++# Now your kernel is ready to be built with only the modules that
++# are loaded.
++#
++# Here's what I did with my Debian distribution.
++#
++# cd /usr/src/linux-2.6.10
++# cp /boot/config-2.6.10-1-686-smp .config
++# ~/bin/streamline_config > config_strip
++# mv .config config_sav
++# mv config_strip .config
++# make oldconfig
++#
++use strict;
++use Getopt::Long;
++
++# set the environment variable LOCALMODCONFIG_DEBUG to get
++# debug output.
++my $debugprint = 0;
++$debugprint = 1 if (defined($ENV{LOCALMODCONFIG_DEBUG}));
++
++sub dprint {
++ return if (!$debugprint);
++ print STDERR @_;
++}
++
++my $config = ".config";
++
++my $uname = `uname -r`;
++chomp $uname;
++
++my @searchconfigs = (
++ {
++ "file" => ".config",
++ "exec" => "cat",
++ },
++ {
++ "file" => "/proc/config.gz",
++ "exec" => "zcat",
++ },
++ {
++ "file" => "/boot/config-$uname",
++ "exec" => "cat",
++ },
++ {
++ "file" => "/boot/vmlinuz-$uname",
++ "exec" => "scripts/extract-ikconfig",
++ "test" => "scripts/extract-ikconfig",
++ },
++ {
++ "file" => "vmlinux",
++ "exec" => "scripts/extract-ikconfig",
++ "test" => "scripts/extract-ikconfig",
++ },
++ {
++ "file" => "/lib/modules/$uname/kernel/kernel/configs.ko",
++ "exec" => "scripts/extract-ikconfig",
++ "test" => "scripts/extract-ikconfig",
++ },
++ {
++ "file" => "kernel/configs.ko",
++ "exec" => "scripts/extract-ikconfig",
++ "test" => "scripts/extract-ikconfig",
++ },
++ {
++ "file" => "kernel/configs.o",
++ "exec" => "scripts/extract-ikconfig",
++ "test" => "scripts/extract-ikconfig",
++ },
++);
++
++sub read_config {
++ foreach my $conf (@searchconfigs) {
++ my $file = $conf->{"file"};
++
++ next if ( ! -f "$file");
++
++ if (defined($conf->{"test"})) {
++ `$conf->{"test"} $conf->{"file"} 2>/dev/null`;
++ next if ($?);
++ }
++
++ my $exec = $conf->{"exec"};
++
++ print STDERR "using config: '$file'\n";
++
++ open(my $infile, '-|', "$exec $file") || die "Failed to run $exec $file";
++ my @x = <$infile>;
++ close $infile;
++ return @x;
++ }
++ die "No config file found";
++}
++
++my @config_file = read_config;
++
++# Parse options
++my $localmodconfig = 0;
++my $localyesconfig = 0;
++
++GetOptions("localmodconfig" => \$localmodconfig,
++ "localyesconfig" => \$localyesconfig);
++
++# Get the build source and top level Kconfig file (passed in)
++my $ksource = ($ARGV[0] ? $ARGV[0] : '.');
++my $kconfig = $ARGV[1];
++my $lsmod_file = $ENV{'LSMOD'};
++
++my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
++chomp @makefiles;
++
++my %depends;
++my %selects;
++my %prompts;
++my %objects;
++my $var;
++my $iflevel = 0;
++my @ifdeps;
++
++# prevent recursion
++my %read_kconfigs;
++
++sub read_kconfig {
++ my ($kconfig) = @_;
++
++ my $state = "NONE";
++ my $config;
++
++ my $cont = 0;
++ my $line;
++
++ my $source = "$ksource/$kconfig";
++ my $last_source = "";
++
++ # Check for any environment variables used
++ while ($source =~ /\$(\w+)/ && $last_source ne $source) {
++ my $env = $1;
++ $last_source = $source;
++ $source =~ s/\$$env/$ENV{$env}/;
++ }
++
++ open(my $kinfile, '<', $source) || die "Can't open $kconfig";
++ while (<$kinfile>) {
++ chomp;
++
++ # Make sure that lines ending with \ continue
++ if ($cont) {
++ $_ = $line . " " . $_;
++ }
++
++ if (s/\\$//) {
++ $cont = 1;
++ $line = $_;
++ next;
++ }
++
++ $cont = 0;
++
++ # collect any Kconfig sources
++ if (/^source\s*"(.*)"/) {
++ my $kconfig = $1;
++ # prevent reading twice.
++ if (!defined($read_kconfigs{$kconfig})) {
++ $read_kconfigs{$kconfig} = 1;
++ read_kconfig($kconfig);
++ }
++ next;
++ }
++
++ # configs found
++ if (/^\s*(menu)?config\s+(\S+)\s*$/) {
++ $state = "NEW";
++ $config = $2;
++
++ # Add depends for 'if' nesting
++ for (my $i = 0; $i < $iflevel; $i++) {
++ if ($i) {
++ $depends{$config} .= " " . $ifdeps[$i];
++ } else {
++ $depends{$config} = $ifdeps[$i];
++ }
++ $state = "DEP";
++ }
++
++ # collect the depends for the config
++ } elsif ($state eq "NEW" && /^\s*depends\s+on\s+(.*)$/) {
++ $state = "DEP";
++ $depends{$config} = $1;
++ } elsif ($state eq "DEP" && /^\s*depends\s+on\s+(.*)$/) {
++ $depends{$config} .= " " . $1;
++
++ # Get the configs that select this config
++ } elsif ($state ne "NONE" && /^\s*select\s+(\S+)/) {
++ my $conf = $1;
++ if (defined($selects{$conf})) {
++ $selects{$conf} .= " " . $config;
++ } else {
++ $selects{$conf} = $config;
++ }
++
++ # configs without prompts must be selected
++ } elsif ($state ne "NONE" && /^\s*tristate\s\S/) {
++ # note if the config has a prompt
++ $prompts{$config} = 1;
++
++ # Check for if statements
++ } elsif (/^if\s+(.*\S)\s*$/) {
++ my $deps = $1;
++ # remove beginning and ending non text
++ $deps =~ s/^[^a-zA-Z0-9_]*//;
++ $deps =~ s/[^a-zA-Z0-9_]*$//;
++
++ my @deps = split /[^a-zA-Z0-9_]+/, $deps;
++
++ $ifdeps[$iflevel++] = join ':', @deps;
++
++ } elsif (/^endif/) {
++
++ $iflevel-- if ($iflevel);
++
++ # stop on "help"
++ } elsif (/^\s*help\s*$/) {
++ $state = "NONE";
++ }
++ }
++ close($kinfile);
++}
++
++if ($kconfig) {
++ read_kconfig($kconfig);
++}
++
++# Makefiles can use variables to define their dependencies
++sub convert_vars {
++ my ($line, %vars) = @_;
++
++ my $process = "";
++
++ while ($line =~ s/^(.*?)(\$\((.*?)\))//) {
++ my $start = $1;
++ my $variable = $2;
++ my $var = $3;
++
++ if (defined($vars{$var})) {
++ $process .= $start . $vars{$var};
++ } else {
++ $process .= $start . $variable;
++ }
++ }
++
++ $process .= $line;
++
++ return $process;
++}
++
++# Read all Makefiles to map the configs to the objects
++foreach my $makefile (@makefiles) {
++
++ my $line = "";
++ my %make_vars;
++
++ open(my $infile, '<', $makefile) || die "Can't open $makefile";
++ while (<$infile>) {
++ # if this line ends with a backslash, continue
++ chomp;
++ if (/^(.*)\\$/) {
++ $line .= $1;
++ next;
++ }
++
++ $line .= $_;
++ $_ = $line;
++ $line = "";
++
++ my $objs;
++
++ # Convert variables in a line (could define configs)
++ $_ = convert_vars($_, %make_vars);
++
++ # collect objects after obj-$(CONFIG_FOO_BAR)
++ if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
++ $var = $1;
++ $objs = $2;
++
++ # check if variables are set
++ } elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
++ $make_vars{$1} = $2;
++ }
++ if (defined($objs)) {
++ foreach my $obj (split /\s+/,$objs) {
++ $obj =~ s/-/_/g;
++ if ($obj =~ /(.*)\.o$/) {
++ # Objects may be enabled by more than one config.
++ # Store configs in an array.
++ my @arr;
++
++ if (defined($objects{$1})) {
++ @arr = @{$objects{$1}};
++ }
++
++ $arr[$#arr+1] = $var;
++
++ # The objects have a hash mapping to a reference
++ # of an array of configs.
++ $objects{$1} = \@arr;
++ }
++ }
++ }
++ }
++ close($infile);
++}
++
++my %modules;
++my $linfile;
++
++if (defined($lsmod_file)) {
++ if ( ! -f $lsmod_file) {
++ if ( -f $ENV{'objtree'}."/".$lsmod_file) {
++ $lsmod_file = $ENV{'objtree'}."/".$lsmod_file;
++ } else {
++ die "$lsmod_file not found";
++ }
++ }
++
++ my $otype = ( -x $lsmod_file) ? '-|' : '<';
++ open($linfile, $otype, $lsmod_file);
++
++} else {
++
++ # see what modules are loaded on this system
++ my $lsmod;
++
++ foreach my $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
++ if ( -x "$dir/lsmod" ) {
++ $lsmod = "$dir/lsmod";
++ last;
++ }
++}
++ if (!defined($lsmod)) {
++ # try just the path
++ $lsmod = "lsmod";
++ }
++
++ open($linfile, '-|', $lsmod) || die "Can not call lsmod with $lsmod";
++}
++
++while (<$linfile>) {
++ next if (/^Module/); # Skip the first line.
++ if (/^(\S+)/) {
++ $modules{$1} = 1;
++ }
++}
++close ($linfile);
++
++# add to the configs hash all configs that are needed to enable
++# a loaded module. This is a direct obj-${CONFIG_FOO} += bar.o
++# where we know we need bar.o so we add FOO to the list.
++my %configs;
++foreach my $module (keys(%modules)) {
++ if (defined($objects{$module})) {
++ my @arr = @{$objects{$module}};
++ foreach my $conf (@arr) {
++ $configs{$conf} = $module;
++ dprint "$conf added by direct ($module)\n";
++ if ($debugprint) {
++ my $c=$conf;
++ $c =~ s/^CONFIG_//;
++ if (defined($depends{$c})) {
++ dprint " deps = $depends{$c}\n";
++ } else {
++ dprint " no deps\n";
++ }
++ }
++ }
++ } else {
++ # Most likely, someone has a custom (binary?) module loaded.
++ print STDERR "$module config not found!!\n";
++ }
++}
++
++# Read the current config, and see what is enabled. We want to
++# ignore configs that we would not enable anyway.
++
++my %orig_configs;
++my $valid = "A-Za-z_0-9";
++
++foreach my $line (@config_file) {
++ $_ = $line;
++
++ if (/(CONFIG_[$valid]*)=(m|y)/) {
++ $orig_configs{$1} = $2;
++ }
++}
++
++my $repeat = 1;
++
++my $depconfig;
++
++#
++# Note, we do not care about operands (like: &&, ||, !) we want to add any
++# config that is in the depend list of another config. This script does
++# not enable configs that are not already enabled. If we come across a
++# config A that depends on !B, we can still add B to the list of depends
++# to keep on. If A was on in the original config, B would not have been
++# and B would not be turned on by this script.
++#
++sub parse_config_depends
++{
++ my ($p) = @_;
++
++ while ($p =~ /[$valid]/) {
++
++ if ($p =~ /^[^$valid]*([$valid]+)/) {
++ my $conf = "CONFIG_" . $1;
++
++ $p =~ s/^[^$valid]*[$valid]+//;
++
++ # We only need to process if the depend config is a module
++ if (!defined($orig_configs{$conf}) || !$orig_configs{conf} eq "m") {
++ next;
++ }
++
++ if (!defined($configs{$conf})) {
++ # We must make sure that this config has its
++ # dependencies met.
++ $repeat = 1; # do again
++ dprint "$conf selected by depend $depconfig\n";
++ $configs{$conf} = 1;
++ }
++ } else {
++ die "this should never happen";
++ }
++ }
++}
++
++# Select is treated a bit differently than depends. We call this
++# when a config has no prompt and requires another config to be
++# selected. We use to just select all configs that selected this
++# config, but found that that can balloon into enabling hundreds
++# of configs that we do not care about.
++#
++# The idea is we look at all the configs that select it. If one
++# is already in our list of configs to enable, then there's nothing
++# else to do. If there isn't, we pick the first config that was
++# enabled in the orignal config and use that.
++sub parse_config_selects
++{
++ my ($config, $p) = @_;
++
++ my $next_config;
++
++ while ($p =~ /[$valid]/) {
++
++ if ($p =~ /^[^$valid]*([$valid]+)/) {
++ my $conf = "CONFIG_" . $1;
++
++ $p =~ s/^[^$valid]*[$valid]+//;
++
++ # Make sure that this config exists in the current .config file
++ if (!defined($orig_configs{$conf})) {
++ dprint "$conf not set for $config select\n";
++ next;
++ }
++
++ # Check if something other than a module selects this config
++ if (defined($orig_configs{$conf}) && $orig_configs{$conf} ne "m") {
++ dprint "$conf (non module) selects config, we are good\n";
++ # we are good with this
++ return;
++ }
++ if (defined($configs{$conf})) {
++ dprint "$conf selects $config so we are good\n";
++ # A set config selects this config, we are good
++ return;
++ }
++ # Set this config to be selected
++ if (!defined($next_config)) {
++ $next_config = $conf;
++ }
++ } else {
++ die "this should never happen";
++ }
++ }
++
++ # If no possible config selected this, then something happened.
++ if (!defined($next_config)) {
++ print STDERR "WARNING: $config is required, but nothing in the\n";
++ print STDERR " current config selects it.\n";
++ return;
++ }
++
++ # If we are here, then we found no config that is set and
++ # selects this config. Repeat.
++ $repeat = 1;
++ # Make this config need to be selected
++ $configs{$next_config} = 1;
++ dprint "$next_config selected by select $config\n";
++}
++
++my %process_selects;
++
++# loop through all configs, select their dependencies.
++sub loop_depend {
++ $repeat = 1;
++
++ while ($repeat) {
++ $repeat = 0;
++
++ forloop:
++ foreach my $config (keys %configs) {
++
++ # If this config is not a module, we do not need to process it
++ if (defined($orig_configs{$config}) && $orig_configs{$config} ne "m") {
++ next forloop;
++ }
++
++ $config =~ s/^CONFIG_//;
++ $depconfig = $config;
++
++ if (defined($depends{$config})) {
++ # This config has dependencies. Make sure they are also included
++ parse_config_depends $depends{$config};
++ }
++
++ # If the config has no prompt, then we need to check if a config
++ # that is enabled selected it. Or if we need to enable one.
++ if (!defined($prompts{$config}) && defined($selects{$config})) {
++ $process_selects{$config} = 1;
++ }
++ }
++ }
++}
++
++sub loop_select {
++
++ foreach my $config (keys %process_selects) {
++ $config =~ s/^CONFIG_//;
++
++ dprint "Process select $config\n";
++
++ # config has no prompt and must be selected.
++ parse_config_selects $config, $selects{$config};
++ }
++}
++
++while ($repeat) {
++ # Get the first set of configs and their dependencies.
++ loop_depend;
++
++ $repeat = 0;
++
++ # Now we need to see if we have to check selects;
++ loop_select;
++}
++
++my %setconfigs;
++
++# Finally, read the .config file and turn off any module enabled that
++# we could not find a reason to keep enabled.
++foreach my $line (@config_file) {
++ $_ = $line;
++
++ if (/CONFIG_IKCONFIG/) {
++ if (/# CONFIG_IKCONFIG is not set/) {
++ # enable IKCONFIG at least as a module
++ print "CONFIG_IKCONFIG=m\n";
++ # don't ask about PROC
++ print "# CONFIG_IKCONFIG_PROC is not set\n";
++ } else {
++ print;
++ }
++ next;
++ }
++
++ if (/^(CONFIG.*)=(m|y)/) {
++ if (defined($configs{$1})) {
++ if ($localyesconfig) {
++ $setconfigs{$1} = 'y';
++ print "$1=y\n";
++ next;
++ } else {
++ $setconfigs{$1} = $2;
++ }
++ } elsif ($2 eq "m") {
++ print "# $1 is not set\n";
++ next;
++ }
++ }
++ print;
++}
++
++# Integrity check, make sure all modules that we want enabled do
++# indeed have their configs set.
++loop:
++foreach my $module (keys(%modules)) {
++ if (defined($objects{$module})) {
++ my @arr = @{$objects{$module}};
++ foreach my $conf (@arr) {
++ if (defined($setconfigs{$conf})) {
++ next loop;
++ }
++ }
++ print STDERR "module $module did not have configs";
++ foreach my $conf (@arr) {
++ print STDERR " " , $conf;
++ }
++ print STDERR "\n";
++ }
++}
+diff -Nur uClibc-0.9.33.2/extra/config/symbol.c uClibc-git/extra/config/symbol.c
+--- uClibc-0.9.33.2/extra/config/symbol.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/symbol.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,8 +7,8 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <regex.h>
++#include <sys/utsname.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+ struct symbol symbol_yes = {
+@@ -35,7 +35,7 @@
+
+ struct expr *sym_env_list;
+
+-void sym_add_default(struct symbol *sym, const char *def)
++static void sym_add_default(struct symbol *sym, const char *def)
+ {
+ struct property *prop = prop_alloc(P_DEFAULT, sym);
+
+@@ -45,20 +45,19 @@
+ void sym_init(void)
+ {
+ struct symbol *sym;
+- char *p;
++ struct utsname uts;
+ static bool inited = false;
+
+ if (inited)
+ return;
+ inited = true;
+
+- p = getenv("VERSION");
+- if (p) {
+- sym = sym_lookup("VERSION", 0);
+- sym->type = S_STRING;
+- sym->flags |= SYMBOL_AUTO;
+- sym_add_default(sym, p);
+- }
++ uname(&uts);
++
++ sym = sym_lookup("UNAME_RELEASE", 0);
++ sym->type = S_STRING;
++ sym->flags |= SYMBOL_AUTO;
++ sym_add_default(sym, uts.release);
+ }
+
+ enum symbol_type sym_get_type(struct symbol *sym)
+@@ -125,7 +124,7 @@
+ return NULL;
+ }
+
+-struct property *sym_get_range_prop(struct symbol *sym)
++static struct property *sym_get_range_prop(struct symbol *sym)
+ {
+ struct property *prop;
+
+@@ -137,7 +136,7 @@
+ return NULL;
+ }
+
+-static int sym_get_range_val(struct symbol *sym, int base)
++static long sym_get_range_val(struct symbol *sym, int base)
+ {
+ sym_calc_value(sym);
+ switch (sym->type) {
+@@ -156,7 +155,7 @@
+ static void sym_validate_range(struct symbol *sym)
+ {
+ struct property *prop;
+- int base, val, val2;
++ long base, val, val2;
+ char str[64];
+
+ switch (sym->type) {
+@@ -180,9 +179,9 @@
+ return;
+ }
+ if (sym->type == S_INT)
+- sprintf(str, "%d", val2);
++ sprintf(str, "%ld", val2);
+ else
+- sprintf(str, "0x%x", val2);
++ sprintf(str, "0x%lx", val2);
+ sym->curr.val = strdup(str);
+ }
+
+@@ -205,6 +204,16 @@
+ }
+ if (sym_is_choice_value(sym))
+ return;
++ /* defaulting to "yes" if no explicit "depends on" are given */
++ tri = yes;
++ if (sym->dir_dep.expr)
++ tri = expr_calc_value(sym->dir_dep.expr);
++ if (tri == mod)
++ tri = yes;
++ if (sym->dir_dep.tri != tri) {
++ sym->dir_dep.tri = tri;
++ sym_set_changed(sym);
++ }
+ tri = no;
+ if (sym->rev_dep.expr)
+ tri = expr_calc_value(sym->rev_dep.expr);
+@@ -216,42 +225,68 @@
+ }
+ }
+
+-static struct symbol *sym_calc_choice(struct symbol *sym)
++/*
++ * Find the default symbol for a choice.
++ * First try the default values for the choice symbol
++ * Next locate the first visible choice value
++ * Return NULL if none was found
++ */
++struct symbol *sym_choice_default(struct symbol *sym)
+ {
+ struct symbol *def_sym;
+ struct property *prop;
+ struct expr *e;
+
+- /* is the user choice visible? */
+- def_sym = sym->def[S_DEF_USER].val;
+- if (def_sym) {
+- sym_calc_visibility(def_sym);
+- if (def_sym->visible != no)
+- return def_sym;
+- }
+-
+ /* any of the defaults visible? */
+ for_all_defaults(sym, prop) {
+ prop->visible.tri = expr_calc_value(prop->visible.expr);
+ if (prop->visible.tri == no)
+ continue;
+ def_sym = prop_get_symbol(prop);
+- sym_calc_visibility(def_sym);
+ if (def_sym->visible != no)
+ return def_sym;
+ }
+
+ /* just get the first visible value */
+ prop = sym_get_choice_prop(sym);
++ expr_list_for_each_sym(prop->expr, e, def_sym)
++ if (def_sym->visible != no)
++ return def_sym;
++
++ /* failed to locate any defaults */
++ return NULL;
++}
++
++static struct symbol *sym_calc_choice(struct symbol *sym)
++{
++ struct symbol *def_sym;
++ struct property *prop;
++ struct expr *e;
++ int flags;
++
++ /* first calculate all choice values' visibilities */
++ flags = sym->flags;
++ prop = sym_get_choice_prop(sym);
+ expr_list_for_each_sym(prop->expr, e, def_sym) {
+ sym_calc_visibility(def_sym);
+ if (def_sym->visible != no)
+- return def_sym;
++ flags &= def_sym->flags;
+ }
+
+- /* no choice? reset tristate value */
+- sym->curr.tri = no;
+- return NULL;
++ sym->flags &= flags | ~SYMBOL_DEF_USER;
++
++ /* is the user choice visible? */
++ def_sym = sym->def[S_DEF_USER].val;
++ if (def_sym && def_sym->visible != no)
++ return def_sym;
++
++ def_sym = sym_choice_default(sym);
++
++ if (def_sym == NULL)
++ /* no choice? reset tristate value */
++ sym->curr.tri = no;
++
++ return def_sym;
+ }
+
+ void sym_calc_value(struct symbol *sym)
+@@ -265,6 +300,14 @@
+
+ if (sym->flags & SYMBOL_VALID)
+ return;
++
++ if (sym_is_choice_value(sym) &&
++ sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) {
++ sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES;
++ prop = sym_get_choice_prop(sym);
++ sym_calc_value(prop_get_symbol(prop));
++ }
++
+ sym->flags |= SYMBOL_VALID;
+
+ oldval = sym->curr;
+@@ -321,6 +364,18 @@
+ }
+ }
+ calc_newval:
++ if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
++ struct expr *e;
++ e = expr_simplify_unmet_dep(sym->rev_dep.expr,
++ sym->dir_dep.expr);
++ fprintf(stderr, "warning: (");
++ expr_fprint(e, stderr);
++ fprintf(stderr, ") selects %s which has unmet direct dependencies (",
++ sym->name);
++ expr_fprint(sym->dir_dep.expr, stderr);
++ fprintf(stderr, ")\n");
++ expr_free(e);
++ }
+ newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
+ }
+ if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
+@@ -365,18 +420,22 @@
+
+ if (sym_is_choice(sym)) {
+ struct symbol *choice_sym;
+- int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
+
+ prop = sym_get_choice_prop(sym);
+ expr_list_for_each_sym(prop->expr, e, choice_sym) {
+- choice_sym->flags |= flags;
+- if (flags & SYMBOL_CHANGED)
++ if ((sym->flags & SYMBOL_WRITE) &&
++ choice_sym->visible != no)
++ choice_sym->flags |= SYMBOL_WRITE;
++ if (sym->flags & SYMBOL_CHANGED)
+ sym_set_changed(choice_sym);
+ }
+ }
+
+ if (sym->flags & SYMBOL_AUTO)
+ sym->flags &= ~SYMBOL_WRITE;
++
++ if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES)
++ set_all_choice_values(sym);
+ }
+
+ void sym_clear_all_valid(void)
+@@ -535,7 +594,7 @@
+ bool sym_string_within_range(struct symbol *sym, const char *str)
+ {
+ struct property *prop;
+- int val;
++ long val;
+
+ switch (sym->type) {
+ case S_STRING:
+@@ -608,11 +667,11 @@
+ size = strlen(newval) + 1;
+ if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
+ size += 2;
+- sym->def[S_DEF_USER].val = val = malloc(size);
++ sym->def[S_DEF_USER].val = val = xmalloc(size);
+ *val++ = '0';
+ *val++ = 'x';
+ } else if (!oldval || strcmp(oldval, newval))
+- sym->def[S_DEF_USER].val = val = malloc(size);
++ sym->def[S_DEF_USER].val = val = xmalloc(size);
+ else
+ return true;
+
+@@ -623,6 +682,80 @@
+ return true;
+ }
+
++/*
++ * Find the default value associated to a symbol.
++ * For tristate symbol handle the modules=n case
++ * in which case "m" becomes "y".
++ * If the symbol does not have any default then fallback
++ * to the fixed default values.
++ */
++const char *sym_get_string_default(struct symbol *sym)
++{
++ struct property *prop;
++ struct symbol *ds;
++ const char *str;
++ tristate val;
++
++ sym_calc_visibility(sym);
++ sym_calc_value(modules_sym);
++ val = symbol_no.curr.tri;
++ str = symbol_empty.curr.val;
++
++ /* If symbol has a default value look it up */
++ prop = sym_get_default_prop(sym);
++ if (prop != NULL) {
++ switch (sym->type) {
++ case S_BOOLEAN:
++ case S_TRISTATE:
++ /* The visibility may limit the value from yes => mod */
++ val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri);
++ break;
++ default:
++ /*
++ * The following fails to handle the situation
++ * where a default value is further limited by
++ * the valid range.
++ */
++ ds = prop_get_symbol(prop);
++ if (ds != NULL) {
++ sym_calc_value(ds);
++ str = (const char *)ds->curr.val;
++ }
++ }
++ }
++
++ /* Handle select statements */
++ val = EXPR_OR(val, sym->rev_dep.tri);
++
++ /* transpose mod to yes if modules are not enabled */
++ if (val == mod)
++ if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no)
++ val = yes;
++
++ /* transpose mod to yes if type is bool */
++ if (sym->type == S_BOOLEAN && val == mod)
++ val = yes;
++
++ switch (sym->type) {
++ case S_BOOLEAN:
++ case S_TRISTATE:
++ switch (val) {
++ case no: return "n";
++ case mod: return "m";
++ case yes: return "y";
++ }
++ case S_INT:
++ case S_HEX:
++ return str;
++ case S_STRING:
++ return str;
++ case S_OTHER:
++ case S_UNKNOWN:
++ break;
++ }
++ return "";
++}
++
+ const char *sym_get_string_value(struct symbol *sym)
+ {
+ tristate val;
+@@ -635,7 +768,8 @@
+ case no:
+ return "n";
+ case mod:
+- return "m";
++ sym_calc_value(modules_sym);
++ return (modules_sym->curr.tri == no) ? "n" : "m";
+ case yes:
+ return "y";
+ }
+@@ -651,12 +785,20 @@
+ return sym->visible > sym->rev_dep.tri;
+ }
+
++static unsigned strhash(const char *s)
++{
++ /* fnv32 hash */
++ unsigned hash = 2166136261U;
++ for (; *s; s++)
++ hash = (hash ^ *s) * 0x01000193;
++ return hash;
++}
++
+ struct symbol *sym_lookup(const char *name, int flags)
+ {
+ struct symbol *symbol;
+- const char *ptr;
+ char *new_name;
+- int hash = 0;
++ int hash;
+
+ if (name) {
+ if (name[0] && !name[1]) {
+@@ -666,12 +808,11 @@
+ case 'n': return &symbol_no;
+ }
+ }
+- for (ptr = name; *ptr; ptr++)
+- hash += *ptr;
+- hash &= 0xff;
++ hash = strhash(name) % SYMBOL_HASHSIZE;
+
+ for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
+- if (!strcmp(symbol->name, name) &&
++ if (symbol->name &&
++ !strcmp(symbol->name, name) &&
+ (flags ? symbol->flags & flags
+ : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
+ return symbol;
+@@ -679,10 +820,10 @@
+ new_name = strdup(name);
+ } else {
+ new_name = NULL;
+- hash = 256;
++ hash = 0;
+ }
+
+- symbol = malloc(sizeof(*symbol));
++ symbol = xmalloc(sizeof(*symbol));
+ memset(symbol, 0, sizeof(*symbol));
+ symbol->name = new_name;
+ symbol->type = S_UNKNOWN;
+@@ -697,7 +838,6 @@
+ struct symbol *sym_find(const char *name)
+ {
+ struct symbol *symbol = NULL;
+- const char *ptr;
+ int hash = 0;
+
+ if (!name)
+@@ -710,12 +850,11 @@
+ case 'n': return &symbol_no;
+ }
+ }
+- for (ptr = name; *ptr; ptr++)
+- hash += *ptr;
+- hash &= 0xff;
++ hash = strhash(name) % SYMBOL_HASHSIZE;
+
+ for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
+- if (!strcmp(symbol->name, name) &&
++ if (symbol->name &&
++ !strcmp(symbol->name, name) &&
+ !(symbol->flags & SYMBOL_CONST))
+ break;
+ }
+@@ -723,42 +862,301 @@
+ return symbol;
+ }
+
++/*
++ * Expand symbol's names embedded in the string given in argument. Symbols'
++ * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
++ * the empty string.
++ */
++const char *sym_expand_string_value(const char *in)
++{
++ const char *src;
++ char *res;
++ size_t reslen;
++
++ reslen = strlen(in) + 1;
++ res = xmalloc(reslen);
++ res[0] = '\0';
++
++ while ((src = strchr(in, '$'))) {
++ char *p, name[SYMBOL_MAXLENGTH];
++ const char *symval = "";
++ struct symbol *sym;
++ size_t newlen;
++
++ strncat(res, in, src - in);
++ src++;
++
++ p = name;
++ while (isalnum(*src) || *src == '_')
++ *p++ = *src++;
++ *p = '\0';
++
++ sym = sym_find(name);
++ if (sym != NULL) {
++ sym_calc_value(sym);
++ symval = sym_get_string_value(sym);
++ }
++
++ newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
++ if (newlen > reslen) {
++ reslen = newlen;
++ res = realloc(res, reslen);
++ }
++
++ strcat(res, symval);
++ in = src;
++ }
++ strcat(res, in);
++
++ return res;
++}
++
++const char *sym_escape_string_value(const char *in)
++{
++ const char *p;
++ size_t reslen;
++ char *res;
++ size_t l;
++
++ reslen = strlen(in) + strlen("\"\"") + 1;
++
++ p = in;
++ for (;;) {
++ l = strcspn(p, "\"\\");
++ p += l;
++
++ if (p[0] == '\0')
++ break;
++
++ reslen++;
++ p++;
++ }
++
++ res = xmalloc(reslen);
++ res[0] = '\0';
++
++ strcat(res, "\"");
++
++ p = in;
++ for (;;) {
++ l = strcspn(p, "\"\\");
++ strncat(res, p, l);
++ p += l;
++
++ if (p[0] == '\0')
++ break;
++
++ strcat(res, "\\");
++ strncat(res, p++, 1);
++ }
++
++ strcat(res, "\"");
++ return res;
++}
++
++struct sym_match {
++ struct symbol *sym;
++ off_t so, eo;
++};
++
++/* Compare matched symbols as thus:
++ * - first, symbols that match exactly
++ * - then, alphabetical sort
++ */
++static int sym_rel_comp( const void *sym1, const void *sym2 )
++{
++ struct sym_match *s1 = *(struct sym_match **)sym1;
++ struct sym_match *s2 = *(struct sym_match **)sym2;
++ int l1, l2;
++
++ /* Exact match:
++ * - if matched length on symbol s1 is the length of that symbol,
++ * then this symbol should come first;
++ * - if matched length on symbol s2 is the length of that symbol,
++ * then this symbol should come first.
++ * Note: since the search can be a regexp, both symbols may match
++ * exactly; if this is the case, we can't decide which comes first,
++ * and we fallback to sorting alphabetically.
++ */
++ l1 = s1->eo - s1->so;
++ l2 = s2->eo - s2->so;
++ if (l1 == strlen(s1->sym->name) && l2 != strlen(s2->sym->name))
++ return -1;
++ if (l1 != strlen(s1->sym->name) && l2 == strlen(s2->sym->name))
++ return 1;
++
++ /* As a fallback, sort symbols alphabetically */
++ return strcmp(s1->sym->name, s2->sym->name);
++}
++
+ struct symbol **sym_re_search(const char *pattern)
+ {
+ struct symbol *sym, **sym_arr = NULL;
++ struct sym_match **sym_match_arr = NULL;
+ int i, cnt, size;
+ regex_t re;
++ regmatch_t match[1];
+
+ cnt = size = 0;
+ /* Skip if empty */
+ if (strlen(pattern) == 0)
+ return NULL;
+- if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE))
++ if (regcomp(&re, pattern, REG_EXTENDED|REG_ICASE))
+ return NULL;
+
+ for_all_symbols(i, sym) {
++ struct sym_match *tmp_sym_match;
+ if (sym->flags & SYMBOL_CONST || !sym->name)
+ continue;
+- if (regexec(&re, sym->name, 0, NULL, 0))
++ if (regexec(&re, sym->name, 1, match, 0))
+ continue;
+ if (cnt + 1 >= size) {
+- void *tmp = sym_arr;
++ void *tmp;
+ size += 16;
+- sym_arr = realloc(sym_arr, size * sizeof(struct symbol *));
+- if (!sym_arr) {
+- free(tmp);
+- return NULL;
++ tmp = realloc(sym_match_arr, size * sizeof(struct sym_match *));
++ if (!tmp) {
++ goto sym_re_search_free;
+ }
++ sym_match_arr = tmp;
+ }
+- sym_arr[cnt++] = sym;
+- }
+- if (sym_arr)
++ sym_calc_value(sym);
++ tmp_sym_match = (struct sym_match*)malloc(sizeof(struct sym_match));
++ if (!tmp_sym_match)
++ goto sym_re_search_free;
++ tmp_sym_match->sym = sym;
++ /* As regexec return 0, we know we have a match, so
++ * we can use match[0].rm_[se]o without further checks
++ */
++ tmp_sym_match->so = match[0].rm_so;
++ tmp_sym_match->eo = match[0].rm_eo;
++ sym_match_arr[cnt++] = tmp_sym_match;
++ }
++ if (sym_match_arr) {
++ qsort(sym_match_arr, cnt, sizeof(struct sym_match*), sym_rel_comp);
++ sym_arr = malloc((cnt+1) * sizeof(struct symbol));
++ if (!sym_arr)
++ goto sym_re_search_free;
++ for (i = 0; i < cnt; i++)
++ sym_arr[i] = sym_match_arr[i]->sym;
+ sym_arr[cnt] = NULL;
++ }
++sym_re_search_free:
++ if (sym_match_arr) {
++ for (i = 0; i < cnt; i++)
++ free(sym_match_arr[i]);
++ free(sym_match_arr);
++ }
+ regfree(&re);
+
+ return sym_arr;
+ }
+
++/*
++ * When we check for recursive dependencies we use a stack to save
++ * current state so we can print out relevant info to user.
++ * The entries are located on the call stack so no need to free memory.
++ * Note inser() remove() must always match to properly clear the stack.
++ */
++static struct dep_stack {
++ struct dep_stack *prev, *next;
++ struct symbol *sym;
++ struct property *prop;
++ struct expr *expr;
++} *check_top;
++
++static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym)
++{
++ memset(stack, 0, sizeof(*stack));
++ if (check_top)
++ check_top->next = stack;
++ stack->prev = check_top;
++ stack->sym = sym;
++ check_top = stack;
++}
++
++static void dep_stack_remove(void)
++{
++ check_top = check_top->prev;
++ if (check_top)
++ check_top->next = NULL;
++}
++
++/*
++ * Called when we have detected a recursive dependency.
++ * check_top point to the top of the stact so we use
++ * the ->prev pointer to locate the bottom of the stack.
++ */
++static void sym_check_print_recursive(struct symbol *last_sym)
++{
++ struct dep_stack *stack;
++ struct symbol *sym, *next_sym;
++ struct menu *menu = NULL;
++ struct property *prop;
++ struct dep_stack cv_stack;
++
++ if (sym_is_choice_value(last_sym)) {
++ dep_stack_insert(&cv_stack, last_sym);
++ last_sym = prop_get_symbol(sym_get_choice_prop(last_sym));
++ }
++
++ for (stack = check_top; stack != NULL; stack = stack->prev)
++ if (stack->sym == last_sym)
++ break;
++ if (!stack) {
++ fprintf(stderr, "unexpected recursive dependency error\n");
++ return;
++ }
++
++ for (; stack; stack = stack->next) {
++ sym = stack->sym;
++ next_sym = stack->next ? stack->next->sym : last_sym;
++ prop = stack->prop;
++ if (prop == NULL)
++ prop = stack->sym->prop;
++
++ /* for choice values find the menu entry (used below) */
++ if (sym_is_choice(sym) || sym_is_choice_value(sym)) {
++ for (prop = sym->prop; prop; prop = prop->next) {
++ menu = prop->menu;
++ if (prop->menu)
++ break;
++ }
++ }
++ if (stack->sym == last_sym)
++ fprintf(stderr, "%s:%d:error: recursive dependency detected!\n",
++ prop->file->name, prop->lineno);
++ if (stack->expr) {
++ fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
++ prop->file->name, prop->lineno,
++ sym->name ? sym->name : "<choice>",
++ prop_get_type_name(prop->type),
++ next_sym->name ? next_sym->name : "<choice>");
++ } else if (stack->prop) {
++ fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
++ prop->file->name, prop->lineno,
++ sym->name ? sym->name : "<choice>",
++ next_sym->name ? next_sym->name : "<choice>");
++ } else if (sym_is_choice(sym)) {
++ fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
++ menu->file->name, menu->lineno,
++ sym->name ? sym->name : "<choice>",
++ next_sym->name ? next_sym->name : "<choice>");
++ } else if (sym_is_choice_value(sym)) {
++ fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
++ menu->file->name, menu->lineno,
++ sym->name ? sym->name : "<choice>",
++ next_sym->name ? next_sym->name : "<choice>");
++ } else {
++ fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
++ prop->file->name, prop->lineno,
++ sym->name ? sym->name : "<choice>",
++ next_sym->name ? next_sym->name : "<choice>");
++ }
++ }
++
++ if (check_top == &cv_stack)
++ dep_stack_remove();
++}
+
+ static struct symbol *sym_check_expr_deps(struct expr *e)
+ {
+@@ -795,24 +1193,33 @@
+ {
+ struct symbol *sym2;
+ struct property *prop;
++ struct dep_stack stack;
++
++ dep_stack_insert(&stack, sym);
+
+ sym2 = sym_check_expr_deps(sym->rev_dep.expr);
+ if (sym2)
+- return sym2;
++ goto out;
+
+ for (prop = sym->prop; prop; prop = prop->next) {
+ if (prop->type == P_CHOICE || prop->type == P_SELECT)
+ continue;
++ stack.prop = prop;
+ sym2 = sym_check_expr_deps(prop->visible.expr);
+ if (sym2)
+ break;
+ if (prop->type != P_DEFAULT || sym_is_choice(sym))
+ continue;
++ stack.expr = prop->expr;
+ sym2 = sym_check_expr_deps(prop->expr);
+ if (sym2)
+ break;
++ stack.expr = NULL;
+ }
+
++out:
++ dep_stack_remove();
++
+ return sym2;
+ }
+
+@@ -821,6 +1228,9 @@
+ struct symbol *sym, *sym2;
+ struct property *prop;
+ struct expr *e;
++ struct dep_stack stack;
++
++ dep_stack_insert(&stack, choice);
+
+ prop = sym_get_choice_prop(choice);
+ expr_list_for_each_sym(prop->expr, e, sym)
+@@ -834,10 +1244,8 @@
+
+ expr_list_for_each_sym(prop->expr, e, sym) {
+ sym2 = sym_check_sym_deps(sym);
+- if (sym2) {
+- fprintf(stderr, " -> %s", sym->name);
++ if (sym2)
+ break;
+- }
+ }
+ out:
+ expr_list_for_each_sym(prop->expr, e, sym)
+@@ -847,6 +1255,8 @@
+ prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
+ sym2 = choice;
+
++ dep_stack_remove();
++
+ return sym2;
+ }
+
+@@ -856,18 +1266,20 @@
+ struct property *prop;
+
+ if (sym->flags & SYMBOL_CHECK) {
+- fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
+- sym->prop->file->name, sym->prop->lineno,
+- sym->name ? sym->name : "<choice>");
++ sym_check_print_recursive(sym);
+ return sym;
+ }
+ if (sym->flags & SYMBOL_CHECKED)
+ return NULL;
+
+ if (sym_is_choice_value(sym)) {
++ struct dep_stack stack;
++
+ /* for choice groups start the check with main choice symbol */
++ dep_stack_insert(&stack, sym);
+ prop = sym_get_choice_prop(sym);
+ sym2 = sym_check_deps(prop_get_symbol(prop));
++ dep_stack_remove();
+ } else if (sym_is_choice(sym)) {
+ sym2 = sym_check_choice_deps(sym);
+ } else {
+@@ -876,14 +1288,8 @@
+ sym->flags &= ~SYMBOL_CHECK;
+ }
+
+- if (sym2) {
+- fprintf(stderr, " -> %s", sym->name ? sym->name : "<choice>");
+- if (sym2 == sym) {
+- fprintf(stderr, "\n");
+- zconfnerrs++;
+- sym2 = NULL;
+- }
+- }
++ if (sym2 && sym2 == sym)
++ sym2 = NULL;
+
+ return sym2;
+ }
+@@ -893,7 +1299,7 @@
+ struct property *prop;
+ struct property **propp;
+
+- prop = malloc(sizeof(*prop));
++ prop = xmalloc(sizeof(*prop));
+ memset(prop, 0, sizeof(*prop));
+ prop->type = type;
+ prop->sym = sym;
+@@ -937,13 +1343,15 @@
+ return "select";
+ case P_RANGE:
+ return "range";
++ case P_SYMBOL:
++ return "symbol";
+ case P_UNKNOWN:
+ break;
+ }
+ return "unknown";
+ }
+
+-void prop_add_env(const char *env)
++static void prop_add_env(const char *env)
+ {
+ struct symbol *sym, *sym2;
+ struct property *prop;
+diff -Nur uClibc-0.9.33.2/extra/config/util.c uClibc-git/extra/config/util.c
+--- uClibc-0.9.33.2/extra/config/util.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/util.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,6 +5,8 @@
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
++#include <stdarg.h>
++#include <stdlib.h>
+ #include <string.h>
+ #include "lkc.h"
+
+@@ -12,15 +14,18 @@
+ struct file *file_lookup(const char *name)
+ {
+ struct file *file;
++ const char *file_name = sym_expand_string_value(name);
+
+ for (file = file_list; file; file = file->next) {
+- if (!strcmp(name, file->name))
++ if (!strcmp(name, file->name)) {
++ free((void *)file_name);
+ return file;
++ }
+ }
+
+- file = malloc(sizeof(*file));
++ file = xmalloc(sizeof(*file));
+ memset(file, 0, sizeof(*file));
+- file->name = strdup(name);
++ file->name = file_name;
+ file->next = file_list;
+ file_list = file;
+ return file;
+@@ -32,11 +37,15 @@
+ struct symbol *sym, *env_sym;
+ struct expr *e;
+ struct file *file;
++ char tmpf[PATH_MAX+1];
+ FILE *out;
+
+ if (!name)
+ name = ".kconfig.d";
+- out = fopen("..config.tmp", "w");
++ strcpy(tmpf, name);
++ dir_name(tmpf);
++ strcat(tmpf, "..config.tmp");
++ out = fopen(tmpf, "w");
+ if (!out)
+ return 1;
+ fprintf(out, "deps_config := \\\n");
+@@ -46,8 +55,8 @@
+ else
+ fprintf(out, "\t%s\n", file->name);
+ }
+- fprintf(out, "\ninclude/config/auto.conf: \\\n"
+- "\t$(deps_config)\n\n");
++ fprintf(out, "\n%s: \\\n"
++ "\t$(deps_config)\n\n", conf_get_autoconfig_name());
+
+ expr_list_for_each_sym(sym_env_list, e, sym) {
+ struct property *prop;
+@@ -61,23 +70,24 @@
+ if (!value)
+ value = "";
+ fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value);
+- fprintf(out, "include/config/auto.conf: FORCE\n");
++ fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name());
+ fprintf(out, "endif\n");
+ }
+
+ fprintf(out, "\n$(deps_config): ;\n");
+ fclose(out);
+- rename("..config.tmp", name);
++ rename(tmpf, name);
+ return 0;
+ }
+
+
+-/* Allocate initial growable sting */
++/* Allocate initial growable string */
+ struct gstr str_new(void)
+ {
+ struct gstr gs;
+- gs.s = malloc(sizeof(char) * 64);
++ gs.s = xmalloc(sizeof(char) * 64);
+ gs.len = 64;
++ gs.max_width = 0;
+ strcpy(gs.s, "\0");
+ return gs;
+ }
+@@ -88,6 +98,7 @@
+ struct gstr gs;
+ gs.s = strdup(s);
+ gs.len = strlen(s) + 1;
++ gs.max_width = 0;
+ return gs;
+ }
+
+@@ -131,3 +142,40 @@
+ return gs->s;
+ }
+
++void *xmalloc(size_t size)
++{
++ void *p = malloc(size);
++ if (p)
++ return p;
++ fprintf(stderr, "Out of memory.\n");
++ exit(1);
++}
++
++void *xcalloc(size_t nmemb, size_t size)
++{
++ void *p = calloc(nmemb, size);
++ if (p)
++ return p;
++ fprintf(stderr, "Out of memory.\n");
++ exit(1);
++}
++
++/* basename, dirname - parse pathname components */
++char *dir_name(char *path)
++{
++ char *slash = strrchr(path, '/');
++ int size = 0;
++ if (slash)
++ size = slash - path + 1;
++ path[size] = 0;
++ return path;
++}
++char *base_name(char *path)
++{
++ char *slash = strrchr(path, '/');
++ if (slash)
++ path += slash - path + 1;
++ return path;
++
++}
++
+diff -Nur uClibc-0.9.33.2/extra/config/zconf.gperf uClibc-git/extra/config/zconf.gperf
+--- uClibc-0.9.33.2/extra/config/zconf.gperf 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/zconf.gperf 2014-02-03 12:32:56.000000000 +0100
+@@ -9,6 +9,8 @@
+
+ struct kconf_id;
+
++static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
++
+ %%
+ mainmenu, T_MAINMENU, TF_COMMAND
+ menu, T_MENU, TF_COMMAND
+@@ -36,6 +38,7 @@
+ string, T_TYPE, TF_COMMAND, S_STRING
+ select, T_SELECT, TF_COMMAND
+ range, T_RANGE, TF_COMMAND
++visible, T_VISIBLE, TF_COMMAND
+ option, T_OPTION, TF_COMMAND
+ on, T_ON, TF_PARAM
+ modules, T_OPT_MODULES, TF_OPTION
+diff -Nur uClibc-0.9.33.2/extra/config/zconf.hash.c_shipped uClibc-git/extra/config/zconf.hash.c_shipped
+--- uClibc-0.9.33.2/extra/config/zconf.hash.c_shipped 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/zconf.hash.c_shipped 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,5 @@
+-/* ANSI-C code produced by gperf version 3.0.3 */
+-/* Command-line: gperf */
+-/* Computed positions: -k'1,3' */
++/* ANSI-C code produced by gperf version 3.0.4 */
++/* Command-line: gperf -t --output-file scripts/kconfig/zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/kconfig/zconf.gperf */
+
+ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+@@ -29,8 +28,11 @@
+ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+ #endif
+
++#line 10 "scripts/kconfig/zconf.gperf"
+ struct kconf_id;
+-/* maximum key range = 47, duplicates = 0 */
++
++static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
++/* maximum key range = 71, duplicates = 0 */
+
+ #ifdef __GNUC__
+ __inline
+@@ -42,34 +44,34 @@
+ static unsigned int
+ kconf_id_hash (register const char *str, register unsigned int len)
+ {
+- static unsigned char asso_values[] =
++ static const unsigned char asso_values[] =
+ {
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 11, 5,
+- 0, 0, 5, 49, 5, 20, 49, 49, 5, 20,
+- 5, 0, 30, 49, 0, 15, 0, 10, 0, 49,
+- 25, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+- 49, 49, 49, 49, 49, 49
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 25, 25,
++ 0, 0, 0, 5, 0, 0, 73, 73, 5, 0,
++ 10, 5, 45, 73, 20, 20, 0, 15, 15, 73,
++ 20, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 73
+ };
+ register int hval = len;
+
+@@ -83,137 +85,183 @@
+ hval += asso_values[(unsigned char)str[0]];
+ break;
+ }
+- return hval;
++ return hval + asso_values[(unsigned char)str[len - 1]];
+ }
+
+ struct kconf_id_strings_t
+ {
+- char kconf_id_strings_str2[sizeof("on")];
+- char kconf_id_strings_str3[sizeof("env")];
++ char kconf_id_strings_str2[sizeof("if")];
++ char kconf_id_strings_str3[sizeof("int")];
+ char kconf_id_strings_str5[sizeof("endif")];
+- char kconf_id_strings_str6[sizeof("option")];
+- char kconf_id_strings_str7[sizeof("endmenu")];
+- char kconf_id_strings_str8[sizeof("optional")];
++ char kconf_id_strings_str7[sizeof("default")];
++ char kconf_id_strings_str8[sizeof("tristate")];
+ char kconf_id_strings_str9[sizeof("endchoice")];
+- char kconf_id_strings_str10[sizeof("range")];
+- char kconf_id_strings_str11[sizeof("choice")];
+- char kconf_id_strings_str12[sizeof("default")];
++ char kconf_id_strings_str12[sizeof("def_tristate")];
+ char kconf_id_strings_str13[sizeof("def_bool")];
+- char kconf_id_strings_str14[sizeof("help")];
+- char kconf_id_strings_str15[sizeof("bool")];
+- char kconf_id_strings_str16[sizeof("config")];
+- char kconf_id_strings_str17[sizeof("def_tristate")];
+- char kconf_id_strings_str18[sizeof("boolean")];
+- char kconf_id_strings_str19[sizeof("defconfig_list")];
+- char kconf_id_strings_str21[sizeof("string")];
+- char kconf_id_strings_str22[sizeof("if")];
+- char kconf_id_strings_str23[sizeof("int")];
+- char kconf_id_strings_str26[sizeof("select")];
++ char kconf_id_strings_str14[sizeof("defconfig_list")];
++ char kconf_id_strings_str17[sizeof("on")];
++ char kconf_id_strings_str18[sizeof("optional")];
++ char kconf_id_strings_str21[sizeof("option")];
++ char kconf_id_strings_str22[sizeof("endmenu")];
++ char kconf_id_strings_str23[sizeof("mainmenu")];
++ char kconf_id_strings_str25[sizeof("menuconfig")];
+ char kconf_id_strings_str27[sizeof("modules")];
+- char kconf_id_strings_str28[sizeof("tristate")];
+ char kconf_id_strings_str29[sizeof("menu")];
+- char kconf_id_strings_str31[sizeof("source")];
++ char kconf_id_strings_str31[sizeof("select")];
+ char kconf_id_strings_str32[sizeof("comment")];
+- char kconf_id_strings_str33[sizeof("hex")];
+- char kconf_id_strings_str35[sizeof("menuconfig")];
+- char kconf_id_strings_str36[sizeof("prompt")];
+- char kconf_id_strings_str37[sizeof("depends")];
+- char kconf_id_strings_str48[sizeof("mainmenu")];
++ char kconf_id_strings_str33[sizeof("env")];
++ char kconf_id_strings_str35[sizeof("range")];
++ char kconf_id_strings_str36[sizeof("choice")];
++ char kconf_id_strings_str39[sizeof("bool")];
++ char kconf_id_strings_str41[sizeof("source")];
++ char kconf_id_strings_str42[sizeof("visible")];
++ char kconf_id_strings_str43[sizeof("hex")];
++ char kconf_id_strings_str46[sizeof("config")];
++ char kconf_id_strings_str47[sizeof("boolean")];
++ char kconf_id_strings_str51[sizeof("string")];
++ char kconf_id_strings_str54[sizeof("help")];
++ char kconf_id_strings_str56[sizeof("prompt")];
++ char kconf_id_strings_str72[sizeof("depends")];
+ };
+-static struct kconf_id_strings_t kconf_id_strings_contents =
++static const struct kconf_id_strings_t kconf_id_strings_contents =
+ {
+- "on",
+- "env",
++ "if",
++ "int",
+ "endif",
++ "default",
++ "tristate",
++ "endchoice",
++ "def_tristate",
++ "def_bool",
++ "defconfig_list",
++ "on",
++ "optional",
+ "option",
+ "endmenu",
+- "optional",
+- "endchoice",
++ "mainmenu",
++ "menuconfig",
++ "modules",
++ "menu",
++ "select",
++ "comment",
++ "env",
+ "range",
+ "choice",
+- "default",
+- "def_bool",
+- "help",
+ "bool",
++ "source",
++ "visible",
++ "hex",
+ "config",
+- "def_tristate",
+ "boolean",
+- "defconfig_list",
+ "string",
+- "if",
+- "int",
+- "select",
+- "modules",
+- "tristate",
+- "menu",
+- "source",
+- "comment",
+- "hex",
+- "menuconfig",
++ "help",
+ "prompt",
+- "depends",
+- "mainmenu"
++ "depends"
+ };
+ #define kconf_id_strings ((const char *) &kconf_id_strings_contents)
+ #ifdef __GNUC__
+ __inline
+-#ifdef __GNUC_STDC_INLINE__
++#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
+ __attribute__ ((__gnu_inline__))
+ #endif
+ #endif
+-struct kconf_id *
++const struct kconf_id *
+ kconf_id_lookup (register const char *str, register unsigned int len)
+ {
+ enum
+ {
+- TOTAL_KEYWORDS = 31,
++ TOTAL_KEYWORDS = 32,
+ MIN_WORD_LENGTH = 2,
+ MAX_WORD_LENGTH = 14,
+ MIN_HASH_VALUE = 2,
+- MAX_HASH_VALUE = 48
++ MAX_HASH_VALUE = 72
+ };
+
+- static struct kconf_id wordlist[] =
++ static const struct kconf_id wordlist[] =
+ {
+ {-1}, {-1},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_ON, TF_PARAM},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_OPT_ENV, TF_OPTION},
++#line 25 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM},
++#line 36 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT},
+ {-1},
++#line 26 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_OPTION, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_ENDMENU, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_OPTIONAL, TF_COMMAND},
++ {-1},
++#line 29 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
++#line 31 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_TYPE, TF_COMMAND, S_TRISTATE},
++#line 20 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_RANGE, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str11, T_CHOICE, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
++ {-1}, {-1},
++#line 32 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_TRISTATE},
++#line 35 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_HELP, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str15, T_TYPE, TF_COMMAND, S_BOOLEAN},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_CONFIG, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_DEFAULT, TF_COMMAND, S_TRISTATE},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_TYPE, TF_COMMAND, S_BOOLEAN},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str19, T_OPT_DEFCONFIG_LIST,TF_OPTION},
+- {-1},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_TYPE, TF_COMMAND, S_STRING},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_IF, TF_COMMAND|TF_PARAM},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_TYPE, TF_COMMAND, S_INT},
++#line 45 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_OPT_DEFCONFIG_LIST,TF_OPTION},
++ {-1}, {-1},
++#line 43 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_ON, TF_PARAM},
++#line 28 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_OPTIONAL, TF_COMMAND},
+ {-1}, {-1},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str26, T_SELECT, TF_COMMAND},
++#line 42 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_OPTION, TF_COMMAND},
++#line 17 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ENDMENU, TF_COMMAND},
++#line 15 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_MAINMENU, TF_COMMAND},
++ {-1},
++#line 23 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_MENUCONFIG, TF_COMMAND},
++ {-1},
++#line 44 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_TYPE, TF_COMMAND, S_TRISTATE},
++ {-1},
++#line 16 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
+ {-1},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SOURCE, TF_COMMAND},
++#line 39 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SELECT, TF_COMMAND},
++#line 21 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_TYPE, TF_COMMAND, S_HEX},
++#line 46 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_OPT_ENV, TF_OPTION},
+ {-1},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_MENUCONFIG, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_PROMPT, TF_COMMAND},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_DEPENDS, TF_COMMAND},
+- {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
++#line 40 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_RANGE, TF_COMMAND},
++#line 19 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_CHOICE, TF_COMMAND},
++ {-1}, {-1},
++#line 33 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39, T_TYPE, TF_COMMAND, S_BOOLEAN},
++ {-1},
++#line 18 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SOURCE, TF_COMMAND},
++#line 41 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42, T_VISIBLE, TF_COMMAND},
++#line 37 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43, T_TYPE, TF_COMMAND, S_HEX},
++ {-1}, {-1},
++#line 22 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_CONFIG, TF_COMMAND},
++#line 34 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47, T_TYPE, TF_COMMAND, S_BOOLEAN},
++ {-1}, {-1}, {-1},
++#line 38 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51, T_TYPE, TF_COMMAND, S_STRING},
++ {-1}, {-1},
++#line 24 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str54, T_HELP, TF_COMMAND},
+ {-1},
+- {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str48, T_MAINMENU, TF_COMMAND}
++#line 30 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str56, T_PROMPT, TF_COMMAND},
++ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
++ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
++#line 27 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72, T_DEPENDS, TF_COMMAND}
+ };
+
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+@@ -234,4 +282,5 @@
+ }
+ return 0;
+ }
++#line 47 "scripts/kconfig/zconf.gperf"
+
+diff -Nur uClibc-0.9.33.2/extra/config/zconf.l uClibc-git/extra/config/zconf.l
+--- uClibc-0.9.33.2/extra/config/zconf.l 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/zconf.l 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+-%option backup nostdinit noyywrap never-interactive full ecs
+-%option 8bit backup nodefault perf-report perf-report
++%option nostdinit noyywrap never-interactive full ecs
++%option 8bit nodefault perf-report perf-report
+ %option noinput
+ %x COMMAND HELP STRING PARAM
+ %{
+@@ -14,7 +14,6 @@
+ #include <string.h>
+ #include <unistd.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+ #define START_STRSIZE 16
+@@ -39,15 +38,15 @@
+ static void zconf_endhelp(void);
+ static void zconf_endfile(void);
+
+-void new_string(void)
++static void new_string(void)
+ {
+- text = malloc(START_STRSIZE);
++ text = xmalloc(START_STRSIZE);
+ text_asize = START_STRSIZE;
+ text_size = 0;
+ *text = 0;
+ }
+
+-void append_string(const char *str, int size)
++static void append_string(const char *str, int size)
+ {
+ int new_size = text_size + size + 1;
+ if (new_size > text_asize) {
+@@ -61,9 +60,9 @@
+ text[text_size] = 0;
+ }
+
+-void alloc_string(const char *str, int size)
++static void alloc_string(const char *str, int size)
+ {
+- text = malloc(size + 1);
++ text = xmalloc(size + 1);
+ memcpy(text, str, size);
+ text[size] = 0;
+ }
+@@ -96,7 +95,7 @@
+
+ <COMMAND>{
+ {n}+ {
+- struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
++ const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
+ BEGIN(PARAM);
+ current_pos.file = current_file;
+ current_pos.lineno = current_file->lineno;
+@@ -132,7 +131,7 @@
+ \n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
+ --- /* ignore */
+ ({n}|[-/.])+ {
+- struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
++ const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
+ if (id && id->flags & TF_PARAM) {
+ zconflval.id = id;
+ return id->token;
+@@ -289,42 +288,50 @@
+ exit(1);
+ }
+
+- current_buf = malloc(sizeof(*current_buf));
++ current_buf = xmalloc(sizeof(*current_buf));
+ memset(current_buf, 0, sizeof(*current_buf));
+
+ current_file = file_lookup(name);
+ current_file->lineno = 1;
+- current_file->flags = FILE_BUSY;
+ }
+
+ void zconf_nextfile(const char *name)
+ {
++ struct file *iter;
+ struct file *file = file_lookup(name);
+- struct buffer *buf = malloc(sizeof(*buf));
++ struct buffer *buf = xmalloc(sizeof(*buf));
+ memset(buf, 0, sizeof(*buf));
+
+ current_buf->state = YY_CURRENT_BUFFER;
+- yyin = zconf_fopen(name);
++ yyin = zconf_fopen(file->name);
+ if (!yyin) {
+- printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
++ printf("%s:%d: can't open file \"%s\"\n",
++ zconf_curname(), zconf_lineno(), file->name);
+ exit(1);
+ }
+ yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
+ buf->parent = current_buf;
+ current_buf = buf;
+
+- if (file->flags & FILE_BUSY) {
+- printf("%s:%d: do not source '%s' from itself\n",
+- zconf_curname(), zconf_lineno(), name);
+- exit(1);
+- }
+- if (file->flags & FILE_SCANNED) {
+- printf("%s:%d: file '%s' is already sourced from '%s'\n",
+- zconf_curname(), zconf_lineno(), name,
+- file->parent->name);
+- exit(1);
++ for (iter = current_file->parent; iter; iter = iter->parent ) {
++ if (!strcmp(current_file->name,iter->name) ) {
++ printf("%s:%d: recursive inclusion detected. "
++ "Inclusion path:\n current file : '%s'\n",
++ zconf_curname(), zconf_lineno(),
++ zconf_curname());
++ iter = current_file->parent;
++ while (iter && \
++ strcmp(iter->name,current_file->name)) {
++ printf(" included from: '%s:%d'\n",
++ iter->name, iter->lineno-1);
++ iter = iter->parent;
++ }
++ if (iter)
++ printf(" included from: '%s:%d'\n",
++ iter->name, iter->lineno+1);
++ exit(1);
++ }
+ }
+- file->flags |= FILE_BUSY;
+ file->lineno = 1;
+ file->parent = current_file;
+ current_file = file;
+@@ -334,8 +341,6 @@
+ {
+ struct buffer *parent;
+
+- current_file->flags |= FILE_SCANNED;
+- current_file->flags &= ~FILE_BUSY;
+ current_file = current_file->parent;
+
+ parent = current_buf->parent;
+@@ -353,7 +358,7 @@
+ return current_pos.lineno;
+ }
+
+-char *zconf_curname(void)
++const char *zconf_curname(void)
+ {
+ return current_pos.file ? current_pos.file->name : "<none>";
+ }
+diff -Nur uClibc-0.9.33.2/extra/config/zconf.lex.c_shipped uClibc-git/extra/config/zconf.lex.c_shipped
+--- uClibc-0.9.33.2/extra/config/zconf.lex.c_shipped 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/config/zconf.lex.c_shipped 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,2420 @@
++
++#line 3 "scripts/kconfig/zconf.lex.c_shipped"
++
++#define YY_INT_ALIGNED short int
++
++/* A lexical scanner generated by flex */
++
++#define yy_create_buffer zconf_create_buffer
++#define yy_delete_buffer zconf_delete_buffer
++#define yy_flex_debug zconf_flex_debug
++#define yy_init_buffer zconf_init_buffer
++#define yy_flush_buffer zconf_flush_buffer
++#define yy_load_buffer_state zconf_load_buffer_state
++#define yy_switch_to_buffer zconf_switch_to_buffer
++#define yyin zconfin
++#define yyleng zconfleng
++#define yylex zconflex
++#define yylineno zconflineno
++#define yyout zconfout
++#define yyrestart zconfrestart
++#define yytext zconftext
++#define yywrap zconfwrap
++#define yyalloc zconfalloc
++#define yyrealloc zconfrealloc
++#define yyfree zconffree
++
++#define FLEX_SCANNER
++#define YY_FLEX_MAJOR_VERSION 2
++#define YY_FLEX_MINOR_VERSION 5
++#define YY_FLEX_SUBMINOR_VERSION 35
++#if YY_FLEX_SUBMINOR_VERSION > 0
++#define FLEX_BETA
++#endif
++
++/* First, we deal with platform-specific or compiler-specific issues. */
++
++/* begin standard C headers. */
++#include <stdio.h>
++#include <string.h>
++#include <errno.h>
++#include <stdlib.h>
++
++/* end standard C headers. */
++
++/* flex integer type definitions */
++
++#ifndef FLEXINT_H
++#define FLEXINT_H
++
++/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
++
++#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
++
++/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
++ * if you want the limit (max/min) macros for int types.
++ */
++#ifndef __STDC_LIMIT_MACROS
++#define __STDC_LIMIT_MACROS 1
++#endif
++
++#include <inttypes.h>
++typedef int8_t flex_int8_t;
++typedef uint8_t flex_uint8_t;
++typedef int16_t flex_int16_t;
++typedef uint16_t flex_uint16_t;
++typedef int32_t flex_int32_t;
++typedef uint32_t flex_uint32_t;
++#else
++typedef signed char flex_int8_t;
++typedef short int flex_int16_t;
++typedef int flex_int32_t;
++typedef unsigned char flex_uint8_t;
++typedef unsigned short int flex_uint16_t;
++typedef unsigned int flex_uint32_t;
++#endif /* ! C99 */
++
++/* Limits of integral types. */
++#ifndef INT8_MIN
++#define INT8_MIN (-128)
++#endif
++#ifndef INT16_MIN
++#define INT16_MIN (-32767-1)
++#endif
++#ifndef INT32_MIN
++#define INT32_MIN (-2147483647-1)
++#endif
++#ifndef INT8_MAX
++#define INT8_MAX (127)
++#endif
++#ifndef INT16_MAX
++#define INT16_MAX (32767)
++#endif
++#ifndef INT32_MAX
++#define INT32_MAX (2147483647)
++#endif
++#ifndef UINT8_MAX
++#define UINT8_MAX (255U)
++#endif
++#ifndef UINT16_MAX
++#define UINT16_MAX (65535U)
++#endif
++#ifndef UINT32_MAX
++#define UINT32_MAX (4294967295U)
++#endif
++
++#endif /* ! FLEXINT_H */
++
++#ifdef __cplusplus
++
++/* The "const" storage-class-modifier is valid. */
++#define YY_USE_CONST
++
++#else /* ! __cplusplus */
++
++/* C99 requires __STDC__ to be defined as 1. */
++#if defined (__STDC__)
++
++#define YY_USE_CONST
++
++#endif /* defined (__STDC__) */
++#endif /* ! __cplusplus */
++
++#ifdef YY_USE_CONST
++#define yyconst const
++#else
++#define yyconst
++#endif
++
++/* Returned upon end-of-file. */
++#define YY_NULL 0
++
++/* Promotes a possibly negative, possibly signed char to an unsigned
++ * integer for use as an array index. If the signed char is negative,
++ * we want to instead treat it as an 8-bit unsigned char, hence the
++ * double cast.
++ */
++#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
++
++/* Enter a start condition. This macro really ought to take a parameter,
++ * but we do it the disgusting crufty way forced on us by the ()-less
++ * definition of BEGIN.
++ */
++#define BEGIN (yy_start) = 1 + 2 *
++
++/* Translate the current start state into a value that can be later handed
++ * to BEGIN to return to the state. The YYSTATE alias is for lex
++ * compatibility.
++ */
++#define YY_START (((yy_start) - 1) / 2)
++#define YYSTATE YY_START
++
++/* Action number for EOF rule of a given start state. */
++#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
++
++/* Special action meaning "start processing a new file". */
++#define YY_NEW_FILE zconfrestart(zconfin )
++
++#define YY_END_OF_BUFFER_CHAR 0
++
++/* Size of default input buffer. */
++#ifndef YY_BUF_SIZE
++#define YY_BUF_SIZE 16384
++#endif
++
++/* The state buf must be large enough to hold one state per character in the main buffer.
++ */
++#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
++
++#ifndef YY_TYPEDEF_YY_BUFFER_STATE
++#define YY_TYPEDEF_YY_BUFFER_STATE
++typedef struct yy_buffer_state *YY_BUFFER_STATE;
++#endif
++
++extern int zconfleng;
++
++extern FILE *zconfin, *zconfout;
++
++#define EOB_ACT_CONTINUE_SCAN 0
++#define EOB_ACT_END_OF_FILE 1
++#define EOB_ACT_LAST_MATCH 2
++
++ #define YY_LESS_LINENO(n)
++
++/* Return all but the first "n" matched characters back to the input stream. */
++#define yyless(n) \
++ do \
++ { \
++ /* Undo effects of setting up zconftext. */ \
++ int yyless_macro_arg = (n); \
++ YY_LESS_LINENO(yyless_macro_arg);\
++ *yy_cp = (yy_hold_char); \
++ YY_RESTORE_YY_MORE_OFFSET \
++ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
++ YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
++ } \
++ while ( 0 )
++
++#define unput(c) yyunput( c, (yytext_ptr) )
++
++#ifndef YY_TYPEDEF_YY_SIZE_T
++#define YY_TYPEDEF_YY_SIZE_T
++typedef size_t yy_size_t;
++#endif
++
++#ifndef YY_STRUCT_YY_BUFFER_STATE
++#define YY_STRUCT_YY_BUFFER_STATE
++struct yy_buffer_state
++ {
++ FILE *yy_input_file;
++
++ char *yy_ch_buf; /* input buffer */
++ char *yy_buf_pos; /* current position in input buffer */
++
++ /* Size of input buffer in bytes, not including room for EOB
++ * characters.
++ */
++ yy_size_t yy_buf_size;
++
++ /* Number of characters read into yy_ch_buf, not including EOB
++ * characters.
++ */
++ int yy_n_chars;
++
++ /* Whether we "own" the buffer - i.e., we know we created it,
++ * and can realloc() it to grow it, and should free() it to
++ * delete it.
++ */
++ int yy_is_our_buffer;
++
++ /* Whether this is an "interactive" input source; if so, and
++ * if we're using stdio for input, then we want to use getc()
++ * instead of fread(), to make sure we stop fetching input after
++ * each newline.
++ */
++ int yy_is_interactive;
++
++ /* Whether we're considered to be at the beginning of a line.
++ * If so, '^' rules will be active on the next match, otherwise
++ * not.
++ */
++ int yy_at_bol;
++
++ int yy_bs_lineno; /**< The line count. */
++ int yy_bs_column; /**< The column count. */
++
++ /* Whether to try to fill the input buffer when we reach the
++ * end of it.
++ */
++ int yy_fill_buffer;
++
++ int yy_buffer_status;
++
++#define YY_BUFFER_NEW 0
++#define YY_BUFFER_NORMAL 1
++ /* When an EOF's been seen but there's still some text to process
++ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
++ * shouldn't try reading from the input source any more. We might
++ * still have a bunch of tokens to match, though, because of
++ * possible backing-up.
++ *
++ * When we actually see the EOF, we change the status to "new"
++ * (via zconfrestart()), so that the user can continue scanning by
++ * just pointing zconfin at a new input file.
++ */
++#define YY_BUFFER_EOF_PENDING 2
++
++ };
++#endif /* !YY_STRUCT_YY_BUFFER_STATE */
++
++/* Stack of input buffers. */
++static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
++static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
++static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
++
++/* We provide macros for accessing buffer states in case in the
++ * future we want to put the buffer states in a more general
++ * "scanner state".
++ *
++ * Returns the top of the stack, or NULL.
++ */
++#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
++ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
++ : NULL)
++
++/* Same as previous macro, but useful when we know that the buffer stack is not
++ * NULL or when we need an lvalue. For internal use only.
++ */
++#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
++
++/* yy_hold_char holds the character lost when zconftext is formed. */
++static char yy_hold_char;
++static int yy_n_chars; /* number of characters read into yy_ch_buf */
++int zconfleng;
++
++/* Points to current character in buffer. */
++static char *yy_c_buf_p = (char *) 0;
++static int yy_init = 0; /* whether we need to initialize */
++static int yy_start = 0; /* start state number */
++
++/* Flag which is used to allow zconfwrap()'s to do buffer switches
++ * instead of setting up a fresh zconfin. A bit of a hack ...
++ */
++static int yy_did_buffer_switch_on_eof;
++
++void zconfrestart (FILE *input_file );
++void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer );
++YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size );
++void zconf_delete_buffer (YY_BUFFER_STATE b );
++void zconf_flush_buffer (YY_BUFFER_STATE b );
++void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer );
++void zconfpop_buffer_state (void );
++
++static void zconfensure_buffer_stack (void );
++static void zconf_load_buffer_state (void );
++static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file );
++
++#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
++
++YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size );
++YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str );
++YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len );
++
++void *zconfalloc (yy_size_t );
++void *zconfrealloc (void *,yy_size_t );
++void zconffree (void * );
++
++#define yy_new_buffer zconf_create_buffer
++
++#define yy_set_interactive(is_interactive) \
++ { \
++ if ( ! YY_CURRENT_BUFFER ){ \
++ zconfensure_buffer_stack (); \
++ YY_CURRENT_BUFFER_LVALUE = \
++ zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
++ } \
++ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
++ }
++
++#define yy_set_bol(at_bol) \
++ { \
++ if ( ! YY_CURRENT_BUFFER ){\
++ zconfensure_buffer_stack (); \
++ YY_CURRENT_BUFFER_LVALUE = \
++ zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
++ } \
++ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
++ }
++
++#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
++
++/* Begin user sect3 */
++
++#define zconfwrap(n) 1
++#define YY_SKIP_YYWRAP
++
++typedef unsigned char YY_CHAR;
++
++FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
++
++typedef int yy_state_type;
++
++extern int zconflineno;
++
++int zconflineno = 1;
++
++extern char *zconftext;
++#define yytext_ptr zconftext
++static yyconst flex_int16_t yy_nxt[][17] =
++ {
++ {
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0
++ },
++
++ {
++ 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
++ 12, 12, 12, 12, 12, 12, 12
++ },
++
++ {
++ 11, 12, 13, 14, 12, 12, 15, 12, 12, 12,
++ 12, 12, 12, 12, 12, 12, 12
++ },
++
++ {
++ 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
++ 16, 16, 16, 18, 16, 16, 16
++ },
++
++ {
++ 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
++ 16, 16, 16, 18, 16, 16, 16
++
++ },
++
++ {
++ 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
++ 19, 19, 19, 19, 19, 19, 19
++ },
++
++ {
++ 11, 19, 20, 21, 19, 19, 19, 19, 19, 19,
++ 19, 19, 19, 19, 19, 19, 19
++ },
++
++ {
++ 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
++ 22, 22, 22, 22, 22, 25, 22
++ },
++
++ {
++ 11, 22, 22, 23, 22, 24, 22, 22, 24, 22,
++ 22, 22, 22, 22, 22, 25, 22
++ },
++
++ {
++ 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
++ 33, 34, 35, 35, 36, 37, 38
++
++ },
++
++ {
++ 11, 26, 26, 27, 28, 29, 30, 31, 29, 32,
++ 33, 34, 35, 35, 36, 37, 38
++ },
++
++ {
++ -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,
++ -11, -11, -11, -11, -11, -11, -11
++ },
++
++ {
++ 11, -12, -12, -12, -12, -12, -12, -12, -12, -12,
++ -12, -12, -12, -12, -12, -12, -12
++ },
++
++ {
++ 11, -13, 39, 40, -13, -13, 41, -13, -13, -13,
++ -13, -13, -13, -13, -13, -13, -13
++ },
++
++ {
++ 11, -14, -14, -14, -14, -14, -14, -14, -14, -14,
++ -14, -14, -14, -14, -14, -14, -14
++
++ },
++
++ {
++ 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
++ 42, 42, 42, 42, 42, 42, 42
++ },
++
++ {
++ 11, -16, -16, -16, -16, -16, -16, -16, -16, -16,
++ -16, -16, -16, -16, -16, -16, -16
++ },
++
++ {
++ 11, -17, -17, -17, -17, -17, -17, -17, -17, -17,
++ -17, -17, -17, -17, -17, -17, -17
++ },
++
++ {
++ 11, -18, -18, -18, -18, -18, -18, -18, -18, -18,
++ -18, -18, -18, 44, -18, -18, -18
++ },
++
++ {
++ 11, 45, 45, -19, 45, 45, 45, 45, 45, 45,
++ 45, 45, 45, 45, 45, 45, 45
++
++ },
++
++ {
++ 11, -20, 46, 47, -20, -20, -20, -20, -20, -20,
++ -20, -20, -20, -20, -20, -20, -20
++ },
++
++ {
++ 11, 48, -21, -21, 48, 48, 48, 48, 48, 48,
++ 48, 48, 48, 48, 48, 48, 48
++ },
++
++ {
++ 11, 49, 49, 50, 49, -22, 49, 49, -22, 49,
++ 49, 49, 49, 49, 49, -22, 49
++ },
++
++ {
++ 11, -23, -23, -23, -23, -23, -23, -23, -23, -23,
++ -23, -23, -23, -23, -23, -23, -23
++ },
++
++ {
++ 11, -24, -24, -24, -24, -24, -24, -24, -24, -24,
++ -24, -24, -24, -24, -24, -24, -24
++
++ },
++
++ {
++ 11, 51, 51, 52, 51, 51, 51, 51, 51, 51,
++ 51, 51, 51, 51, 51, 51, 51
++ },
++
++ {
++ 11, -26, -26, -26, -26, -26, -26, -26, -26, -26,
++ -26, -26, -26, -26, -26, -26, -26
++ },
++
++ {
++ 11, -27, -27, -27, -27, -27, -27, -27, -27, -27,
++ -27, -27, -27, -27, -27, -27, -27
++ },
++
++ {
++ 11, -28, -28, -28, -28, -28, -28, -28, -28, -28,
++ -28, -28, -28, -28, 53, -28, -28
++ },
++
++ {
++ 11, -29, -29, -29, -29, -29, -29, -29, -29, -29,
++ -29, -29, -29, -29, -29, -29, -29
++
++ },
++
++ {
++ 11, 54, 54, -30, 54, 54, 54, 54, 54, 54,
++ 54, 54, 54, 54, 54, 54, 54
++ },
++
++ {
++ 11, -31, -31, -31, -31, -31, -31, 55, -31, -31,
++ -31, -31, -31, -31, -31, -31, -31
++ },
++
++ {
++ 11, -32, -32, -32, -32, -32, -32, -32, -32, -32,
++ -32, -32, -32, -32, -32, -32, -32
++ },
++
++ {
++ 11, -33, -33, -33, -33, -33, -33, -33, -33, -33,
++ -33, -33, -33, -33, -33, -33, -33
++ },
++
++ {
++ 11, -34, -34, -34, -34, -34, -34, -34, -34, -34,
++ -34, 56, 57, 57, -34, -34, -34
++
++ },
++
++ {
++ 11, -35, -35, -35, -35, -35, -35, -35, -35, -35,
++ -35, 57, 57, 57, -35, -35, -35
++ },
++
++ {
++ 11, -36, -36, -36, -36, -36, -36, -36, -36, -36,
++ -36, -36, -36, -36, -36, -36, -36
++ },
++
++ {
++ 11, -37, -37, 58, -37, -37, -37, -37, -37, -37,
++ -37, -37, -37, -37, -37, -37, -37
++ },
++
++ {
++ 11, -38, -38, -38, -38, -38, -38, -38, -38, -38,
++ -38, -38, -38, -38, -38, -38, 59
++ },
++
++ {
++ 11, -39, 39, 40, -39, -39, 41, -39, -39, -39,
++ -39, -39, -39, -39, -39, -39, -39
++
++ },
++
++ {
++ 11, -40, -40, -40, -40, -40, -40, -40, -40, -40,
++ -40, -40, -40, -40, -40, -40, -40
++ },
++
++ {
++ 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
++ 42, 42, 42, 42, 42, 42, 42
++ },
++
++ {
++ 11, 42, 42, 43, 42, 42, 42, 42, 42, 42,
++ 42, 42, 42, 42, 42, 42, 42
++ },
++
++ {
++ 11, -43, -43, -43, -43, -43, -43, -43, -43, -43,
++ -43, -43, -43, -43, -43, -43, -43
++ },
++
++ {
++ 11, -44, -44, -44, -44, -44, -44, -44, -44, -44,
++ -44, -44, -44, 44, -44, -44, -44
++
++ },
++
++ {
++ 11, 45, 45, -45, 45, 45, 45, 45, 45, 45,
++ 45, 45, 45, 45, 45, 45, 45
++ },
++
++ {
++ 11, -46, 46, 47, -46, -46, -46, -46, -46, -46,
++ -46, -46, -46, -46, -46, -46, -46
++ },
++
++ {
++ 11, 48, -47, -47, 48, 48, 48, 48, 48, 48,
++ 48, 48, 48, 48, 48, 48, 48
++ },
++
++ {
++ 11, -48, -48, -48, -48, -48, -48, -48, -48, -48,
++ -48, -48, -48, -48, -48, -48, -48
++ },
++
++ {
++ 11, 49, 49, 50, 49, -49, 49, 49, -49, 49,
++ 49, 49, 49, 49, 49, -49, 49
++
++ },
++
++ {
++ 11, -50, -50, -50, -50, -50, -50, -50, -50, -50,
++ -50, -50, -50, -50, -50, -50, -50
++ },
++
++ {
++ 11, -51, -51, 52, -51, -51, -51, -51, -51, -51,
++ -51, -51, -51, -51, -51, -51, -51
++ },
++
++ {
++ 11, -52, -52, -52, -52, -52, -52, -52, -52, -52,
++ -52, -52, -52, -52, -52, -52, -52
++ },
++
++ {
++ 11, -53, -53, -53, -53, -53, -53, -53, -53, -53,
++ -53, -53, -53, -53, -53, -53, -53
++ },
++
++ {
++ 11, 54, 54, -54, 54, 54, 54, 54, 54, 54,
++ 54, 54, 54, 54, 54, 54, 54
++
++ },
++
++ {
++ 11, -55, -55, -55, -55, -55, -55, -55, -55, -55,
++ -55, -55, -55, -55, -55, -55, -55
++ },
++
++ {
++ 11, -56, -56, -56, -56, -56, -56, -56, -56, -56,
++ -56, 60, 57, 57, -56, -56, -56
++ },
++
++ {
++ 11, -57, -57, -57, -57, -57, -57, -57, -57, -57,
++ -57, 57, 57, 57, -57, -57, -57
++ },
++
++ {
++ 11, -58, -58, -58, -58, -58, -58, -58, -58, -58,
++ -58, -58, -58, -58, -58, -58, -58
++ },
++
++ {
++ 11, -59, -59, -59, -59, -59, -59, -59, -59, -59,
++ -59, -59, -59, -59, -59, -59, -59
++
++ },
++
++ {
++ 11, -60, -60, -60, -60, -60, -60, -60, -60, -60,
++ -60, 57, 57, 57, -60, -60, -60
++ },
++
++ } ;
++
++static yy_state_type yy_get_previous_state (void );
++static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
++static int yy_get_next_buffer (void );
++static void yy_fatal_error (yyconst char msg[] );
++
++/* Done after the current pattern has been matched and before the
++ * corresponding action - sets up zconftext.
++ */
++#define YY_DO_BEFORE_ACTION \
++ (yytext_ptr) = yy_bp; \
++ zconfleng = (size_t) (yy_cp - yy_bp); \
++ (yy_hold_char) = *yy_cp; \
++ *yy_cp = '\0'; \
++ (yy_c_buf_p) = yy_cp;
++
++#define YY_NUM_RULES 33
++#define YY_END_OF_BUFFER 34
++/* This struct is not used in this scanner,
++ but its presence is necessary. */
++struct yy_trans_info
++ {
++ flex_int32_t yy_verify;
++ flex_int32_t yy_nxt;
++ };
++static yyconst flex_int16_t yy_accept[61] =
++ { 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 34, 5, 4, 2, 3, 7, 8, 6, 32, 29,
++ 31, 24, 28, 27, 26, 22, 17, 13, 16, 20,
++ 22, 11, 12, 19, 19, 14, 22, 22, 4, 2,
++ 3, 3, 1, 6, 32, 29, 31, 30, 24, 23,
++ 26, 25, 15, 20, 9, 19, 19, 21, 10, 18
++ } ;
++
++static yyconst flex_int32_t yy_ec[256] =
++ { 0,
++ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 2, 4, 5, 6, 1, 1, 7, 8, 9,
++ 10, 1, 1, 1, 11, 12, 12, 13, 13, 13,
++ 13, 13, 13, 13, 13, 13, 13, 1, 1, 1,
++ 14, 1, 1, 1, 13, 13, 13, 13, 13, 13,
++ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
++ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
++ 1, 15, 1, 1, 13, 1, 13, 13, 13, 13,
++
++ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
++ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
++ 13, 13, 1, 16, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1
++ } ;
++
++extern int zconf_flex_debug;
++int zconf_flex_debug = 0;
++
++/* The intent behind this definition is that it'll catch
++ * any uses of REJECT which flex missed.
++ */
++#define REJECT reject_used_but_not_detected
++#define yymore() yymore_used_but_not_detected
++#define YY_MORE_ADJ 0
++#define YY_RESTORE_YY_MORE_OFFSET
++char *zconftext;
++#define YY_NO_INPUT 1
++
++/*
++ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
++ * Released under the terms of the GNU GPL v2.0.
++ */
++
++#include <limits.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++#include "lkc.h"
++
++#define START_STRSIZE 16
++
++static struct {
++ struct file *file;
++ int lineno;
++} current_pos;
++
++static char *text;
++static int text_size, text_asize;
++
++struct buffer {
++ struct buffer *parent;
++ YY_BUFFER_STATE state;
++};
++
++struct buffer *current_buf;
++
++static int last_ts, first_ts;
++
++static void zconf_endhelp(void);
++static void zconf_endfile(void);
++
++static void new_string(void)
++{
++ text = xmalloc(START_STRSIZE);
++ text_asize = START_STRSIZE;
++ text_size = 0;
++ *text = 0;
++}
++
++static void append_string(const char *str, int size)
++{
++ int new_size = text_size + size + 1;
++ if (new_size > text_asize) {
++ new_size += START_STRSIZE - 1;
++ new_size &= -START_STRSIZE;
++ text = realloc(text, new_size);
++ text_asize = new_size;
++ }
++ memcpy(text + text_size, str, size);
++ text_size += size;
++ text[text_size] = 0;
++}
++
++static void alloc_string(const char *str, int size)
++{
++ text = xmalloc(size + 1);
++ memcpy(text, str, size);
++ text[size] = 0;
++}
++
++#define INITIAL 0
++#define COMMAND 1
++#define HELP 2
++#define STRING 3
++#define PARAM 4
++
++#ifndef YY_NO_UNISTD_H
++/* Special case for "unistd.h", since it is non-ANSI. We include it way
++ * down here because we want the user's section 1 to have been scanned first.
++ * The user has a chance to override it with an option.
++ */
++#include <unistd.h>
++#endif
++
++#ifndef YY_EXTRA_TYPE
++#define YY_EXTRA_TYPE void *
++#endif
++
++static int yy_init_globals (void );
++
++/* Accessor methods to globals.
++ These are made visible to non-reentrant scanners for convenience. */
++
++int zconflex_destroy (void );
++
++int zconfget_debug (void );
++
++void zconfset_debug (int debug_flag );
++
++YY_EXTRA_TYPE zconfget_extra (void );
++
++void zconfset_extra (YY_EXTRA_TYPE user_defined );
++
++FILE *zconfget_in (void );
++
++void zconfset_in (FILE * in_str );
++
++FILE *zconfget_out (void );
++
++void zconfset_out (FILE * out_str );
++
++int zconfget_leng (void );
++
++char *zconfget_text (void );
++
++int zconfget_lineno (void );
++
++void zconfset_lineno (int line_number );
++
++/* Macros after this point can all be overridden by user definitions in
++ * section 1.
++ */
++
++#ifndef YY_SKIP_YYWRAP
++#ifdef __cplusplus
++extern "C" int zconfwrap (void );
++#else
++extern int zconfwrap (void );
++#endif
++#endif
++
++ static void yyunput (int c,char *buf_ptr );
++
++#ifndef yytext_ptr
++static void yy_flex_strncpy (char *,yyconst char *,int );
++#endif
++
++#ifdef YY_NEED_STRLEN
++static int yy_flex_strlen (yyconst char * );
++#endif
++
++#ifndef YY_NO_INPUT
++
++#ifdef __cplusplus
++static int yyinput (void );
++#else
++static int input (void );
++#endif
++
++#endif
++
++/* Amount of stuff to slurp up with each read. */
++#ifndef YY_READ_BUF_SIZE
++#define YY_READ_BUF_SIZE 8192
++#endif
++
++/* Copy whatever the last rule matched to the standard output. */
++#ifndef ECHO
++/* This used to be an fputs(), but since the string might contain NUL's,
++ * we now use fwrite().
++ */
++#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
++#endif
++
++/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
++ * is returned in "result".
++ */
++#ifndef YY_INPUT
++#define YY_INPUT(buf,result,max_size) \
++ errno=0; \
++ while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
++ { \
++ if( errno != EINTR) \
++ { \
++ YY_FATAL_ERROR( "input in flex scanner failed" ); \
++ break; \
++ } \
++ errno=0; \
++ clearerr(zconfin); \
++ }\
++\
++
++#endif
++
++/* No semi-colon after return; correct usage is to write "yyterminate();" -
++ * we don't want an extra ';' after the "return" because that will cause
++ * some compilers to complain about unreachable statements.
++ */
++#ifndef yyterminate
++#define yyterminate() return YY_NULL
++#endif
++
++/* Number of entries by which start-condition stack grows. */
++#ifndef YY_START_STACK_INCR
++#define YY_START_STACK_INCR 25
++#endif
++
++/* Report a fatal error. */
++#ifndef YY_FATAL_ERROR
++#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
++#endif
++
++/* end tables serialization structures and prototypes */
++
++/* Default declaration of generated scanner - a define so the user can
++ * easily add parameters.
++ */
++#ifndef YY_DECL
++#define YY_DECL_IS_OURS 1
++
++extern int zconflex (void);
++
++#define YY_DECL int zconflex (void)
++#endif /* !YY_DECL */
++
++/* Code executed at the beginning of each rule, after zconftext and zconfleng
++ * have been set up.
++ */
++#ifndef YY_USER_ACTION
++#define YY_USER_ACTION
++#endif
++
++/* Code executed at the end of each rule. */
++#ifndef YY_BREAK
++#define YY_BREAK break;
++#endif
++
++#define YY_RULE_SETUP \
++ YY_USER_ACTION
++
++/** The main scanner function which does all the work.
++ */
++YY_DECL
++{
++ register yy_state_type yy_current_state;
++ register char *yy_cp, *yy_bp;
++ register int yy_act;
++
++ int str = 0;
++ int ts, i;
++
++ if ( !(yy_init) )
++ {
++ (yy_init) = 1;
++
++#ifdef YY_USER_INIT
++ YY_USER_INIT;
++#endif
++
++ if ( ! (yy_start) )
++ (yy_start) = 1; /* first start state */
++
++ if ( ! zconfin )
++ zconfin = stdin;
++
++ if ( ! zconfout )
++ zconfout = stdout;
++
++ if ( ! YY_CURRENT_BUFFER ) {
++ zconfensure_buffer_stack ();
++ YY_CURRENT_BUFFER_LVALUE =
++ zconf_create_buffer(zconfin,YY_BUF_SIZE );
++ }
++
++ zconf_load_buffer_state( );
++ }
++
++ while ( 1 ) /* loops until end-of-file is reached */
++ {
++ yy_cp = (yy_c_buf_p);
++
++ /* Support of zconftext. */
++ *yy_cp = (yy_hold_char);
++
++ /* yy_bp points to the position in yy_ch_buf of the start of
++ * the current run.
++ */
++ yy_bp = yy_cp;
++
++ yy_current_state = (yy_start);
++yy_match:
++ while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)] ]) > 0 )
++ ++yy_cp;
++
++ yy_current_state = -yy_current_state;
++
++yy_find_action:
++ yy_act = yy_accept[yy_current_state];
++
++ YY_DO_BEFORE_ACTION;
++
++do_action: /* This label is used only to access EOF actions. */
++
++ switch ( yy_act )
++ { /* beginning of action switch */
++case 1:
++/* rule 1 can match eol */
++case 2:
++/* rule 2 can match eol */
++YY_RULE_SETUP
++{
++ current_file->lineno++;
++ return T_EOL;
++}
++ YY_BREAK
++case 3:
++YY_RULE_SETUP
++
++ YY_BREAK
++case 4:
++YY_RULE_SETUP
++{
++ BEGIN(COMMAND);
++}
++ YY_BREAK
++case 5:
++YY_RULE_SETUP
++{
++ unput(zconftext[0]);
++ BEGIN(COMMAND);
++}
++ YY_BREAK
++
++case 6:
++YY_RULE_SETUP
++{
++ const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
++ BEGIN(PARAM);
++ current_pos.file = current_file;
++ current_pos.lineno = current_file->lineno;
++ if (id && id->flags & TF_COMMAND) {
++ zconflval.id = id;
++ return id->token;
++ }
++ alloc_string(zconftext, zconfleng);
++ zconflval.string = text;
++ return T_WORD;
++ }
++ YY_BREAK
++case 7:
++YY_RULE_SETUP
++
++ YY_BREAK
++case 8:
++/* rule 8 can match eol */
++YY_RULE_SETUP
++{
++ BEGIN(INITIAL);
++ current_file->lineno++;
++ return T_EOL;
++ }
++ YY_BREAK
++
++case 9:
++YY_RULE_SETUP
++return T_AND;
++ YY_BREAK
++case 10:
++YY_RULE_SETUP
++return T_OR;
++ YY_BREAK
++case 11:
++YY_RULE_SETUP
++return T_OPEN_PAREN;
++ YY_BREAK
++case 12:
++YY_RULE_SETUP
++return T_CLOSE_PAREN;
++ YY_BREAK
++case 13:
++YY_RULE_SETUP
++return T_NOT;
++ YY_BREAK
++case 14:
++YY_RULE_SETUP
++return T_EQUAL;
++ YY_BREAK
++case 15:
++YY_RULE_SETUP
++return T_UNEQUAL;
++ YY_BREAK
++case 16:
++YY_RULE_SETUP
++{
++ str = zconftext[0];
++ new_string();
++ BEGIN(STRING);
++ }
++ YY_BREAK
++case 17:
++/* rule 17 can match eol */
++YY_RULE_SETUP
++BEGIN(INITIAL); current_file->lineno++; return T_EOL;
++ YY_BREAK
++case 18:
++YY_RULE_SETUP
++/* ignore */
++ YY_BREAK
++case 19:
++YY_RULE_SETUP
++{
++ const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
++ if (id && id->flags & TF_PARAM) {
++ zconflval.id = id;
++ return id->token;
++ }
++ alloc_string(zconftext, zconfleng);
++ zconflval.string = text;
++ return T_WORD;
++ }
++ YY_BREAK
++case 20:
++YY_RULE_SETUP
++/* comment */
++ YY_BREAK
++case 21:
++/* rule 21 can match eol */
++YY_RULE_SETUP
++current_file->lineno++;
++ YY_BREAK
++case 22:
++YY_RULE_SETUP
++
++ YY_BREAK
++case YY_STATE_EOF(PARAM):
++{
++ BEGIN(INITIAL);
++ }
++ YY_BREAK
++
++case 23:
++/* rule 23 can match eol */
++*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
++(yy_c_buf_p) = yy_cp -= 1;
++YY_DO_BEFORE_ACTION; /* set up zconftext again */
++YY_RULE_SETUP
++{
++ append_string(zconftext, zconfleng);
++ zconflval.string = text;
++ return T_WORD_QUOTE;
++ }
++ YY_BREAK
++case 24:
++YY_RULE_SETUP
++{
++ append_string(zconftext, zconfleng);
++ }
++ YY_BREAK
++case 25:
++/* rule 25 can match eol */
++*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
++(yy_c_buf_p) = yy_cp -= 1;
++YY_DO_BEFORE_ACTION; /* set up zconftext again */
++YY_RULE_SETUP
++{
++ append_string(zconftext + 1, zconfleng - 1);
++ zconflval.string = text;
++ return T_WORD_QUOTE;
++ }
++ YY_BREAK
++case 26:
++YY_RULE_SETUP
++{
++ append_string(zconftext + 1, zconfleng - 1);
++ }
++ YY_BREAK
++case 27:
++YY_RULE_SETUP
++{
++ if (str == zconftext[0]) {
++ BEGIN(PARAM);
++ zconflval.string = text;
++ return T_WORD_QUOTE;
++ } else
++ append_string(zconftext, 1);
++ }
++ YY_BREAK
++case 28:
++/* rule 28 can match eol */
++YY_RULE_SETUP
++{
++ printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
++ current_file->lineno++;
++ BEGIN(INITIAL);
++ return T_EOL;
++ }
++ YY_BREAK
++case YY_STATE_EOF(STRING):
++{
++ BEGIN(INITIAL);
++ }
++ YY_BREAK
++
++case 29:
++YY_RULE_SETUP
++{
++ ts = 0;
++ for (i = 0; i < zconfleng; i++) {
++ if (zconftext[i] == '\t')
++ ts = (ts & ~7) + 8;
++ else
++ ts++;
++ }
++ last_ts = ts;
++ if (first_ts) {
++ if (ts < first_ts) {
++ zconf_endhelp();
++ return T_HELPTEXT;
++ }
++ ts -= first_ts;
++ while (ts > 8) {
++ append_string(" ", 8);
++ ts -= 8;
++ }
++ append_string(" ", ts);
++ }
++ }
++ YY_BREAK
++case 30:
++/* rule 30 can match eol */
++*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
++(yy_c_buf_p) = yy_cp -= 1;
++YY_DO_BEFORE_ACTION; /* set up zconftext again */
++YY_RULE_SETUP
++{
++ current_file->lineno++;
++ zconf_endhelp();
++ return T_HELPTEXT;
++ }
++ YY_BREAK
++case 31:
++/* rule 31 can match eol */
++YY_RULE_SETUP
++{
++ current_file->lineno++;
++ append_string("\n", 1);
++ }
++ YY_BREAK
++case 32:
++YY_RULE_SETUP
++{
++ while (zconfleng) {
++ if ((zconftext[zconfleng-1] != ' ') && (zconftext[zconfleng-1] != '\t'))
++ break;
++ zconfleng--;
++ }
++ append_string(zconftext, zconfleng);
++ if (!first_ts)
++ first_ts = last_ts;
++ }
++ YY_BREAK
++case YY_STATE_EOF(HELP):
++{
++ zconf_endhelp();
++ return T_HELPTEXT;
++ }
++ YY_BREAK
++
++case YY_STATE_EOF(INITIAL):
++case YY_STATE_EOF(COMMAND):
++{
++ if (current_file) {
++ zconf_endfile();
++ return T_EOL;
++ }
++ fclose(zconfin);
++ yyterminate();
++}
++ YY_BREAK
++case 33:
++YY_RULE_SETUP
++YY_FATAL_ERROR( "flex scanner jammed" );
++ YY_BREAK
++
++ case YY_END_OF_BUFFER:
++ {
++ /* Amount of text matched not including the EOB char. */
++ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
++
++ /* Undo the effects of YY_DO_BEFORE_ACTION. */
++ *yy_cp = (yy_hold_char);
++ YY_RESTORE_YY_MORE_OFFSET
++
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
++ {
++ /* We're scanning a new file or input source. It's
++ * possible that this happened because the user
++ * just pointed zconfin at a new source and called
++ * zconflex(). If so, then we have to assure
++ * consistency between YY_CURRENT_BUFFER and our
++ * globals. Here is the right place to do so, because
++ * this is the first action (other than possibly a
++ * back-up) that will match for the new input source.
++ */
++ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
++ YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
++ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
++ }
++
++ /* Note that here we test for yy_c_buf_p "<=" to the position
++ * of the first EOB in the buffer, since yy_c_buf_p will
++ * already have been incremented past the NUL character
++ * (since all states make transitions on EOB to the
++ * end-of-buffer state). Contrast this with the test
++ * in input().
++ */
++ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
++ { /* This was really a NUL. */
++ yy_state_type yy_next_state;
++
++ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
++
++ yy_current_state = yy_get_previous_state( );
++
++ /* Okay, we're now positioned to make the NUL
++ * transition. We couldn't have
++ * yy_get_previous_state() go ahead and do it
++ * for us because it doesn't know how to deal
++ * with the possibility of jamming (and we don't
++ * want to build jamming into it because then it
++ * will run more slowly).
++ */
++
++ yy_next_state = yy_try_NUL_trans( yy_current_state );
++
++ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
++
++ if ( yy_next_state )
++ {
++ /* Consume the NUL. */
++ yy_cp = ++(yy_c_buf_p);
++ yy_current_state = yy_next_state;
++ goto yy_match;
++ }
++
++ else
++ {
++ yy_cp = (yy_c_buf_p);
++ goto yy_find_action;
++ }
++ }
++
++ else switch ( yy_get_next_buffer( ) )
++ {
++ case EOB_ACT_END_OF_FILE:
++ {
++ (yy_did_buffer_switch_on_eof) = 0;
++
++ if ( zconfwrap( ) )
++ {
++ /* Note: because we've taken care in
++ * yy_get_next_buffer() to have set up
++ * zconftext, we can now set up
++ * yy_c_buf_p so that if some total
++ * hoser (like flex itself) wants to
++ * call the scanner after we return the
++ * YY_NULL, it'll still work - another
++ * YY_NULL will get returned.
++ */
++ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
++
++ yy_act = YY_STATE_EOF(YY_START);
++ goto do_action;
++ }
++
++ else
++ {
++ if ( ! (yy_did_buffer_switch_on_eof) )
++ YY_NEW_FILE;
++ }
++ break;
++ }
++
++ case EOB_ACT_CONTINUE_SCAN:
++ (yy_c_buf_p) =
++ (yytext_ptr) + yy_amount_of_matched_text;
++
++ yy_current_state = yy_get_previous_state( );
++
++ yy_cp = (yy_c_buf_p);
++ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
++ goto yy_match;
++
++ case EOB_ACT_LAST_MATCH:
++ (yy_c_buf_p) =
++ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
++
++ yy_current_state = yy_get_previous_state( );
++
++ yy_cp = (yy_c_buf_p);
++ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
++ goto yy_find_action;
++ }
++ break;
++ }
++
++ default:
++ YY_FATAL_ERROR(
++ "fatal flex scanner internal error--no action found" );
++ } /* end of action switch */
++ } /* end of scanning one token */
++} /* end of zconflex */
++
++/* yy_get_next_buffer - try to read in a new buffer
++ *
++ * Returns a code representing an action:
++ * EOB_ACT_LAST_MATCH -
++ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
++ * EOB_ACT_END_OF_FILE - end of file
++ */
++static int yy_get_next_buffer (void)
++{
++ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
++ register char *source = (yytext_ptr);
++ register int number_to_move, i;
++ int ret_val;
++
++ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
++ YY_FATAL_ERROR(
++ "fatal flex scanner internal error--end of buffer missed" );
++
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
++ { /* Don't try to fill the buffer, so this is an EOF. */
++ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
++ {
++ /* We matched a single character, the EOB, so
++ * treat this as a final EOF.
++ */
++ return EOB_ACT_END_OF_FILE;
++ }
++
++ else
++ {
++ /* We matched some text prior to the EOB, first
++ * process it.
++ */
++ return EOB_ACT_LAST_MATCH;
++ }
++ }
++
++ /* Try to read more data. */
++
++ /* First move last chars to start of buffer. */
++ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
++
++ for ( i = 0; i < number_to_move; ++i )
++ *(dest++) = *(source++);
++
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
++ /* don't do the read, it's not guaranteed to return an EOF,
++ * just force an EOF
++ */
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
++
++ else
++ {
++ int num_to_read =
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
++
++ while ( num_to_read <= 0 )
++ { /* Not enough room in the buffer - grow it. */
++
++ /* just a shorter name for the current buffer */
++ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
++
++ int yy_c_buf_p_offset =
++ (int) ((yy_c_buf_p) - b->yy_ch_buf);
++
++ if ( b->yy_is_our_buffer )
++ {
++ int new_size = b->yy_buf_size * 2;
++
++ if ( new_size <= 0 )
++ b->yy_buf_size += b->yy_buf_size / 8;
++ else
++ b->yy_buf_size *= 2;
++
++ b->yy_ch_buf = (char *)
++ /* Include room in for 2 EOB chars. */
++ zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
++ }
++ else
++ /* Can't grow it, we don't own it. */
++ b->yy_ch_buf = 0;
++
++ if ( ! b->yy_ch_buf )
++ YY_FATAL_ERROR(
++ "fatal error - scanner input buffer overflow" );
++
++ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
++
++ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
++ number_to_move - 1;
++
++ }
++
++ if ( num_to_read > YY_READ_BUF_SIZE )
++ num_to_read = YY_READ_BUF_SIZE;
++
++ /* Read in more data. */
++ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
++ (yy_n_chars), (size_t) num_to_read );
++
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
++ }
++
++ if ( (yy_n_chars) == 0 )
++ {
++ if ( number_to_move == YY_MORE_ADJ )
++ {
++ ret_val = EOB_ACT_END_OF_FILE;
++ zconfrestart(zconfin );
++ }
++
++ else
++ {
++ ret_val = EOB_ACT_LAST_MATCH;
++ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
++ YY_BUFFER_EOF_PENDING;
++ }
++ }
++
++ else
++ ret_val = EOB_ACT_CONTINUE_SCAN;
++
++ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
++ /* Extend the array by 50%, plus the number we really need. */
++ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
++ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) zconfrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
++ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
++ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
++ }
++
++ (yy_n_chars) += number_to_move;
++ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
++ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
++
++ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
++
++ return ret_val;
++}
++
++/* yy_get_previous_state - get the state just before the EOB char was reached */
++
++ static yy_state_type yy_get_previous_state (void)
++{
++ register yy_state_type yy_current_state;
++ register char *yy_cp;
++
++ yy_current_state = (yy_start);
++
++ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
++ {
++ yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
++ }
++
++ return yy_current_state;
++}
++
++/* yy_try_NUL_trans - try to make a transition on the NUL character
++ *
++ * synopsis
++ * next_state = yy_try_NUL_trans( current_state );
++ */
++ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
++{
++ register int yy_is_jam;
++
++ yy_current_state = yy_nxt[yy_current_state][1];
++ yy_is_jam = (yy_current_state <= 0);
++
++ return yy_is_jam ? 0 : yy_current_state;
++}
++
++ static void yyunput (int c, register char * yy_bp )
++{
++ register char *yy_cp;
++
++ yy_cp = (yy_c_buf_p);
++
++ /* undo effects of setting up zconftext */
++ *yy_cp = (yy_hold_char);
++
++ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
++ { /* need to shift things up to make room */
++ /* +2 for EOB chars. */
++ register int number_to_move = (yy_n_chars) + 2;
++ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
++ register char *source =
++ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
++
++ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
++ *--dest = *--source;
++
++ yy_cp += (int) (dest - source);
++ yy_bp += (int) (dest - source);
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
++ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
++
++ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
++ YY_FATAL_ERROR( "flex scanner push-back overflow" );
++ }
++
++ *--yy_cp = (char) c;
++
++ (yytext_ptr) = yy_bp;
++ (yy_hold_char) = *yy_cp;
++ (yy_c_buf_p) = yy_cp;
++}
++
++#ifndef YY_NO_INPUT
++#ifdef __cplusplus
++ static int yyinput (void)
++#else
++ static int input (void)
++#endif
++
++{
++ int c;
++
++ *(yy_c_buf_p) = (yy_hold_char);
++
++ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
++ {
++ /* yy_c_buf_p now points to the character we want to return.
++ * If this occurs *before* the EOB characters, then it's a
++ * valid NUL; if not, then we've hit the end of the buffer.
++ */
++ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
++ /* This was really a NUL. */
++ *(yy_c_buf_p) = '\0';
++
++ else
++ { /* need more input */
++ int offset = (yy_c_buf_p) - (yytext_ptr);
++ ++(yy_c_buf_p);
++
++ switch ( yy_get_next_buffer( ) )
++ {
++ case EOB_ACT_LAST_MATCH:
++ /* This happens because yy_g_n_b()
++ * sees that we've accumulated a
++ * token and flags that we need to
++ * try matching the token before
++ * proceeding. But for input(),
++ * there's no matching to consider.
++ * So convert the EOB_ACT_LAST_MATCH
++ * to EOB_ACT_END_OF_FILE.
++ */
++
++ /* Reset buffer status. */
++ zconfrestart(zconfin );
++
++ /*FALLTHROUGH*/
++
++ case EOB_ACT_END_OF_FILE:
++ {
++ if ( zconfwrap( ) )
++ return EOF;
++
++ if ( ! (yy_did_buffer_switch_on_eof) )
++ YY_NEW_FILE;
++#ifdef __cplusplus
++ return yyinput();
++#else
++ return input();
++#endif
++ }
++
++ case EOB_ACT_CONTINUE_SCAN:
++ (yy_c_buf_p) = (yytext_ptr) + offset;
++ break;
++ }
++ }
++ }
++
++ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
++ *(yy_c_buf_p) = '\0'; /* preserve zconftext */
++ (yy_hold_char) = *++(yy_c_buf_p);
++
++ return c;
++}
++#endif /* ifndef YY_NO_INPUT */
++
++/** Immediately switch to a different input stream.
++ * @param input_file A readable stream.
++ *
++ * @note This function does not reset the start condition to @c INITIAL .
++ */
++ void zconfrestart (FILE * input_file )
++{
++
++ if ( ! YY_CURRENT_BUFFER ){
++ zconfensure_buffer_stack ();
++ YY_CURRENT_BUFFER_LVALUE =
++ zconf_create_buffer(zconfin,YY_BUF_SIZE );
++ }
++
++ zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
++ zconf_load_buffer_state( );
++}
++
++/** Switch to a different input buffer.
++ * @param new_buffer The new input buffer.
++ *
++ */
++ void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer )
++{
++
++ /* TODO. We should be able to replace this entire function body
++ * with
++ * zconfpop_buffer_state();
++ * zconfpush_buffer_state(new_buffer);
++ */
++ zconfensure_buffer_stack ();
++ if ( YY_CURRENT_BUFFER == new_buffer )
++ return;
++
++ if ( YY_CURRENT_BUFFER )
++ {
++ /* Flush out information for old buffer. */
++ *(yy_c_buf_p) = (yy_hold_char);
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
++ }
++
++ YY_CURRENT_BUFFER_LVALUE = new_buffer;
++ zconf_load_buffer_state( );
++
++ /* We don't actually know whether we did this switch during
++ * EOF (zconfwrap()) processing, but the only time this flag
++ * is looked at is after zconfwrap() is called, so it's safe
++ * to go ahead and always set it.
++ */
++ (yy_did_buffer_switch_on_eof) = 1;
++}
++
++static void zconf_load_buffer_state (void)
++{
++ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
++ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
++ zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
++ (yy_hold_char) = *(yy_c_buf_p);
++}
++
++/** Allocate and initialize an input buffer state.
++ * @param file A readable stream.
++ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
++ *
++ * @return the allocated buffer state.
++ */
++ YY_BUFFER_STATE zconf_create_buffer (FILE * file, int size )
++{
++ YY_BUFFER_STATE b;
++
++ b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) );
++ if ( ! b )
++ YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
++
++ b->yy_buf_size = size;
++
++ /* yy_ch_buf has to be 2 characters longer than the size given because
++ * we need to put in 2 end-of-buffer characters.
++ */
++ b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2 );
++ if ( ! b->yy_ch_buf )
++ YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
++
++ b->yy_is_our_buffer = 1;
++
++ zconf_init_buffer(b,file );
++
++ return b;
++}
++
++/** Destroy the buffer.
++ * @param b a buffer created with zconf_create_buffer()
++ *
++ */
++ void zconf_delete_buffer (YY_BUFFER_STATE b )
++{
++
++ if ( ! b )
++ return;
++
++ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
++ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
++
++ if ( b->yy_is_our_buffer )
++ zconffree((void *) b->yy_ch_buf );
++
++ zconffree((void *) b );
++}
++
++/* Initializes or reinitializes a buffer.
++ * This function is sometimes called more than once on the same buffer,
++ * such as during a zconfrestart() or at EOF.
++ */
++ static void zconf_init_buffer (YY_BUFFER_STATE b, FILE * file )
++
++{
++ int oerrno = errno;
++
++ zconf_flush_buffer(b );
++
++ b->yy_input_file = file;
++ b->yy_fill_buffer = 1;
++
++ /* If b is the current buffer, then zconf_init_buffer was _probably_
++ * called from zconfrestart() or through yy_get_next_buffer.
++ * In that case, we don't want to reset the lineno or column.
++ */
++ if (b != YY_CURRENT_BUFFER){
++ b->yy_bs_lineno = 1;
++ b->yy_bs_column = 0;
++ }
++
++ b->yy_is_interactive = 0;
++
++ errno = oerrno;
++}
++
++/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
++ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
++ *
++ */
++ void zconf_flush_buffer (YY_BUFFER_STATE b )
++{
++ if ( ! b )
++ return;
++
++ b->yy_n_chars = 0;
++
++ /* We always need two end-of-buffer characters. The first causes
++ * a transition to the end-of-buffer state. The second causes
++ * a jam in that state.
++ */
++ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
++ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
++
++ b->yy_buf_pos = &b->yy_ch_buf[0];
++
++ b->yy_at_bol = 1;
++ b->yy_buffer_status = YY_BUFFER_NEW;
++
++ if ( b == YY_CURRENT_BUFFER )
++ zconf_load_buffer_state( );
++}
++
++/** Pushes the new state onto the stack. The new state becomes
++ * the current state. This function will allocate the stack
++ * if necessary.
++ * @param new_buffer The new state.
++ *
++ */
++void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
++{
++ if (new_buffer == NULL)
++ return;
++
++ zconfensure_buffer_stack();
++
++ /* This block is copied from zconf_switch_to_buffer. */
++ if ( YY_CURRENT_BUFFER )
++ {
++ /* Flush out information for old buffer. */
++ *(yy_c_buf_p) = (yy_hold_char);
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
++ }
++
++ /* Only push if top exists. Otherwise, replace top. */
++ if (YY_CURRENT_BUFFER)
++ (yy_buffer_stack_top)++;
++ YY_CURRENT_BUFFER_LVALUE = new_buffer;
++
++ /* copied from zconf_switch_to_buffer. */
++ zconf_load_buffer_state( );
++ (yy_did_buffer_switch_on_eof) = 1;
++}
++
++/** Removes and deletes the top of the stack, if present.
++ * The next element becomes the new top.
++ *
++ */
++void zconfpop_buffer_state (void)
++{
++ if (!YY_CURRENT_BUFFER)
++ return;
++
++ zconf_delete_buffer(YY_CURRENT_BUFFER );
++ YY_CURRENT_BUFFER_LVALUE = NULL;
++ if ((yy_buffer_stack_top) > 0)
++ --(yy_buffer_stack_top);
++
++ if (YY_CURRENT_BUFFER) {
++ zconf_load_buffer_state( );
++ (yy_did_buffer_switch_on_eof) = 1;
++ }
++}
++
++/* Allocates the stack if it does not exist.
++ * Guarantees space for at least one push.
++ */
++static void zconfensure_buffer_stack (void)
++{
++ int num_to_alloc;
++
++ if (!(yy_buffer_stack)) {
++
++ /* First allocation is just for 2 elements, since we don't know if this
++ * scanner will even need a stack. We use 2 instead of 1 to avoid an
++ * immediate realloc on the next call.
++ */
++ num_to_alloc = 1;
++ (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
++ (num_to_alloc * sizeof(struct yy_buffer_state*)
++ );
++ if ( ! (yy_buffer_stack) )
++ YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
++
++ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
++
++ (yy_buffer_stack_max) = num_to_alloc;
++ (yy_buffer_stack_top) = 0;
++ return;
++ }
++
++ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
++
++ /* Increase the buffer to prepare for a possible push. */
++ int grow_size = 8 /* arbitrary grow size */;
++
++ num_to_alloc = (yy_buffer_stack_max) + grow_size;
++ (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
++ ((yy_buffer_stack),
++ num_to_alloc * sizeof(struct yy_buffer_state*)
++ );
++ if ( ! (yy_buffer_stack) )
++ YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
++
++ /* zero only the new slots.*/
++ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
++ (yy_buffer_stack_max) = num_to_alloc;
++ }
++}
++
++/** Setup the input buffer state to scan directly from a user-specified character buffer.
++ * @param base the character buffer
++ * @param size the size in bytes of the character buffer
++ *
++ * @return the newly allocated buffer state object.
++ */
++YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
++{
++ YY_BUFFER_STATE b;
++
++ if ( size < 2 ||
++ base[size-2] != YY_END_OF_BUFFER_CHAR ||
++ base[size-1] != YY_END_OF_BUFFER_CHAR )
++ /* They forgot to leave room for the EOB's. */
++ return 0;
++
++ b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) );
++ if ( ! b )
++ YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
++
++ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
++ b->yy_buf_pos = b->yy_ch_buf = base;
++ b->yy_is_our_buffer = 0;
++ b->yy_input_file = 0;
++ b->yy_n_chars = b->yy_buf_size;
++ b->yy_is_interactive = 0;
++ b->yy_at_bol = 1;
++ b->yy_fill_buffer = 0;
++ b->yy_buffer_status = YY_BUFFER_NEW;
++
++ zconf_switch_to_buffer(b );
++
++ return b;
++}
++
++/** Setup the input buffer state to scan a string. The next call to zconflex() will
++ * scan from a @e copy of @a str.
++ * @param yystr a NUL-terminated string to scan
++ *
++ * @return the newly allocated buffer state object.
++ * @note If you want to scan bytes that may contain NUL values, then use
++ * zconf_scan_bytes() instead.
++ */
++YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr )
++{
++
++ return zconf_scan_bytes(yystr,strlen(yystr) );
++}
++
++/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
++ * scan from a @e copy of @a bytes.
++ * @param bytes the byte buffer to scan
++ * @param len the number of bytes in the buffer pointed to by @a bytes.
++ *
++ * @return the newly allocated buffer state object.
++ */
++YY_BUFFER_STATE zconf_scan_bytes (yyconst char * yybytes, int _yybytes_len )
++{
++ YY_BUFFER_STATE b;
++ char *buf;
++ yy_size_t n;
++ int i;
++
++ /* Get memory for full buffer, including space for trailing EOB's. */
++ n = _yybytes_len + 2;
++ buf = (char *) zconfalloc(n );
++ if ( ! buf )
++ YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
++
++ for ( i = 0; i < _yybytes_len; ++i )
++ buf[i] = yybytes[i];
++
++ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
++
++ b = zconf_scan_buffer(buf,n );
++ if ( ! b )
++ YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
++
++ /* It's okay to grow etc. this buffer, and we should throw it
++ * away when we're done.
++ */
++ b->yy_is_our_buffer = 1;
++
++ return b;
++}
++
++#ifndef YY_EXIT_FAILURE
++#define YY_EXIT_FAILURE 2
++#endif
++
++static void yy_fatal_error (yyconst char* msg )
++{
++ (void) fprintf( stderr, "%s\n", msg );
++ exit( YY_EXIT_FAILURE );
++}
++
++/* Redefine yyless() so it works in section 3 code. */
++
++#undef yyless
++#define yyless(n) \
++ do \
++ { \
++ /* Undo effects of setting up zconftext. */ \
++ int yyless_macro_arg = (n); \
++ YY_LESS_LINENO(yyless_macro_arg);\
++ zconftext[zconfleng] = (yy_hold_char); \
++ (yy_c_buf_p) = zconftext + yyless_macro_arg; \
++ (yy_hold_char) = *(yy_c_buf_p); \
++ *(yy_c_buf_p) = '\0'; \
++ zconfleng = yyless_macro_arg; \
++ } \
++ while ( 0 )
++
++/* Accessor methods (get/set functions) to struct members. */
++
++/** Get the current line number.
++ *
++ */
++int zconfget_lineno (void)
++{
++
++ return zconflineno;
++}
++
++/** Get the input stream.
++ *
++ */
++FILE *zconfget_in (void)
++{
++ return zconfin;
++}
++
++/** Get the output stream.
++ *
++ */
++FILE *zconfget_out (void)
++{
++ return zconfout;
++}
++
++/** Get the length of the current token.
++ *
++ */
++int zconfget_leng (void)
++{
++ return zconfleng;
++}
++
++/** Get the current token.
++ *
++ */
++
++char *zconfget_text (void)
++{
++ return zconftext;
++}
++
++/** Set the current line number.
++ * @param line_number
++ *
++ */
++void zconfset_lineno (int line_number )
++{
++
++ zconflineno = line_number;
++}
++
++/** Set the input stream. This does not discard the current
++ * input buffer.
++ * @param in_str A readable stream.
++ *
++ * @see zconf_switch_to_buffer
++ */
++void zconfset_in (FILE * in_str )
++{
++ zconfin = in_str ;
++}
++
++void zconfset_out (FILE * out_str )
++{
++ zconfout = out_str ;
++}
++
++int zconfget_debug (void)
++{
++ return zconf_flex_debug;
++}
++
++void zconfset_debug (int bdebug )
++{
++ zconf_flex_debug = bdebug ;
++}
++
++static int yy_init_globals (void)
++{
++ /* Initialization is the same as for the non-reentrant scanner.
++ * This function is called from zconflex_destroy(), so don't allocate here.
++ */
++
++ (yy_buffer_stack) = 0;
++ (yy_buffer_stack_top) = 0;
++ (yy_buffer_stack_max) = 0;
++ (yy_c_buf_p) = (char *) 0;
++ (yy_init) = 0;
++ (yy_start) = 0;
++
++/* Defined in main.c */
++#ifdef YY_STDINIT
++ zconfin = stdin;
++ zconfout = stdout;
++#else
++ zconfin = (FILE *) 0;
++ zconfout = (FILE *) 0;
++#endif
++
++ /* For future reference: Set errno on error, since we are called by
++ * zconflex_init()
++ */
++ return 0;
++}
++
++/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
++int zconflex_destroy (void)
++{
++
++ /* Pop the buffer stack, destroying each element. */
++ while(YY_CURRENT_BUFFER){
++ zconf_delete_buffer(YY_CURRENT_BUFFER );
++ YY_CURRENT_BUFFER_LVALUE = NULL;
++ zconfpop_buffer_state();
++ }
++
++ /* Destroy the stack itself. */
++ zconffree((yy_buffer_stack) );
++ (yy_buffer_stack) = NULL;
++
++ /* Reset the globals. This is important in a non-reentrant scanner so the next time
++ * zconflex() is called, initialization will occur. */
++ yy_init_globals( );
++
++ return 0;
++}
++
++/*
++ * Internal utility routines.
++ */
++
++#ifndef yytext_ptr
++static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
++{
++ register int i;
++ for ( i = 0; i < n; ++i )
++ s1[i] = s2[i];
++}
++#endif
++
++#ifdef YY_NEED_STRLEN
++static int yy_flex_strlen (yyconst char * s )
++{
++ register int n;
++ for ( n = 0; s[n]; ++n )
++ ;
++
++ return n;
++}
++#endif
++
++void *zconfalloc (yy_size_t size )
++{
++ return (void *) malloc( size );
++}
++
++void *zconfrealloc (void * ptr, yy_size_t size )
++{
++ /* The cast to (char *) in the following accommodates both
++ * implementations that use char* generic pointers, and those
++ * that use void* generic pointers. It works with the latter
++ * because both ANSI C and C++ allow castless assignment from
++ * any pointer type to void*, and deal with argument conversions
++ * as though doing an assignment.
++ */
++ return (void *) realloc( (char *) ptr, size );
++}
++
++void zconffree (void * ptr )
++{
++ free( (char *) ptr ); /* see zconfrealloc() for (char *) cast */
++}
++
++#define YYTABLES_NAME "yytables"
++
++void zconf_starthelp(void)
++{
++ new_string();
++ last_ts = first_ts = 0;
++ BEGIN(HELP);
++}
++
++static void zconf_endhelp(void)
++{
++ zconflval.string = text;
++ BEGIN(INITIAL);
++}
++
++/*
++ * Try to open specified file with following names:
++ * ./name
++ * $(srctree)/name
++ * The latter is used when srctree is separate from objtree
++ * when compiling the kernel.
++ * Return NULL if file is not found.
++ */
++FILE *zconf_fopen(const char *name)
++{
++ char *env, fullname[PATH_MAX+1];
++ FILE *f;
++
++ f = fopen(name, "r");
++ if (!f && name != NULL && name[0] != '/') {
++ env = getenv(SRCTREE);
++ if (env) {
++ sprintf(fullname, "%s/%s", env, name);
++ f = fopen(fullname, "r");
++ }
++ }
++ return f;
++}
++
++void zconf_initscan(const char *name)
++{
++ zconfin = zconf_fopen(name);
++ if (!zconfin) {
++ printf("can't find file %s\n", name);
++ exit(1);
++ }
++
++ current_buf = xmalloc(sizeof(*current_buf));
++ memset(current_buf, 0, sizeof(*current_buf));
++
++ current_file = file_lookup(name);
++ current_file->lineno = 1;
++}
++
++void zconf_nextfile(const char *name)
++{
++ struct file *iter;
++ struct file *file = file_lookup(name);
++ struct buffer *buf = xmalloc(sizeof(*buf));
++ memset(buf, 0, sizeof(*buf));
++
++ current_buf->state = YY_CURRENT_BUFFER;
++ zconfin = zconf_fopen(file->name);
++ if (!zconfin) {
++ printf("%s:%d: can't open file \"%s\"\n",
++ zconf_curname(), zconf_lineno(), file->name);
++ exit(1);
++ }
++ zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
++ buf->parent = current_buf;
++ current_buf = buf;
++
++ for (iter = current_file->parent; iter; iter = iter->parent ) {
++ if (!strcmp(current_file->name,iter->name) ) {
++ printf("%s:%d: recursive inclusion detected. "
++ "Inclusion path:\n current file : '%s'\n",
++ zconf_curname(), zconf_lineno(),
++ zconf_curname());
++ iter = current_file->parent;
++ while (iter && \
++ strcmp(iter->name,current_file->name)) {
++ printf(" included from: '%s:%d'\n",
++ iter->name, iter->lineno-1);
++ iter = iter->parent;
++ }
++ if (iter)
++ printf(" included from: '%s:%d'\n",
++ iter->name, iter->lineno+1);
++ exit(1);
++ }
++ }
++ file->lineno = 1;
++ file->parent = current_file;
++ current_file = file;
++}
++
++static void zconf_endfile(void)
++{
++ struct buffer *parent;
++
++ current_file = current_file->parent;
++
++ parent = current_buf->parent;
++ if (parent) {
++ fclose(zconfin);
++ zconf_delete_buffer(YY_CURRENT_BUFFER);
++ zconf_switch_to_buffer(parent->state);
++ }
++ free(current_buf);
++ current_buf = parent;
++}
++
++int zconf_lineno(void)
++{
++ return current_pos.lineno;
++}
++
++const char *zconf_curname(void)
++{
++ return current_pos.file ? current_pos.file->name : "<none>";
++}
++
+diff -Nur uClibc-0.9.33.2/extra/config/zconf.tab.c_shipped uClibc-git/extra/config/zconf.tab.c_shipped
+--- uClibc-0.9.33.2/extra/config/zconf.tab.c_shipped 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/zconf.tab.c_shipped 2014-02-03 12:32:56.000000000 +0100
+@@ -1,24 +1,22 @@
+-/* A Bison parser, made by GNU Bison 2.3. */
++/* A Bison parser, made by GNU Bison 2.4.3. */
+
+ /* Skeleton implementation for Bison's Yacc-like parsers in C
+-
+- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+- Free Software Foundation, Inc.
+-
+- This program is free software; you can redistribute it and/or modify
++
++ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
++ 2009, 2010 Free Software Foundation, Inc.
++
++ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 2, or (at your option)
+- any later version.
+-
++ the Free Software Foundation, either version 3 of the License, or
++ (at your option) any later version.
++
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+-
++
+ You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ /* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+@@ -29,7 +27,7 @@
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+-
++
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+@@ -47,7 +45,7 @@
+ #define YYBISON 1
+
+ /* Bison version. */
+-#define YYBISON_VERSION "2.3"
++#define YYBISON_VERSION "2.4.3"
+
+ /* Skeleton name. */
+ #define YYSKELETON_NAME "yacc.c"
+@@ -55,94 +53,23 @@
+ /* Pure parsers. */
+ #define YYPURE 0
+
++/* Push parsers. */
++#define YYPUSH 0
++
++/* Pull parsers. */
++#define YYPULL 1
++
+ /* Using locations. */
+ #define YYLSP_NEEDED 0
+
+ /* Substitute the variable and function names. */
+-#define yyparse zconfparse
+-#define yylex zconflex
+-#define yyerror zconferror
+-#define yylval zconflval
+-#define yychar zconfchar
+-#define yydebug zconfdebug
+-#define yynerrs zconfnerrs
+-
+-
+-/* Tokens. */
+-#ifndef YYTOKENTYPE
+-# define YYTOKENTYPE
+- /* Put the tokens into the symbol table, so that GDB and other debuggers
+- know about them. */
+- enum yytokentype {
+- T_MAINMENU = 258,
+- T_MENU = 259,
+- T_ENDMENU = 260,
+- T_SOURCE = 261,
+- T_CHOICE = 262,
+- T_ENDCHOICE = 263,
+- T_COMMENT = 264,
+- T_CONFIG = 265,
+- T_MENUCONFIG = 266,
+- T_HELP = 267,
+- T_HELPTEXT = 268,
+- T_IF = 269,
+- T_ENDIF = 270,
+- T_DEPENDS = 271,
+- T_OPTIONAL = 272,
+- T_PROMPT = 273,
+- T_TYPE = 274,
+- T_DEFAULT = 275,
+- T_SELECT = 276,
+- T_RANGE = 277,
+- T_OPTION = 278,
+- T_ON = 279,
+- T_WORD = 280,
+- T_WORD_QUOTE = 281,
+- T_UNEQUAL = 282,
+- T_CLOSE_PAREN = 283,
+- T_OPEN_PAREN = 284,
+- T_EOL = 285,
+- T_OR = 286,
+- T_AND = 287,
+- T_EQUAL = 288,
+- T_NOT = 289
+- };
+-#endif
+-/* Tokens. */
+-#define T_MAINMENU 258
+-#define T_MENU 259
+-#define T_ENDMENU 260
+-#define T_SOURCE 261
+-#define T_CHOICE 262
+-#define T_ENDCHOICE 263
+-#define T_COMMENT 264
+-#define T_CONFIG 265
+-#define T_MENUCONFIG 266
+-#define T_HELP 267
+-#define T_HELPTEXT 268
+-#define T_IF 269
+-#define T_ENDIF 270
+-#define T_DEPENDS 271
+-#define T_OPTIONAL 272
+-#define T_PROMPT 273
+-#define T_TYPE 274
+-#define T_DEFAULT 275
+-#define T_SELECT 276
+-#define T_RANGE 277
+-#define T_OPTION 278
+-#define T_ON 279
+-#define T_WORD 280
+-#define T_WORD_QUOTE 281
+-#define T_UNEQUAL 282
+-#define T_CLOSE_PAREN 283
+-#define T_OPEN_PAREN 284
+-#define T_EOL 285
+-#define T_OR 286
+-#define T_AND 287
+-#define T_EQUAL 288
+-#define T_NOT 289
+-
+-
++#define yyparse zconfparse
++#define yylex zconflex
++#define yyerror zconferror
++#define yylval zconflval
++#define yychar zconfchar
++#define yydebug zconfdebug
++#define yynerrs zconfnerrs
+
+
+ /* Copy the first part of user declarations. */
+@@ -160,11 +87,8 @@
+ #include <string.h>
+ #include <stdbool.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+-#include "zconf.hash.c"
+-
+ #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
+
+ #define PRINTD 0x0001
+@@ -176,21 +100,18 @@
+ static void zconfprint(const char *err, ...);
+ static void zconf_error(const char *err, ...);
+ static void zconferror(const char *err);
+-static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
++static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
+
+-struct symbol *symbol_hash[257];
++struct symbol *symbol_hash[SYMBOL_HASHSIZE];
+
+ static struct menu *current_menu, *current_entry;
+
+-#define YYDEBUG 0
+-#if YYDEBUG
+-#define YYERROR_VERBOSE
+-#endif
++
+
+
+ /* Enabling traces. */
+ #ifndef YYDEBUG
+-# define YYDEBUG 0
++# define YYDEBUG 1
+ #endif
+
+ /* Enabling verbose error messages. */
+@@ -206,31 +127,78 @@
+ # define YYTOKEN_TABLE 0
+ #endif
+
++
++/* Tokens. */
++#ifndef YYTOKENTYPE
++# define YYTOKENTYPE
++ /* Put the tokens into the symbol table, so that GDB and other debuggers
++ know about them. */
++ enum yytokentype {
++ T_MAINMENU = 258,
++ T_MENU = 259,
++ T_ENDMENU = 260,
++ T_SOURCE = 261,
++ T_CHOICE = 262,
++ T_ENDCHOICE = 263,
++ T_COMMENT = 264,
++ T_CONFIG = 265,
++ T_MENUCONFIG = 266,
++ T_HELP = 267,
++ T_HELPTEXT = 268,
++ T_IF = 269,
++ T_ENDIF = 270,
++ T_DEPENDS = 271,
++ T_OPTIONAL = 272,
++ T_PROMPT = 273,
++ T_TYPE = 274,
++ T_DEFAULT = 275,
++ T_SELECT = 276,
++ T_RANGE = 277,
++ T_VISIBLE = 278,
++ T_OPTION = 279,
++ T_ON = 280,
++ T_WORD = 281,
++ T_WORD_QUOTE = 282,
++ T_UNEQUAL = 283,
++ T_CLOSE_PAREN = 284,
++ T_OPEN_PAREN = 285,
++ T_EOL = 286,
++ T_OR = 287,
++ T_AND = 288,
++ T_EQUAL = 289,
++ T_NOT = 290
++ };
++#endif
++
++
++
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+ typedef union YYSTYPE
+-
+ {
++
++
+ char *string;
+ struct file *file;
+ struct symbol *symbol;
+ struct expr *expr;
+ struct menu *menu;
+- struct kconf_id *id;
+-}
+-/* Line 187 of yacc.c. */
++ const struct kconf_id *id;
++
++
+
+- YYSTYPE;
++} YYSTYPE;
++# define YYSTYPE_IS_TRIVIAL 1
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+-# define YYSTYPE_IS_TRIVIAL 1
+ #endif
+
+
+-
+ /* Copy the second part of user declarations. */
+
+
+-/* Line 216 of yacc.c. */
++/* Include zconf.hash.c here so it can see the token constants. */
++#include "zconf.hash.c"
++
+
+
+ #ifdef short
+@@ -281,7 +249,7 @@
+ #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+ #ifndef YY_
+-# if YYENABLE_NLS
++# if defined YYENABLE_NLS && YYENABLE_NLS
+ # if ENABLE_NLS
+ # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+ # define YY_(msgid) dgettext ("bison-runtime", msgid)
+@@ -306,14 +274,14 @@
+ #if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+ static int
+-YYID (int i)
++YYID (int yyi)
+ #else
+ static int
+-YYID (i)
+- int i;
++YYID (yyi)
++ int yyi;
+ #endif
+ {
+- return i;
++ return yyi;
+ }
+ #endif
+
+@@ -394,9 +362,9 @@
+ /* A type that is properly aligned for any stack member. */
+ union yyalloc
+ {
+- yytype_int16 yyss;
+- YYSTYPE yyvs;
+- };
++ yytype_int16 yyss_alloc;
++ YYSTYPE yyvs_alloc;
++};
+
+ /* The size of the maximum gap between one aligned stack and the next. */
+ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+@@ -430,12 +398,12 @@
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+-# define YYSTACK_RELOCATE(Stack) \
++# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+- YYCOPY (&yyptr->Stack, Stack, yysize); \
+- Stack = &yyptr->Stack; \
++ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
++ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+@@ -444,22 +412,22 @@
+ #endif
+
+ /* YYFINAL -- State number of the termination state. */
+-#define YYFINAL 3
++#define YYFINAL 11
+ /* YYLAST -- Last index in YYTABLE. */
+-#define YYLAST 259
++#define YYLAST 290
+
+ /* YYNTOKENS -- Number of terminals. */
+-#define YYNTOKENS 35
++#define YYNTOKENS 36
+ /* YYNNTS -- Number of nonterminals. */
+-#define YYNNTS 46
++#define YYNNTS 50
+ /* YYNRULES -- Number of rules. */
+-#define YYNRULES 110
++#define YYNRULES 118
+ /* YYNRULES -- Number of states. */
+-#define YYNSTATES 180
++#define YYNSTATES 191
+
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+ #define YYUNDEFTOK 2
+-#define YYMAXUTOK 289
++#define YYMAXUTOK 290
+
+ #define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+@@ -495,7 +463,8 @@
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
++ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
++ 35
+ };
+
+ #if YYDEBUG
+@@ -503,73 +472,75 @@
+ YYRHS. */
+ static const yytype_uint16 yyprhs[] =
+ {
+- 0, 0, 3, 5, 6, 9, 12, 15, 20, 23,
+- 28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
+- 53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
+- 81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
+- 112, 117, 122, 128, 132, 133, 137, 138, 141, 145,
+- 148, 150, 154, 155, 158, 161, 164, 167, 170, 175,
+- 179, 182, 187, 188, 191, 195, 197, 201, 202, 205,
+- 208, 211, 215, 218, 220, 224, 225, 228, 231, 234,
+- 238, 242, 245, 248, 251, 252, 255, 258, 261, 266,
+- 267, 270, 272, 274, 277, 280, 283, 285, 288, 289,
+- 292, 294, 298, 302, 306, 309, 313, 317, 319, 321,
+- 322
++ 0, 0, 3, 6, 8, 11, 13, 14, 17, 20,
++ 23, 26, 31, 36, 40, 42, 44, 46, 48, 50,
++ 52, 54, 56, 58, 60, 62, 64, 66, 68, 72,
++ 75, 79, 82, 86, 89, 90, 93, 96, 99, 102,
++ 105, 108, 112, 117, 122, 127, 133, 137, 138, 142,
++ 143, 146, 150, 153, 155, 159, 160, 163, 166, 169,
++ 172, 175, 180, 184, 187, 192, 193, 196, 200, 202,
++ 206, 207, 210, 213, 216, 220, 224, 228, 230, 234,
++ 235, 238, 241, 244, 248, 252, 255, 258, 261, 262,
++ 265, 268, 271, 276, 277, 280, 283, 286, 287, 290,
++ 292, 294, 297, 300, 303, 305, 308, 309, 312, 314,
++ 318, 322, 326, 329, 333, 337, 339, 341, 342
+ };
+
+ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
+ static const yytype_int8 yyrhs[] =
+ {
+- 36, 0, -1, 37, -1, -1, 37, 39, -1, 37,
+- 53, -1, 37, 64, -1, 37, 3, 74, 76, -1,
+- 37, 75, -1, 37, 25, 1, 30, -1, 37, 38,
+- 1, 30, -1, 37, 1, 30, -1, 16, -1, 18,
+- -1, 19, -1, 21, -1, 17, -1, 22, -1, 20,
+- -1, 30, -1, 59, -1, 68, -1, 42, -1, 44,
+- -1, 66, -1, 25, 1, 30, -1, 1, 30, -1,
+- 10, 25, 30, -1, 41, 45, -1, 11, 25, 30,
+- -1, 43, 45, -1, -1, 45, 46, -1, 45, 47,
+- -1, 45, 72, -1, 45, 70, -1, 45, 40, -1,
+- 45, 30, -1, 19, 73, 30, -1, 18, 74, 77,
+- 30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
+- 30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
+- 30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
+- -1, 7, 80, 30, -1, 50, 54, -1, 75, -1,
+- 51, 56, 52, -1, -1, 54, 55, -1, 54, 72,
+- -1, 54, 70, -1, 54, 30, -1, 54, 40, -1,
+- 18, 74, 77, 30, -1, 19, 73, 30, -1, 17,
+- 30, -1, 20, 25, 77, 30, -1, -1, 56, 39,
+- -1, 14, 78, 76, -1, 75, -1, 57, 60, 58,
+- -1, -1, 60, 39, -1, 60, 64, -1, 60, 53,
+- -1, 4, 74, 30, -1, 61, 71, -1, 75, -1,
+- 62, 65, 63, -1, -1, 65, 39, -1, 65, 64,
+- -1, 65, 53, -1, 6, 74, 30, -1, 9, 74,
+- 30, -1, 67, 71, -1, 12, 30, -1, 69, 13,
+- -1, -1, 71, 72, -1, 71, 30, -1, 71, 40,
+- -1, 16, 24, 78, 30, -1, -1, 74, 77, -1,
+- 25, -1, 26, -1, 5, 30, -1, 8, 30, -1,
+- 15, 30, -1, 30, -1, 76, 30, -1, -1, 14,
+- 78, -1, 79, -1, 79, 33, 79, -1, 79, 27,
+- 79, -1, 29, 78, 28, -1, 34, 78, -1, 78,
+- 31, 78, -1, 78, 32, 78, -1, 25, -1, 26,
+- -1, -1, 25, -1
++ 37, 0, -1, 81, 38, -1, 38, -1, 63, 39,
++ -1, 39, -1, -1, 39, 41, -1, 39, 55, -1,
++ 39, 67, -1, 39, 80, -1, 39, 26, 1, 31,
++ -1, 39, 40, 1, 31, -1, 39, 1, 31, -1,
++ 16, -1, 18, -1, 19, -1, 21, -1, 17, -1,
++ 22, -1, 20, -1, 23, -1, 31, -1, 61, -1,
++ 71, -1, 44, -1, 46, -1, 69, -1, 26, 1,
++ 31, -1, 1, 31, -1, 10, 26, 31, -1, 43,
++ 47, -1, 11, 26, 31, -1, 45, 47, -1, -1,
++ 47, 48, -1, 47, 49, -1, 47, 75, -1, 47,
++ 73, -1, 47, 42, -1, 47, 31, -1, 19, 78,
++ 31, -1, 18, 79, 82, 31, -1, 20, 83, 82,
++ 31, -1, 21, 26, 82, 31, -1, 22, 84, 84,
++ 82, 31, -1, 24, 50, 31, -1, -1, 50, 26,
++ 51, -1, -1, 34, 79, -1, 7, 85, 31, -1,
++ 52, 56, -1, 80, -1, 53, 58, 54, -1, -1,
++ 56, 57, -1, 56, 75, -1, 56, 73, -1, 56,
++ 31, -1, 56, 42, -1, 18, 79, 82, 31, -1,
++ 19, 78, 31, -1, 17, 31, -1, 20, 26, 82,
++ 31, -1, -1, 58, 41, -1, 14, 83, 81, -1,
++ 80, -1, 59, 62, 60, -1, -1, 62, 41, -1,
++ 62, 67, -1, 62, 55, -1, 3, 79, 81, -1,
++ 4, 79, 31, -1, 64, 76, 74, -1, 80, -1,
++ 65, 68, 66, -1, -1, 68, 41, -1, 68, 67,
++ -1, 68, 55, -1, 6, 79, 31, -1, 9, 79,
++ 31, -1, 70, 74, -1, 12, 31, -1, 72, 13,
++ -1, -1, 74, 75, -1, 74, 31, -1, 74, 42,
++ -1, 16, 25, 83, 31, -1, -1, 76, 77, -1,
++ 76, 31, -1, 23, 82, -1, -1, 79, 82, -1,
++ 26, -1, 27, -1, 5, 31, -1, 8, 31, -1,
++ 15, 31, -1, 31, -1, 81, 31, -1, -1, 14,
++ 83, -1, 84, -1, 84, 34, 84, -1, 84, 28,
++ 84, -1, 30, 83, 29, -1, 35, 83, -1, 83,
++ 32, 83, -1, 83, 33, 83, -1, 26, -1, 27,
++ -1, -1, 26, -1
+ };
+
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+ static const yytype_uint16 yyrline[] =
+ {
+- 0, 104, 104, 106, 108, 109, 110, 111, 112, 113,
+- 114, 118, 122, 122, 122, 122, 122, 122, 122, 126,
+- 127, 128, 129, 130, 131, 135, 136, 142, 150, 156,
+- 164, 174, 176, 177, 178, 179, 180, 181, 184, 192,
+- 198, 208, 214, 220, 223, 225, 236, 237, 242, 251,
+- 256, 264, 267, 269, 270, 271, 272, 273, 276, 282,
+- 293, 299, 309, 311, 316, 324, 332, 335, 337, 338,
+- 339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
+- 382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
+- 426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
+- 449, 450, 451, 452, 453, 454, 455, 458, 459, 462,
+- 463
++ 0, 104, 104, 104, 106, 106, 108, 110, 111, 112,
++ 113, 114, 115, 119, 123, 123, 123, 123, 123, 123,
++ 123, 123, 127, 128, 129, 130, 131, 132, 136, 137,
++ 143, 151, 157, 165, 175, 177, 178, 179, 180, 181,
++ 182, 185, 193, 199, 209, 215, 221, 224, 226, 237,
++ 238, 243, 252, 257, 265, 268, 270, 271, 272, 273,
++ 274, 277, 283, 294, 300, 310, 312, 317, 325, 333,
++ 336, 338, 339, 340, 345, 352, 359, 364, 372, 375,
++ 377, 378, 379, 382, 390, 397, 404, 410, 417, 419,
++ 420, 421, 424, 432, 434, 435, 438, 445, 447, 452,
++ 453, 456, 457, 458, 462, 463, 466, 467, 470, 471,
++ 472, 473, 474, 475, 476, 479, 480, 483, 484
+ };
+ #endif
+
+@@ -582,19 +553,19 @@
+ "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
+ "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
+ "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_RANGE",
+- "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
++ "T_VISIBLE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
+ "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
+- "T_NOT", "$accept", "input", "stmt_list", "option_name", "common_stmt",
+- "option_error", "config_entry_start", "config_stmt",
++ "T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
++ "common_stmt", "option_error", "config_entry_start", "config_stmt",
+ "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
+ "config_option", "symbol_option", "symbol_option_list",
+ "symbol_option_arg", "choice", "choice_entry", "choice_end",
+ "choice_stmt", "choice_option_list", "choice_option", "choice_block",
+- "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
+- "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
+- "comment_stmt", "help_start", "help", "depends_list", "depends",
+- "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
+- "word_opt", 0
++ "if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
++ "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
++ "comment", "comment_stmt", "help_start", "help", "depends_list",
++ "depends", "visibility_list", "visible", "prompt_stmt_opt", "prompt",
++ "end", "nl", "if_expr", "expr", "symbol", "word_opt", 0
+ };
+ #endif
+
+@@ -606,42 +577,42 @@
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+- 285, 286, 287, 288, 289
++ 285, 286, 287, 288, 289, 290
+ };
+ # endif
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+ static const yytype_uint8 yyr1[] =
+ {
+- 0, 35, 36, 37, 37, 37, 37, 37, 37, 37,
+- 37, 37, 38, 38, 38, 38, 38, 38, 38, 39,
+- 39, 39, 39, 39, 39, 40, 40, 41, 42, 43,
+- 44, 45, 45, 45, 45, 45, 45, 45, 46, 46,
+- 46, 46, 46, 47, 48, 48, 49, 49, 50, 51,
+- 52, 53, 54, 54, 54, 54, 54, 54, 55, 55,
+- 55, 55, 56, 56, 57, 58, 59, 60, 60, 60,
+- 60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
+- 67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
+- 73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
+- 78, 78, 78, 78, 78, 78, 78, 79, 79, 80,
+- 80
++ 0, 36, 37, 37, 38, 38, 39, 39, 39, 39,
++ 39, 39, 39, 39, 40, 40, 40, 40, 40, 40,
++ 40, 40, 41, 41, 41, 41, 41, 41, 42, 42,
++ 43, 44, 45, 46, 47, 47, 47, 47, 47, 47,
++ 47, 48, 48, 48, 48, 48, 49, 50, 50, 51,
++ 51, 52, 53, 54, 55, 56, 56, 56, 56, 56,
++ 56, 57, 57, 57, 57, 58, 58, 59, 60, 61,
++ 62, 62, 62, 62, 63, 64, 65, 66, 67, 68,
++ 68, 68, 68, 69, 70, 71, 72, 73, 74, 74,
++ 74, 74, 75, 76, 76, 76, 77, 78, 78, 79,
++ 79, 80, 80, 80, 81, 81, 82, 82, 83, 83,
++ 83, 83, 83, 83, 83, 84, 84, 85, 85
+ };
+
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+ static const yytype_uint8 yyr2[] =
+ {
+- 0, 2, 1, 0, 2, 2, 2, 4, 2, 4,
+- 4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
+- 2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
+- 4, 4, 5, 3, 0, 3, 0, 2, 3, 2,
+- 1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
+- 2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
+- 2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
+- 3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
+- 2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
+- 1, 3, 3, 3, 2, 3, 3, 1, 1, 0,
+- 1
++ 0, 2, 2, 1, 2, 1, 0, 2, 2, 2,
++ 2, 4, 4, 3, 1, 1, 1, 1, 1, 1,
++ 1, 1, 1, 1, 1, 1, 1, 1, 3, 2,
++ 3, 2, 3, 2, 0, 2, 2, 2, 2, 2,
++ 2, 3, 4, 4, 4, 5, 3, 0, 3, 0,
++ 2, 3, 2, 1, 3, 0, 2, 2, 2, 2,
++ 2, 4, 3, 2, 4, 0, 2, 3, 1, 3,
++ 0, 2, 2, 2, 3, 3, 3, 1, 3, 0,
++ 2, 2, 2, 3, 3, 2, 2, 2, 0, 2,
++ 2, 2, 4, 0, 2, 2, 2, 0, 2, 1,
++ 1, 2, 2, 2, 1, 2, 0, 2, 1, 3,
++ 3, 3, 2, 3, 3, 1, 1, 0, 1
+ };
+
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+@@ -649,158 +620,172 @@
+ means the default is an error. */
+ static const yytype_uint8 yydefact[] =
+ {
+- 3, 0, 0, 1, 0, 0, 0, 0, 0, 109,
+- 0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
+- 18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
+- 23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
+- 84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
+- 110, 0, 94, 0, 0, 0, 107, 108, 0, 0,
+- 0, 100, 95, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 96, 7, 71, 79, 48, 80, 27,
+- 29, 0, 104, 0, 0, 64, 0, 0, 9, 10,
+- 0, 0, 0, 0, 89, 0, 0, 0, 44, 0,
+- 37, 36, 32, 33, 0, 35, 34, 0, 0, 89,
+- 0, 56, 57, 53, 55, 54, 63, 51, 50, 68,
+- 70, 66, 69, 65, 86, 87, 85, 76, 78, 74,
+- 77, 73, 97, 103, 105, 106, 102, 101, 26, 82,
+- 0, 98, 0, 98, 98, 98, 0, 0, 0, 83,
+- 60, 98, 0, 98, 0, 0, 0, 38, 90, 0,
+- 0, 98, 46, 43, 25, 0, 59, 0, 88, 99,
+- 39, 40, 41, 0, 0, 45, 58, 61, 42, 47
++ 6, 0, 104, 0, 3, 0, 6, 6, 99, 100,
++ 0, 1, 0, 0, 0, 0, 117, 0, 0, 0,
++ 0, 0, 0, 14, 18, 15, 16, 20, 17, 19,
++ 21, 0, 22, 0, 7, 34, 25, 34, 26, 55,
++ 65, 8, 70, 23, 93, 79, 9, 27, 88, 24,
++ 10, 0, 105, 2, 74, 13, 0, 101, 0, 118,
++ 0, 102, 0, 0, 0, 115, 116, 0, 0, 0,
++ 108, 103, 0, 0, 0, 0, 0, 0, 0, 88,
++ 0, 0, 75, 83, 51, 84, 30, 32, 0, 112,
++ 0, 0, 67, 0, 0, 11, 12, 0, 0, 0,
++ 0, 97, 0, 0, 0, 47, 0, 40, 39, 35,
++ 36, 0, 38, 37, 0, 0, 97, 0, 59, 60,
++ 56, 58, 57, 66, 54, 53, 71, 73, 69, 72,
++ 68, 106, 95, 0, 94, 80, 82, 78, 81, 77,
++ 90, 91, 89, 111, 113, 114, 110, 109, 29, 86,
++ 0, 106, 0, 106, 106, 106, 0, 0, 0, 87,
++ 63, 106, 0, 106, 0, 96, 0, 0, 41, 98,
++ 0, 0, 106, 49, 46, 28, 0, 62, 0, 107,
++ 92, 42, 43, 44, 0, 0, 48, 61, 64, 45,
++ 50
+ };
+
+ /* YYDEFGOTO[NTERM-NUM]. */
+ static const yytype_int16 yydefgoto[] =
+ {
+- -1, 1, 2, 25, 26, 101, 27, 28, 29, 30,
+- 65, 102, 103, 147, 175, 31, 32, 117, 33, 67,
+- 113, 68, 34, 121, 35, 69, 36, 37, 129, 38,
+- 71, 39, 40, 41, 104, 105, 70, 106, 142, 143,
+- 42, 74, 156, 60, 61, 51
++ -1, 3, 4, 5, 33, 34, 108, 35, 36, 37,
++ 38, 74, 109, 110, 157, 186, 39, 40, 124, 41,
++ 76, 120, 77, 42, 128, 43, 78, 6, 44, 45,
++ 137, 46, 80, 47, 48, 49, 111, 112, 81, 113,
++ 79, 134, 152, 153, 50, 7, 165, 69, 70, 60
+ };
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+-#define YYPACT_NINF -80
++#define YYPACT_NINF -90
+ static const yytype_int16 yypact[] =
+ {
+- -80, 2, 132, -80, -13, -1, -1, -2, -1, 9,
+- 33, -1, 27, 40, -3, 38, -80, -80, -80, -80,
+- -80, -80, -80, 71, -80, 77, -80, -80, -80, -80,
+- -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
+- -80, -80, -80, -80, -80, -80, 57, 61, -80, 63,
+- -80, 76, -80, 87, 101, 133, -80, -80, -3, -3,
+- 195, -6, -80, 136, 149, 39, 104, 65, 150, 5,
+- 194, 5, 167, -80, 176, -80, -80, -80, -80, -80,
+- -80, 68, -80, -3, -3, 176, 72, 72, -80, -80,
+- 177, 187, 78, -1, -1, -3, 196, 72, -80, 222,
+- -80, -80, -80, -80, 221, -80, -80, 205, -1, -1,
+- 211, -80, -80, -80, -80, -80, -80, -80, -80, -80,
+- -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
+- -80, -80, -80, -80, 206, -80, -80, -80, -80, -80,
+- -3, 223, 209, 223, 197, 223, 72, 7, 210, -80,
+- -80, 223, 212, 223, 201, -3, 213, -80, -80, 214,
+- 215, 223, 208, -80, -80, 216, -80, 217, -80, 113,
+- -80, -80, -80, 218, -1, -80, -80, -80, -80, -80
++ 4, 42, -90, 96, -90, 111, -90, 15, -90, -90,
++ 75, -90, 82, 42, 104, 42, 110, 107, 42, 115,
++ 125, -4, 121, -90, -90, -90, -90, -90, -90, -90,
++ -90, 162, -90, 163, -90, -90, -90, -90, -90, -90,
++ -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
++ -90, 139, -90, -90, 138, -90, 142, -90, 143, -90,
++ 152, -90, 164, 167, 168, -90, -90, -4, -4, 77,
++ -18, -90, 177, 185, 33, 71, 195, 247, 236, -2,
++ 236, 171, -90, -90, -90, -90, -90, -90, 41, -90,
++ -4, -4, 138, 97, 97, -90, -90, 186, 187, 194,
++ 42, 42, -4, 196, 97, -90, 219, -90, -90, -90,
++ -90, 210, -90, -90, 204, 42, 42, 199, -90, -90,
++ -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
++ -90, 222, -90, 223, -90, -90, -90, -90, -90, -90,
++ -90, -90, -90, -90, 215, -90, -90, -90, -90, -90,
++ -4, 222, 228, 222, -5, 222, 97, 35, 229, -90,
++ -90, 222, 232, 222, -4, -90, 135, 233, -90, -90,
++ 234, 235, 222, 240, -90, -90, 237, -90, 239, -13,
++ -90, -90, -90, -90, 244, 42, -90, -90, -90, -90,
++ -90
+ };
+
+ /* YYPGOTO[NTERM-NUM]. */
+ static const yytype_int16 yypgoto[] =
+ {
+- -80, -80, -80, -80, 122, -34, -80, -80, -80, -80,
+- 220, -80, -80, -80, -80, -80, -80, -80, 59, -80,
+- -80, -80, -80, -80, -80, -80, -80, -80, -80, 125,
+- -80, -80, -80, -80, -80, 183, 219, 22, 142, -5,
+- 147, 192, 69, -54, -79, -80
++ -90, -90, 269, 271, -90, 23, -70, -90, -90, -90,
++ -90, 243, -90, -90, -90, -90, -90, -90, -90, -48,
++ -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
++ -90, -20, -90, -90, -90, -90, -90, 206, 205, -68,
++ -90, -90, 169, -1, 27, -7, 118, -66, -89, -90
+ };
+
+ /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+-#define YYTABLE_NINF -82
++#define YYTABLE_NINF -86
+ static const yytype_int16 yytable[] =
+ {
+- 46, 47, 3, 49, 81, 82, 53, 136, 137, 6,
+- 7, 8, 9, 10, 11, 12, 13, 43, 146, 14,
+- 15, 86, 56, 57, 44, 45, 58, 87, 48, 134,
+- 135, 59, 162, 112, 50, 24, 125, 163, 125, -28,
+- 90, 144, -28, -28, -28, -28, -28, -28, -28, -28,
+- -28, 91, 54, -28, -28, 92, -28, 93, 94, 95,
+- 96, 97, 98, 52, 99, 55, 90, 161, 62, 100,
+- -49, -49, 63, -49, -49, -49, -49, 91, 64, -49,
+- -49, 92, 107, 108, 109, 110, 154, 73, 141, 115,
+- 99, 75, 126, 76, 126, 111, 133, 56, 57, 83,
+- 84, 169, 140, 151, -30, 90, 77, -30, -30, -30,
+- -30, -30, -30, -30, -30, -30, 91, 78, -30, -30,
+- 92, -30, 93, 94, 95, 96, 97, 98, 120, 99,
+- 128, 79, -2, 4, 100, 5, 6, 7, 8, 9,
+- 10, 11, 12, 13, 83, 84, 14, 15, 16, 17,
+- 18, 19, 20, 21, 22, 7, 8, 23, 10, 11,
+- 12, 13, 24, 80, 14, 15, 88, -81, 90, 179,
+- -81, -81, -81, -81, -81, -81, -81, -81, -81, 89,
+- 24, -81, -81, 92, -81, -81, -81, -81, -81, -81,
+- 116, 119, 99, 127, 122, 90, 130, 124, -72, -72,
+- -72, -72, -72, -72, -72, -72, 132, 138, -72, -72,
+- 92, 155, 158, 159, 160, 118, 123, 139, 131, 99,
+- 165, 145, 167, 148, 124, 73, 83, 84, 83, 84,
+- 173, 168, 83, 84, 149, 150, 153, 155, 84, 157,
+- 164, 174, 166, 170, 171, 172, 176, 177, 178, 66,
+- 114, 152, 85, 0, 0, 0, 0, 0, 0, 72
++ 10, 88, 89, 54, 146, 147, 119, 1, 122, 164,
++ 93, 141, 56, 142, 58, 156, 94, 62, 1, 90,
++ 91, 131, 65, 66, 144, 145, 67, 90, 91, 132,
++ 127, 68, 136, -31, 97, 2, 154, -31, -31, -31,
++ -31, -31, -31, -31, -31, 98, 52, -31, -31, 99,
++ -31, 100, 101, 102, 103, 104, -31, 105, 129, 106,
++ 138, 173, 92, 141, 107, 142, 174, 172, 8, 9,
++ 143, -33, 97, 90, 91, -33, -33, -33, -33, -33,
++ -33, -33, -33, 98, 166, -33, -33, 99, -33, 100,
++ 101, 102, 103, 104, -33, 105, 11, 106, 179, 151,
++ 123, 126, 107, 135, 125, 130, 2, 139, 2, 90,
++ 91, -5, 12, 55, 161, 13, 14, 15, 16, 17,
++ 18, 19, 20, 65, 66, 21, 22, 23, 24, 25,
++ 26, 27, 28, 29, 30, 57, 59, 31, 61, -4,
++ 12, 63, 32, 13, 14, 15, 16, 17, 18, 19,
++ 20, 64, 71, 21, 22, 23, 24, 25, 26, 27,
++ 28, 29, 30, 72, 73, 31, 180, 90, 91, 52,
++ 32, -85, 97, 82, 83, -85, -85, -85, -85, -85,
++ -85, -85, -85, 84, 190, -85, -85, 99, -85, -85,
++ -85, -85, -85, -85, -85, 85, 97, 106, 86, 87,
++ -52, -52, 140, -52, -52, -52, -52, 98, 95, -52,
++ -52, 99, 114, 115, 116, 117, 96, 148, 149, 150,
++ 158, 106, 155, 159, 97, 163, 118, -76, -76, -76,
++ -76, -76, -76, -76, -76, 160, 164, -76, -76, 99,
++ 13, 14, 15, 16, 17, 18, 19, 20, 91, 106,
++ 21, 22, 14, 15, 140, 17, 18, 19, 20, 168,
++ 175, 21, 22, 177, 181, 182, 183, 32, 187, 167,
++ 188, 169, 170, 171, 185, 189, 53, 51, 32, 176,
++ 75, 178, 121, 0, 133, 162, 0, 0, 0, 0,
++ 184
+ };
+
+ static const yytype_int16 yycheck[] =
+ {
+- 5, 6, 0, 8, 58, 59, 11, 86, 87, 4,
+- 5, 6, 7, 8, 9, 10, 11, 30, 97, 14,
+- 15, 27, 25, 26, 25, 26, 29, 33, 30, 83,
+- 84, 34, 25, 67, 25, 30, 70, 30, 72, 0,
+- 1, 95, 3, 4, 5, 6, 7, 8, 9, 10,
+- 11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
+- 21, 22, 23, 30, 25, 25, 1, 146, 30, 30,
+- 5, 6, 1, 8, 9, 10, 11, 12, 1, 14,
+- 15, 16, 17, 18, 19, 20, 140, 30, 93, 67,
+- 25, 30, 70, 30, 72, 30, 28, 25, 26, 31,
+- 32, 155, 24, 108, 0, 1, 30, 3, 4, 5,
+- 6, 7, 8, 9, 10, 11, 12, 30, 14, 15,
+- 16, 17, 18, 19, 20, 21, 22, 23, 69, 25,
+- 71, 30, 0, 1, 30, 3, 4, 5, 6, 7,
+- 8, 9, 10, 11, 31, 32, 14, 15, 16, 17,
+- 18, 19, 20, 21, 22, 5, 6, 25, 8, 9,
+- 10, 11, 30, 30, 14, 15, 30, 0, 1, 174,
+- 3, 4, 5, 6, 7, 8, 9, 10, 11, 30,
+- 30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+- 68, 69, 25, 71, 69, 1, 71, 30, 4, 5,
+- 6, 7, 8, 9, 10, 11, 30, 30, 14, 15,
+- 16, 14, 143, 144, 145, 68, 69, 30, 71, 25,
+- 151, 25, 153, 1, 30, 30, 31, 32, 31, 32,
+- 161, 30, 31, 32, 13, 30, 25, 14, 32, 30,
+- 30, 33, 30, 30, 30, 30, 30, 30, 30, 29,
+- 67, 109, 60, -1, -1, -1, -1, -1, -1, 40
++ 1, 67, 68, 10, 93, 94, 76, 3, 76, 14,
++ 28, 81, 13, 81, 15, 104, 34, 18, 3, 32,
++ 33, 23, 26, 27, 90, 91, 30, 32, 33, 31,
++ 78, 35, 80, 0, 1, 31, 102, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 31, 14, 15, 16,
++ 17, 18, 19, 20, 21, 22, 23, 24, 78, 26,
++ 80, 26, 69, 133, 31, 133, 31, 156, 26, 27,
++ 29, 0, 1, 32, 33, 4, 5, 6, 7, 8,
++ 9, 10, 11, 12, 150, 14, 15, 16, 17, 18,
++ 19, 20, 21, 22, 23, 24, 0, 26, 164, 100,
++ 77, 78, 31, 80, 77, 78, 31, 80, 31, 32,
++ 33, 0, 1, 31, 115, 4, 5, 6, 7, 8,
++ 9, 10, 11, 26, 27, 14, 15, 16, 17, 18,
++ 19, 20, 21, 22, 23, 31, 26, 26, 31, 0,
++ 1, 26, 31, 4, 5, 6, 7, 8, 9, 10,
++ 11, 26, 31, 14, 15, 16, 17, 18, 19, 20,
++ 21, 22, 23, 1, 1, 26, 31, 32, 33, 31,
++ 31, 0, 1, 31, 31, 4, 5, 6, 7, 8,
++ 9, 10, 11, 31, 185, 14, 15, 16, 17, 18,
++ 19, 20, 21, 22, 23, 31, 1, 26, 31, 31,
++ 5, 6, 31, 8, 9, 10, 11, 12, 31, 14,
++ 15, 16, 17, 18, 19, 20, 31, 31, 31, 25,
++ 1, 26, 26, 13, 1, 26, 31, 4, 5, 6,
++ 7, 8, 9, 10, 11, 31, 14, 14, 15, 16,
++ 4, 5, 6, 7, 8, 9, 10, 11, 33, 26,
++ 14, 15, 5, 6, 31, 8, 9, 10, 11, 31,
++ 31, 14, 15, 31, 31, 31, 31, 31, 31, 151,
++ 31, 153, 154, 155, 34, 31, 7, 6, 31, 161,
++ 37, 163, 76, -1, 79, 116, -1, -1, -1, -1,
++ 172
+ };
+
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+ static const yytype_uint8 yystos[] =
+ {
+- 0, 36, 37, 0, 1, 3, 4, 5, 6, 7,
+- 8, 9, 10, 11, 14, 15, 16, 17, 18, 19,
+- 20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
+- 44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
+- 67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
+- 25, 80, 30, 74, 25, 25, 25, 26, 29, 34,
+- 78, 79, 30, 1, 1, 45, 45, 54, 56, 60,
+- 71, 65, 71, 30, 76, 30, 30, 30, 30, 30,
+- 30, 78, 78, 31, 32, 76, 27, 33, 30, 30,
+- 1, 12, 16, 18, 19, 20, 21, 22, 23, 25,
+- 30, 40, 46, 47, 69, 70, 72, 17, 18, 19,
+- 20, 30, 40, 55, 70, 72, 39, 52, 75, 39,
+- 53, 58, 64, 75, 30, 40, 72, 39, 53, 63,
+- 64, 75, 30, 28, 78, 78, 79, 79, 30, 30,
+- 24, 74, 73, 74, 78, 25, 79, 48, 1, 13,
+- 30, 74, 73, 25, 78, 14, 77, 30, 77, 77,
+- 77, 79, 25, 30, 30, 77, 30, 77, 30, 78,
+- 30, 30, 30, 77, 33, 49, 30, 30, 30, 74
++ 0, 3, 31, 37, 38, 39, 63, 81, 26, 27,
++ 79, 0, 1, 4, 5, 6, 7, 8, 9, 10,
++ 11, 14, 15, 16, 17, 18, 19, 20, 21, 22,
++ 23, 26, 31, 40, 41, 43, 44, 45, 46, 52,
++ 53, 55, 59, 61, 64, 65, 67, 69, 70, 71,
++ 80, 39, 31, 38, 81, 31, 79, 31, 79, 26,
++ 85, 31, 79, 26, 26, 26, 27, 30, 35, 83,
++ 84, 31, 1, 1, 47, 47, 56, 58, 62, 76,
++ 68, 74, 31, 31, 31, 31, 31, 31, 83, 83,
++ 32, 33, 81, 28, 34, 31, 31, 1, 12, 16,
++ 18, 19, 20, 21, 22, 24, 26, 31, 42, 48,
++ 49, 72, 73, 75, 17, 18, 19, 20, 31, 42,
++ 57, 73, 75, 41, 54, 80, 41, 55, 60, 67,
++ 80, 23, 31, 74, 77, 41, 55, 66, 67, 80,
++ 31, 42, 75, 29, 83, 83, 84, 84, 31, 31,
++ 25, 79, 78, 79, 83, 26, 84, 50, 1, 13,
++ 31, 79, 78, 26, 14, 82, 83, 82, 31, 82,
++ 82, 82, 84, 26, 31, 31, 82, 31, 82, 83,
++ 31, 31, 31, 31, 82, 34, 51, 31, 31, 31,
++ 79
+ };
+
+ #define yyerrok (yyerrstatus = 0)
+@@ -815,9 +800,18 @@
+
+ /* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+- Once GCC version 2 has supplanted version 1, this can go. */
++ Once GCC version 2 has supplanted version 1, this can go. However,
++ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
++ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
++ discussed. */
+
+ #define YYFAIL goto yyerrlab
++#if defined YYFAIL
++ /* This is here to suppress warnings from the GCC cpp's
++ -Wunused-macros. Normally we don't worry about that warning, but
++ some users do, and we want to make it easy for users to remove
++ YYFAIL uses, which will produce warnings from Bison 2.5. */
++#endif
+
+ #define YYRECOVERING() (!!yyerrstatus)
+
+@@ -874,7 +868,7 @@
+ we won't break user code: when these are the locations we know. */
+
+ #ifndef YY_LOCATION_PRINT
+-# if YYLTYPE_IS_TRIVIAL
++# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+ # define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+@@ -985,17 +979,20 @@
+ #if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
++yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+ #else
+ static void
+-yy_stack_print (bottom, top)
+- yytype_int16 *bottom;
+- yytype_int16 *top;
++yy_stack_print (yybottom, yytop)
++ yytype_int16 *yybottom;
++ yytype_int16 *yytop;
+ #endif
+ {
+ YYFPRINTF (stderr, "Stack now");
+- for (; bottom <= top; ++bottom)
+- YYFPRINTF (stderr, " %d", *bottom);
++ for (; yybottom <= yytop; yybottom++)
++ {
++ int yybot = *yybottom;
++ YYFPRINTF (stderr, " %d", yybot);
++ }
+ YYFPRINTF (stderr, "\n");
+ }
+
+@@ -1029,11 +1026,11 @@
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+- fprintf (stderr, " $%d = ", yyi + 1);
++ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+- fprintf (stderr, "\n");
++ YYFPRINTF (stderr, "\n");
+ }
+ }
+
+@@ -1308,7 +1305,7 @@
+
+ switch (yytype)
+ {
+- case 51: /* "choice_entry" */
++ case 53: /* "choice_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+@@ -1318,7 +1315,7 @@
+ };
+
+ break;
+- case 57: /* "if_entry" */
++ case 59: /* "if_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+@@ -1328,7 +1325,7 @@
+ };
+
+ break;
+- case 62: /* "menu_entry" */
++ case 65: /* "menu_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+@@ -1343,10 +1340,8 @@
+ break;
+ }
+ }
+-
+
+ /* Prevent warnings from -Wmissing-prototypes. */
+-
+ #ifdef YYPARSE_PARAM
+ #if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+@@ -1362,11 +1357,10 @@
+ #endif /* ! YYPARSE_PARAM */
+
+
+-
+-/* The look-ahead symbol. */
++/* The lookahead symbol. */
+ int yychar;
+
+-/* The semantic value of the look-ahead symbol. */
++/* The semantic value of the lookahead symbol. */
+ YYSTYPE yylval;
+
+ /* Number of syntax errors so far. */
+@@ -1374,9 +1368,9 @@
+
+
+
+-/*----------.
+-| yyparse. |
+-`----------*/
++/*-------------------------.
++| yyparse or yypush_parse. |
++`-------------------------*/
+
+ #ifdef YYPARSE_PARAM
+ #if (defined __STDC__ || defined __C99__FUNC__ \
+@@ -1400,14 +1394,39 @@
+ #endif
+ #endif
+ {
+-
+- int yystate;
++
++
++ int yystate;
++ /* Number of tokens to shift before error messages enabled. */
++ int yyerrstatus;
++
++ /* The stacks and their tools:
++ `yyss': related to states.
++ `yyvs': related to semantic values.
++
++ Refer to the stacks thru separate pointers, to allow yyoverflow
++ to reallocate them elsewhere. */
++
++ /* The state stack. */
++ yytype_int16 yyssa[YYINITDEPTH];
++ yytype_int16 *yyss;
++ yytype_int16 *yyssp;
++
++ /* The semantic value stack. */
++ YYSTYPE yyvsa[YYINITDEPTH];
++ YYSTYPE *yyvs;
++ YYSTYPE *yyvsp;
++
++ YYSIZE_T yystacksize;
++
+ int yyn;
+ int yyresult;
+- /* Number of tokens to shift before error messages enabled. */
+- int yyerrstatus;
+- /* Look-ahead token as an internal (translated) token number. */
+- int yytoken = 0;
++ /* Lookahead token as an internal (translated) token number. */
++ int yytoken;
++ /* The variables used to return semantic value and location from the
++ action routines. */
++ YYSTYPE yyval;
++
+ #if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+@@ -1415,51 +1434,28 @@
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+ #endif
+
+- /* Three stacks and their tools:
+- `yyss': related to states,
+- `yyvs': related to semantic values,
+- `yyls': related to locations.
+-
+- Refer to the stacks thru separate pointers, to allow yyoverflow
+- to reallocate them elsewhere. */
+-
+- /* The state stack. */
+- yytype_int16 yyssa[YYINITDEPTH];
+- yytype_int16 *yyss = yyssa;
+- yytype_int16 *yyssp;
+-
+- /* The semantic value stack. */
+- YYSTYPE yyvsa[YYINITDEPTH];
+- YYSTYPE *yyvs = yyvsa;
+- YYSTYPE *yyvsp;
+-
+-
+-
+ #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+- YYSIZE_T yystacksize = YYINITDEPTH;
+-
+- /* The variables used to return semantic value and location from the
+- action routines. */
+- YYSTYPE yyval;
+-
+-
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
++ yytoken = 0;
++ yyss = yyssa;
++ yyvs = yyvsa;
++ yystacksize = YYINITDEPTH;
++
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+- yychar = YYEMPTY; /* Cause a token to be read. */
++ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+-
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+@@ -1489,7 +1485,6 @@
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+-
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+@@ -1497,7 +1492,6 @@
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+-
+ &yystacksize);
+
+ yyss = yyss1;
+@@ -1520,9 +1514,8 @@
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+- YYSTACK_RELOCATE (yyss);
+- YYSTACK_RELOCATE (yyvs);
+-
++ YYSTACK_RELOCATE (yyss_alloc, yyss);
++ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ # undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+@@ -1533,7 +1526,6 @@
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+-
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+@@ -1543,6 +1535,9 @@
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
++ if (yystate == YYFINAL)
++ YYACCEPT;
++
+ goto yybackup;
+
+ /*-----------.
+@@ -1551,16 +1546,16 @@
+ yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+- look-ahead token if we need one and don't already have one. */
++ lookahead token if we need one and don't already have one. */
+
+- /* First try to decide what to do without reference to look-ahead token. */
++ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+- /* Not known => get a look-ahead token if don't already have one. */
++ /* Not known => get a lookahead token if don't already have one. */
+
+- /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
++ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1592,20 +1587,16 @@
+ goto yyreduce;
+ }
+
+- if (yyn == YYFINAL)
+- YYACCEPT;
+-
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+- /* Shift the look-ahead token. */
++ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+- /* Discard the shifted token unless it is eof. */
+- if (yychar != YYEOF)
+- yychar = YYEMPTY;
++ /* Discard the shifted token. */
++ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+@@ -1644,39 +1635,39 @@
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+- case 8:
++ case 10:
+
+ { zconf_error("unexpected end statement"); ;}
+ break;
+
+- case 9:
++ case 11:
+
+ { zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); ;}
+ break;
+
+- case 10:
++ case 12:
+
+ {
+ zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
+ ;}
+ break;
+
+- case 11:
++ case 13:
+
+ { zconf_error("invalid statement"); ;}
+ break;
+
+- case 25:
++ case 28:
+
+ { zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); ;}
+ break;
+
+- case 26:
++ case 29:
+
+ { zconf_error("invalid option"); ;}
+ break;
+
+- case 27:
++ case 30:
+
+ {
+ struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
+@@ -1686,7 +1677,7 @@
+ ;}
+ break;
+
+- case 28:
++ case 31:
+
+ {
+ menu_end_entry();
+@@ -1694,7 +1685,7 @@
+ ;}
+ break;
+
+- case 29:
++ case 32:
+
+ {
+ struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
+@@ -1704,7 +1695,7 @@
+ ;}
+ break;
+
+- case 30:
++ case 33:
+
+ {
+ if (current_entry->prompt)
+@@ -1716,7 +1707,7 @@
+ ;}
+ break;
+
+- case 38:
++ case 41:
+
+ {
+ menu_set_type((yyvsp[(1) - (3)].id)->stype);
+@@ -1726,7 +1717,7 @@
+ ;}
+ break;
+
+- case 39:
++ case 42:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
+@@ -1734,7 +1725,7 @@
+ ;}
+ break;
+
+- case 40:
++ case 43:
+
+ {
+ menu_add_expr(P_DEFAULT, (yyvsp[(2) - (4)].expr), (yyvsp[(3) - (4)].expr));
+@@ -1746,7 +1737,7 @@
+ ;}
+ break;
+
+- case 41:
++ case 44:
+
+ {
+ menu_add_symbol(P_SELECT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
+@@ -1754,7 +1745,7 @@
+ ;}
+ break;
+
+- case 42:
++ case 45:
+
+ {
+ menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[(2) - (5)].symbol), (yyvsp[(3) - (5)].symbol)), (yyvsp[(4) - (5)].expr));
+@@ -1762,10 +1753,10 @@
+ ;}
+ break;
+
+- case 45:
++ case 48:
+
+ {
+- struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
++ const struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
+ if (id && id->flags & TF_OPTION)
+ menu_add_option(id->token, (yyvsp[(3) - (3)].string));
+ else
+@@ -1774,17 +1765,17 @@
+ ;}
+ break;
+
+- case 46:
++ case 49:
+
+ { (yyval.string) = NULL; ;}
+ break;
+
+- case 47:
++ case 50:
+
+ { (yyval.string) = (yyvsp[(2) - (2)].string); ;}
+ break;
+
+- case 48:
++ case 51:
+
+ {
+ struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
+@@ -1795,14 +1786,14 @@
+ ;}
+ break;
+
+- case 49:
++ case 52:
+
+ {
+ (yyval.menu) = menu_add_menu();
+ ;}
+ break;
+
+- case 50:
++ case 53:
+
+ {
+ if (zconf_endtoken((yyvsp[(1) - (1)].id), T_CHOICE, T_ENDCHOICE)) {
+@@ -1812,7 +1803,7 @@
+ ;}
+ break;
+
+- case 58:
++ case 61:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
+@@ -1820,7 +1811,7 @@
+ ;}
+ break;
+
+- case 59:
++ case 62:
+
+ {
+ if ((yyvsp[(1) - (3)].id)->stype == S_BOOLEAN || (yyvsp[(1) - (3)].id)->stype == S_TRISTATE) {
+@@ -1833,7 +1824,7 @@
+ ;}
+ break;
+
+- case 60:
++ case 63:
+
+ {
+ current_entry->sym->flags |= SYMBOL_OPTIONAL;
+@@ -1841,7 +1832,7 @@
+ ;}
+ break;
+
+- case 61:
++ case 64:
+
+ {
+ if ((yyvsp[(1) - (4)].id)->stype == S_UNKNOWN) {
+@@ -1853,7 +1844,7 @@
+ ;}
+ break;
+
+- case 64:
++ case 67:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
+@@ -1863,7 +1854,7 @@
+ ;}
+ break;
+
+- case 65:
++ case 68:
+
+ {
+ if (zconf_endtoken((yyvsp[(1) - (1)].id), T_IF, T_ENDIF)) {
+@@ -1873,7 +1864,14 @@
+ ;}
+ break;
+
+- case 71:
++ case 74:
++
++ {
++ menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
++;}
++ break;
++
++ case 75:
+
+ {
+ menu_add_entry(NULL);
+@@ -1882,14 +1880,14 @@
+ ;}
+ break;
+
+- case 72:
++ case 76:
+
+ {
+ (yyval.menu) = menu_add_menu();
+ ;}
+ break;
+
+- case 73:
++ case 77:
+
+ {
+ if (zconf_endtoken((yyvsp[(1) - (1)].id), T_MENU, T_ENDMENU)) {
+@@ -1899,7 +1897,7 @@
+ ;}
+ break;
+
+- case 79:
++ case 83:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
+@@ -1907,7 +1905,7 @@
+ ;}
+ break;
+
+- case 80:
++ case 84:
+
+ {
+ menu_add_entry(NULL);
+@@ -1916,14 +1914,14 @@
+ ;}
+ break;
+
+- case 81:
++ case 85:
+
+ {
+ menu_end_entry();
+ ;}
+ break;
+
+- case 82:
++ case 86:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
+@@ -1931,14 +1929,14 @@
+ ;}
+ break;
+
+- case 83:
++ case 87:
+
+ {
+ current_entry->help = (yyvsp[(2) - (2)].string);
+ ;}
+ break;
+
+- case 88:
++ case 92:
+
+ {
+ menu_add_dep((yyvsp[(3) - (4)].expr));
+@@ -1946,90 +1944,96 @@
+ ;}
+ break;
+
+- case 90:
++ case 96:
++
++ {
++ menu_add_visibility((yyvsp[(2) - (2)].expr));
++;}
++ break;
++
++ case 98:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
+ ;}
+ break;
+
+- case 93:
++ case 101:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
+ break;
+
+- case 94:
++ case 102:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
+ break;
+
+- case 95:
++ case 103:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
+ break;
+
+- case 98:
++ case 106:
+
+ { (yyval.expr) = NULL; ;}
+ break;
+
+- case 99:
++ case 107:
+
+ { (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
+ break;
+
+- case 100:
++ case 108:
+
+ { (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); ;}
+ break;
+
+- case 101:
++ case 109:
+
+ { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
+ break;
+
+- case 102:
++ case 110:
+
+ { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
+ break;
+
+- case 103:
++ case 111:
+
+ { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
+ break;
+
+- case 104:
++ case 112:
+
+ { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); ;}
+ break;
+
+- case 105:
++ case 113:
+
+ { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
+ break;
+
+- case 106:
++ case 114:
+
+ { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
+ break;
+
+- case 107:
++ case 115:
+
+ { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); ;}
+ break;
+
+- case 108:
++ case 116:
+
+ { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
+ break;
+
+- case 109:
++ case 117:
+
+ { (yyval.string) = NULL; ;}
+ break;
+
+
+-/* Line 1267 of yacc.c. */
+
+ default: break;
+ }
+@@ -2041,7 +2045,6 @@
+
+ *++yyvsp = yyval;
+
+-
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+@@ -2106,7 +2109,7 @@
+
+ if (yyerrstatus == 3)
+ {
+- /* If just tried and failed to reuse look-ahead token after an
++ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+@@ -2123,7 +2126,7 @@
+ }
+ }
+
+- /* Else will try to reuse look-ahead token after shifting the error
++ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+@@ -2180,9 +2183,6 @@
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+- if (yyn == YYFINAL)
+- YYACCEPT;
+-
+ *++yyvsp = yylval;
+
+
+@@ -2207,7 +2207,7 @@
+ yyresult = 1;
+ goto yyreturn;
+
+-#ifndef yyoverflow
++#if !defined(yyoverflow) || YYERROR_VERBOSE
+ /*-------------------------------------------------.
+ | yyexhaustedlab -- memory exhaustion comes here. |
+ `-------------------------------------------------*/
+@@ -2218,7 +2218,7 @@
+ #endif
+
+ yyreturn:
+- if (yychar != YYEOF && yychar != YYEMPTY)
++ if (yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+@@ -2255,16 +2255,14 @@
+ zconf_initscan(name);
+
+ sym_init();
+- menu_init();
++ _menu_init();
+ modules_sym = sym_lookup(NULL, 0);
+ modules_sym->type = S_BOOLEAN;
+ modules_sym->flags |= SYMBOL_AUTO;
+ rootmenu.prompt = menu_add_prompt(P_MENU, "uClibc Configuration", NULL);
+
+-#if YYDEBUG
+ if (getenv("ZCONF_DEBUG"))
+ zconfdebug = 1;
+-#endif
+ zconfparse();
+ if (zconfnerrs)
+ exit(1);
+@@ -2274,6 +2272,10 @@
+ prop = prop_alloc(P_DEFAULT, modules_sym);
+ prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
+ }
++
++ rootmenu.prompt->text = _(rootmenu.prompt->text);
++ rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
++
+ menu_finalize(&rootmenu);
+ for_all_symbols(i, sym) {
+ if (sym_check_deps(sym))
+@@ -2284,7 +2286,7 @@
+ sym_set_change_count(1);
+ }
+
+-const char *zconf_tokenname(int token)
++static const char *zconf_tokenname(int token)
+ {
+ switch (token) {
+ case T_MENU: return "menu";
+@@ -2294,11 +2296,12 @@
+ case T_IF: return "if";
+ case T_ENDIF: return "endif";
+ case T_DEPENDS: return "depends";
++ case T_VISIBLE: return "visible";
+ }
+ return "<token>";
+ }
+
+-static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
++static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
+ {
+ if (id->token != endtoken) {
+ zconf_error("unexpected '%s' within %s block",
+@@ -2343,12 +2346,10 @@
+
+ static void zconferror(const char *err)
+ {
+-#if YYDEBUG
+ fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
+-#endif
+ }
+
+-void print_quoted_string(FILE *out, const char *str)
++static void print_quoted_string(FILE *out, const char *str)
+ {
+ const char *p;
+ int len;
+@@ -2365,15 +2366,15 @@
+ putc('"', out);
+ }
+
+-void print_symbol(FILE *out, struct menu *menu)
++static void print_symbol(FILE *out, struct menu *menu)
+ {
+ struct symbol *sym = menu->sym;
+ struct property *prop;
+
+ if (sym_is_choice(sym))
+- fprintf(out, "choice\n");
++ fprintf(out, "\nchoice\n");
+ else
+- fprintf(out, "config %s\n", sym->name);
++ fprintf(out, "\nconfig %s\n", sym->name);
+ switch (sym->type) {
+ case S_BOOLEAN:
+ fputs(" boolean\n", out);
+@@ -2419,6 +2420,21 @@
+ case P_CHOICE:
+ fputs(" #choice value\n", out);
+ break;
++ case P_SELECT:
++ fputs( " select ", out);
++ expr_fprint(prop->expr, out);
++ fputc('\n', out);
++ break;
++ case P_RANGE:
++ fputs( " range ", out);
++ expr_fprint(prop->expr, out);
++ fputc('\n', out);
++ break;
++ case P_MENU:
++ fputs( " menu ", out);
++ print_quoted_string(out, prop->text);
++ fputc('\n', out);
++ break;
+ default:
+ fprintf(out, " unknown prop %d!\n", prop->type);
+ break;
+@@ -2430,7 +2446,6 @@
+ menu->help[len] = 0;
+ fprintf(out, " help\n%s\n", menu->help);
+ }
+- fputc('\n', out);
+ }
+
+ void zconfdump(FILE *out)
+@@ -2463,7 +2478,6 @@
+ expr_fprint(prop->visible.expr, out);
+ fputc('\n', out);
+ }
+- fputs("\n", out);
+ }
+
+ if (menu->list)
+@@ -2481,7 +2495,7 @@
+ }
+ }
+
+-#include "lex.zconf.c"
++#include "zconf.lex.c"
+ #include "util.c"
+ #include "confdata.c"
+ #include "expr.c"
+diff -Nur uClibc-0.9.33.2/extra/config/zconf.y uClibc-git/extra/config/zconf.y
+--- uClibc-0.9.33.2/extra/config/zconf.y 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/config/zconf.y 2014-02-03 12:32:56.000000000 +0100
+@@ -11,11 +11,8 @@
+ #include <string.h>
+ #include <stdbool.h>
+
+-#define LKC_DIRECT_LINK
+ #include "lkc.h"
+
+-#include "zconf.hash.c"
+-
+ #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
+
+ #define PRINTD 0x0001
+@@ -27,18 +24,14 @@
+ static void zconfprint(const char *err, ...);
+ static void zconf_error(const char *err, ...);
+ static void zconferror(const char *err);
+-static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
++static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
+
+-struct symbol *symbol_hash[257];
++struct symbol *symbol_hash[SYMBOL_HASHSIZE];
+
+ static struct menu *current_menu, *current_entry;
+
+-#define YYDEBUG 0
+-#if YYDEBUG
+-#define YYERROR_VERBOSE
+-#endif
+ %}
+-%expect 26
++%expect 30
+
+ %union
+ {
+@@ -47,7 +40,7 @@
+ struct symbol *symbol;
+ struct expr *expr;
+ struct menu *menu;
+- struct kconf_id *id;
++ const struct kconf_id *id;
+ }
+
+ %token <id>T_MAINMENU
+@@ -70,6 +63,7 @@
+ %token <id>T_DEFAULT
+ %token <id>T_SELECT
+ %token <id>T_RANGE
++%token <id>T_VISIBLE
+ %token <id>T_OPTION
+ %token <id>T_ON
+ %token <string> T_WORD
+@@ -100,15 +94,21 @@
+ menu_end_menu();
+ } if_entry menu_entry choice_entry
+
++%{
++/* Include zconf.hash.c here so it can see the token constants. */
++#include "zconf.hash.c"
++%}
++
+ %%
+-input: stmt_list;
++input: nl start | start;
++
++start: mainmenu_stmt stmt_list | stmt_list;
+
+ stmt_list:
+ /* empty */
+ | stmt_list common_stmt
+ | stmt_list choice_stmt
+ | stmt_list menu_stmt
+- | stmt_list T_MAINMENU prompt nl
+ | stmt_list end { zconf_error("unexpected end statement"); }
+ | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
+ | stmt_list option_name error T_EOL
+@@ -119,7 +119,7 @@
+ ;
+
+ option_name:
+- T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT
++ T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT | T_VISIBLE
+ ;
+
+ common_stmt:
+@@ -224,7 +224,7 @@
+ /* empty */
+ | symbol_option_list T_WORD symbol_option_arg
+ {
+- struct kconf_id *id = kconf_id_lookup($2, strlen($2));
++ const struct kconf_id *id = kconf_id_lookup($2, strlen($2));
+ if (id && id->flags & TF_OPTION)
+ menu_add_option(id->token, $3);
+ else
+@@ -339,6 +339,13 @@
+ | if_block choice_stmt
+ ;
+
++/* mainmenu entry */
++
++mainmenu_stmt: T_MAINMENU prompt nl
++{
++ menu_add_prompt(P_MENU, $2, NULL);
++};
++
+ /* menu entry */
+
+ menu: T_MENU prompt T_EOL
+@@ -348,7 +355,7 @@
+ printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
+ };
+
+-menu_entry: menu depends_list
++menu_entry: menu visibility_list depends_list
+ {
+ $$ = menu_add_menu();
+ };
+@@ -419,6 +426,19 @@
+ printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
+ };
+
++/* visibility option */
++
++visibility_list:
++ /* empty */
++ | visibility_list visible
++ | visibility_list T_EOL
++;
++
++visible: T_VISIBLE if_expr
++{
++ menu_add_visibility($2);
++};
++
+ /* prompt statement */
+
+ prompt_stmt_opt:
+@@ -472,16 +492,14 @@
+ zconf_initscan(name);
+
+ sym_init();
+- menu_init();
++ _menu_init();
+ modules_sym = sym_lookup(NULL, 0);
+ modules_sym->type = S_BOOLEAN;
+ modules_sym->flags |= SYMBOL_AUTO;
+ rootmenu.prompt = menu_add_prompt(P_MENU, "uClibc Configuration", NULL);
+
+-#if YYDEBUG
+ if (getenv("ZCONF_DEBUG"))
+ zconfdebug = 1;
+-#endif
+ zconfparse();
+ if (zconfnerrs)
+ exit(1);
+@@ -491,6 +509,10 @@
+ prop = prop_alloc(P_DEFAULT, modules_sym);
+ prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
+ }
++
++ rootmenu.prompt->text = _(rootmenu.prompt->text);
++ rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
++
+ menu_finalize(&rootmenu);
+ for_all_symbols(i, sym) {
+ if (sym_check_deps(sym))
+@@ -501,7 +523,7 @@
+ sym_set_change_count(1);
+ }
+
+-const char *zconf_tokenname(int token)
++static const char *zconf_tokenname(int token)
+ {
+ switch (token) {
+ case T_MENU: return "menu";
+@@ -511,11 +533,12 @@
+ case T_IF: return "if";
+ case T_ENDIF: return "endif";
+ case T_DEPENDS: return "depends";
++ case T_VISIBLE: return "visible";
+ }
+ return "<token>";
+ }
+
+-static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
++static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
+ {
+ if (id->token != endtoken) {
+ zconf_error("unexpected '%s' within %s block",
+@@ -560,12 +583,10 @@
+
+ static void zconferror(const char *err)
+ {
+-#if YYDEBUG
+ fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
+-#endif
+ }
+
+-void print_quoted_string(FILE *out, const char *str)
++static void print_quoted_string(FILE *out, const char *str)
+ {
+ const char *p;
+ int len;
+@@ -582,15 +603,15 @@
+ putc('"', out);
+ }
+
+-void print_symbol(FILE *out, struct menu *menu)
++static void print_symbol(FILE *out, struct menu *menu)
+ {
+ struct symbol *sym = menu->sym;
+ struct property *prop;
+
+ if (sym_is_choice(sym))
+- fprintf(out, "choice\n");
++ fprintf(out, "\nchoice\n");
+ else
+- fprintf(out, "config %s\n", sym->name);
++ fprintf(out, "\nconfig %s\n", sym->name);
+ switch (sym->type) {
+ case S_BOOLEAN:
+ fputs(" boolean\n", out);
+@@ -636,6 +657,21 @@
+ case P_CHOICE:
+ fputs(" #choice value\n", out);
+ break;
++ case P_SELECT:
++ fputs( " select ", out);
++ expr_fprint(prop->expr, out);
++ fputc('\n', out);
++ break;
++ case P_RANGE:
++ fputs( " range ", out);
++ expr_fprint(prop->expr, out);
++ fputc('\n', out);
++ break;
++ case P_MENU:
++ fputs( " menu ", out);
++ print_quoted_string(out, prop->text);
++ fputc('\n', out);
++ break;
+ default:
+ fprintf(out, " unknown prop %d!\n", prop->type);
+ break;
+@@ -647,7 +683,6 @@
+ menu->help[len] = 0;
+ fprintf(out, " help\n%s\n", menu->help);
+ }
+- fputc('\n', out);
+ }
+
+ void zconfdump(FILE *out)
+@@ -680,7 +715,6 @@
+ expr_fprint(prop->visible.expr, out);
+ fputc('\n', out);
+ }
+- fputs("\n", out);
+ }
+
+ if (menu->list)
+@@ -698,7 +732,7 @@
+ }
+ }
+
+-#include "lex.zconf.c"
++#include "zconf.lex.c"
+ #include "util.c"
+ #include "confdata.c"
+ #include "expr.c"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.alpha uClibc-git/extra/Configs/Config.alpha
+--- uClibc-0.9.33.2/extra/Configs/Config.alpha 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.alpha 2014-02-03 12:32:56.000000000 +0100
+@@ -13,4 +13,5 @@
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_MMU
+ select ARCH_HAS_NO_LDSO
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+ select UCLIBC_HAS_LFS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.arc uClibc-git/extra/Configs/Config.arc
+--- uClibc-0.9.33.2/extra/Configs/Config.arc 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/Configs/Config.arc 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++#
++# For a description of the syntax of this configuration file,
++# see extra/config/Kconfig-language.txt
++#
++config TARGET_ARCH
++ default "arc"
++
++config FORCE_OPTIONS_FOR_ARCH
++ bool
++ default y
++ select ARCH_ANY_ENDIAN
++
++choice
++ prompt "Target Processor Type"
++ default CONFIG_ARC_CPU_700
++
++config CONFIG_ARC_CPU_700
++ bool "ARC700"
++ select ARCH_HAS_MMU
++ help
++ ARCompact ISA based ARC CPU
++
++endchoice
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.arm uClibc-git/extra/Configs/Config.arm
+--- uClibc-0.9.33.2/extra/Configs/Config.arm 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.arm 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,8 @@
+ bool
+ default y
+ select ARCH_ANY_ENDIAN
++ select ARCH_HAS_UCONTEXT
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ config CONFIG_ARM_EABI
+ bool "Build for EABI"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.avr32 uClibc-git/extra/Configs/Config.avr32
+--- uClibc-0.9.33.2/extra/Configs/Config.avr32 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.avr32 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+ bool
+ default y
+ select ARCH_BIG_ENDIAN
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+ select FORCE_SHAREABLE_TEXT_SEGMENTS
+
+ choice
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.bfin uClibc-git/extra/Configs/Config.bfin
+--- uClibc-0.9.33.2/extra/Configs/Config.bfin 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.bfin 2014-02-03 12:32:56.000000000 +0100
+@@ -12,3 +12,4 @@
+ default y
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_NO_MMU
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.cris uClibc-git/extra/Configs/Config.cris
+--- uClibc-0.9.33.2/extra/Configs/Config.cris 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.cris 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+ bool
+ default y
+ select ARCH_LITTLE_ENDIAN
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target Architecture Type"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.e1 uClibc-git/extra/Configs/Config.e1
+--- uClibc-0.9.33.2/extra/Configs/Config.e1 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.e1 2014-02-03 12:32:56.000000000 +0100
+@@ -13,3 +13,4 @@
+ select ARCH_BIG_ENDIAN
+ select ARCH_HAS_NO_MMU
+ select ARCH_HAS_NO_SHARED
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.frv uClibc-git/extra/Configs/Config.frv
+--- uClibc-0.9.33.2/extra/Configs/Config.frv 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.frv 2014-02-03 12:32:56.000000000 +0100
+@@ -13,3 +13,4 @@
+ select ARCH_BIG_ENDIAN
+ select UCLIBC_HAS_FPU
+ select ARCH_HAS_NO_MMU
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.h8300 uClibc-git/extra/Configs/Config.h8300
+--- uClibc-0.9.33.2/extra/Configs/Config.h8300 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.h8300 2014-02-03 12:32:56.000000000 +0100
+@@ -12,6 +12,7 @@
+ default y
+ select ARCH_ANY_ENDIAN
+ select ARCH_HAS_NO_MMU
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target Processor"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.hppa uClibc-git/extra/Configs/Config.hppa
+--- uClibc-0.9.33.2/extra/Configs/Config.hppa 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.hppa 2014-02-03 12:32:56.000000000 +0100
+@@ -15,3 +15,4 @@
+ select HAS_NO_THREADS
+ select ARCH_HAS_NO_LDSO
+ select HAVE_NO_SSP
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.i386 uClibc-git/extra/Configs/Config.i386
+--- uClibc-0.9.33.2/extra/Configs/Config.i386 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.i386 2014-02-03 12:32:56.000000000 +0100
+@@ -12,44 +12,17 @@
+ default y
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_MMU
++ select ARCH_HAS_UCONTEXT
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target x86 Processor Family"
+- default CONFIG_486
++ default CONFIG_686
+ help
+ This is the processor type of your CPU. This information is used for
+- optimizing purposes. To build a library that will run on all x86 CPU
+- types (albeit not optimally fast), you can specify "386" here. If
+- you pick anything other than "386", there is no guarantee that uClibc
+- will even run on anything other than the selected processor type.
+-
+- Here are the settings recommended for greatest speed:
+- - "Generic 386" select this if your compiler is already setup to
+- optimize things properly.
+- - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI
+- 486DLC/DLC2, UMC 486SX-S and NexGen Nx586. Only "386" kernels
+- will run on a 386 class machine.
+- - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or
+- SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
+- - "586" for Intel Pentium and other generic Pentium CPUs
+- - "Pentium-MMX" for the Intel Pentium MMX.
+- - "Pentium-Pro" for the Intel Pentium Pro/Celeron/Pentium II.
+- - "Pentium-III" for the Intel Pentium III
+- and Celerons based on the Coppermine core.
+- - "Pentium-4" for the Intel Pentium 4.
+- - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
+- - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird).
+- - "Elan" for the AMD Elan.
+- - "Crusoe" for the Transmeta Crusoe series.
+- - "Winchip-C6" for original IDT Winchip.
+- - "Winchip-2/Winchip-2A/Winchip-3" for IDT Winchip CPUs
+- - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3.
+- - "VIA C3-2 Nehemiah" model 9 and above.
+-
+- If you don't know what to do, choose "386".
+-
+-config CONFIG_GENERIC_386
+- bool "Generic 386"
++ selecting different handcoded optimization functions. Nowadays, most
++ people have an i686 CPU. If you don't, you most likely know what this
++ means and can pick the right one for your processor.
+
+ config CONFIG_386
+ bool "386"
+@@ -58,45 +31,9 @@
+ bool "486"
+
+ config CONFIG_586
+- bool "Pentium/586/K5/5x86/6x86/6x86MX"
+-
+-config CONFIG_586MMX
+- bool "Pentium-MMX"
++ bool "586"
+
+ config CONFIG_686
+- bool "Pentium-Pro"
+-
+-config CONFIG_PENTIUMII
+- bool "Celeron/Pentium-II"
+-
+-config CONFIG_PENTIUMIII
+- bool "Pentium-III/Celeron(Coppermine)/Pentium-III Xeon"
+-
+-config CONFIG_PENTIUM4
+- bool "Pentium-4/Celeron(P4-based)/Xeon"
+-
+-config CONFIG_K6
+- bool "K6/K6-II/K6-III"
+-
+-config CONFIG_K7
+- bool "Athlon/Duron/K7"
+-
+-config CONFIG_ELAN
+- bool "Elan"
+-
+-config CONFIG_CRUSOE
+- bool "Crusoe"
+-
+-config CONFIG_WINCHIPC6
+- bool "Winchip-C6"
+-
+-config CONFIG_WINCHIP2
+- bool "Winchip-2/Winchip-2A/Winchip-3"
+-
+-config CONFIG_CYRIXIII
+- bool "CyrixIII/VIA-C3"
+-
+-config CONFIG_NEHEMIAH
+- bool "VIA C3-2 (Nehemiah)"
++ bool "686"
+
+ endchoice
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.i960 uClibc-git/extra/Configs/Config.i960
+--- uClibc-0.9.33.2/extra/Configs/Config.i960 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.i960 2014-02-03 12:32:56.000000000 +0100
+@@ -13,3 +13,4 @@
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_NO_MMU
+ select HAS_NO_THREADS
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.ia64 uClibc-git/extra/Configs/Config.ia64
+--- uClibc-0.9.33.2/extra/Configs/Config.ia64 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.ia64 2014-02-03 12:32:56.000000000 +0100
+@@ -13,3 +13,4 @@
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_MMU
+ select ARCH_HAS_NO_LDSO
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.in uClibc-git/extra/Configs/Config.in
+--- uClibc-0.9.33.2/extra/Configs/Config.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.in 2014-02-03 12:32:56.000000000 +0100
+@@ -3,15 +3,20 @@
+ # see extra/config/Kconfig-language.txt
+ #
+
+-mainmenu "uClibc C Library Configuration"
++mainmenu "uClibc $VERSION C Library Configuration"
+
+ config DESIRED_TARGET_ARCH
+ string
+ option env="ARCH"
+
++config VERSION
++ string
++ option env="VERSION"
++
+ choice
+ prompt "Target Architecture"
+ default TARGET_alpha if DESIRED_TARGET_ARCH = "alpha"
++ default TARGET_arc if DESIRED_TARGET_ARCH = "arc"
+ default TARGET_arm if DESIRED_TARGET_ARCH = "arm"
+ default TARGET_avr32 if DESIRED_TARGET_ARCH = "avr32"
+ default TARGET_bfin if DESIRED_TARGET_ARCH = "bfin"
+@@ -24,6 +29,7 @@
+ default TARGET_i960 if DESIRED_TARGET_ARCH = "i960"
+ default TARGET_ia64 if DESIRED_TARGET_ARCH = "ia64"
+ default TARGET_m68k if DESIRED_TARGET_ARCH = "m68k"
++ default TARGET_metag if DESIRED_TARGET_ARCH = "metag"
+ default TARGET_microblaze if DESIRED_TARGET_ARCH = "microblaze"
+ default TARGET_mips if DESIRED_TARGET_ARCH = "mips"
+ default TARGET_nios if DESIRED_TARGET_ARCH = "nios"
+@@ -42,6 +48,9 @@
+ config TARGET_alpha
+ bool "alpha"
+
++config TARGET_arc
++ bool "arc"
++
+ config TARGET_arm
+ bool "arm"
+
+@@ -81,6 +90,9 @@
+ config TARGET_m68k
+ bool "m68k"
+
++config TARGET_metag
++ bool "metag"
++
+ config TARGET_microblaze
+ bool "microblaze"
+
+@@ -174,6 +186,10 @@
+ source "extra/Configs/Config.m68k"
+ endif
+
++if TARGET_metag
++source "extra/Configs/Config.metag"
++endif
++
+ if TARGET_nios
+ source "extra/Configs/Config.nios"
+ endif
+@@ -226,15 +242,19 @@
+ source "extra/Configs/Config.c6x"
+ endif
+
++if TARGET_arc
++source "extra/Configs/Config.arc"
++endif
++
+ config TARGET_SUBARCH
+ string
+ default "e500" if CONFIG_E500
+ default "classic" if CONFIG_CLASSIC
+ default "sh4" if CONFIG_SH4
+- default "" if CONFIG_GENERIC_386 || CONFIG_386
++ default "" if CONFIG_386
+ default "i486" if CONFIG_486
+- default "i586" if CONFIG_586 || CONFIG_586MMX
+- default "i686" if TARGET_ARCH = "i386"
++ default "i586" if CONFIG_586
++ default "i686" if CONFIG_686
+ default ""
+
+ source "extra/Configs/Config.in.arch"
+@@ -261,6 +281,9 @@
+ bool
+ select ARCH_HAS_NO_SHARED
+
++config ARCH_HAS_UCONTEXT
++ bool
++
+ config HAVE_SHARED
+ bool "Enable shared libraries"
+ depends on !ARCH_HAS_NO_SHARED
+@@ -395,6 +418,13 @@
+ Usage of RUNPATH tags is not too common, so disabling this feature
+ should be safe for most people.
+
++config LDSO_SAFE_RUNPATH
++ bool "Allow only RUNPATH beginning with /"
++ depends on LDSO_RUNPATH
++ default y
++ help
++ Allow only absolute path in RPATH/RUNPATH.
++
+ config LDSO_SEARCH_INTERP_PATH
+ bool "Add ldso path to lib search path"
+ depends on HAVE_SHARED
+@@ -423,7 +453,6 @@
+ config LDSO_NO_CLEANUP
+ bool "Disable automatic unloading of dynamically loaded shared objects"
+ depends on HAVE_SHARED
+- default n
+ help
+ If you need complete allocation traces when debugging memory leaks
+ using Valgrind in a process that dynamically loads shared objects,
+@@ -491,6 +520,7 @@
+
+ config LINUXTHREADS_NEW
+ bool "slightly newer version of linuxthreads"
++ depends on ARCH_HAS_DEPRECATED_SYSCALLS
+ help
+ The new version has not been tested much, and lacks ports for arches
+ which glibc does not support (like bfin/frv/etc...), but is based on
+@@ -501,6 +531,7 @@
+ bool "Native POSIX Threading (NPTL)"
+ select UCLIBC_HAS_TLS
+ select UCLIBC_HAS_STDIO_FUTEXES
++ select UCLIBC_HAS_REALTIME
+ # i386 has no lowlevellock support (yet) as opposed to i486 onward
+ depends on !CONFIG_386
+ help
+@@ -629,6 +660,15 @@
+ does not detect glibc style returning-a-valid-pointer-for-malloc(0)
+ behavior). Most people can safely answer N.
+
++config UCLIBC_HAS_OBSTACK
++ bool "Obstack Support (gnu extension)"
++ help
++ When this option is enabled, uClibc will provide support for obstacks.
++ An obstack is a structure in which memory can be dynamically allocated
++ as a 'stack of objects'. Many programs need this GNU extention and
++ you should say Y if you are using any. Otherwise, say N to save some
++ space.
++
+ config UCLIBC_DYNAMIC_ATEXIT
+ bool "Dynamic atexit() Support"
+ default y
+@@ -650,6 +690,16 @@
+ Enable this option if you want to update from 0.9.28 to git/0.9.29,
+ else you will be missing atexit() until you rebuild all apps.
+
++config UCLIBC_SUSV2_LEGACY
++ bool "Enable SuSv2 LEGACY functions"
++ help
++ Enable this option if you want to have SuSv2 LEGACY functions
++ Currently applies to:
++
++ valloc
++
++ WARNING! ABI incompatibility.
++
+ config UCLIBC_SUSV3_LEGACY
+ bool "Enable SuSv3 LEGACY functions"
+ #vfork,
+@@ -670,6 +720,19 @@
+
+ WARNING! ABI incompatibility.
+
++config UCLIBC_HAS_CONTEXT_FUNCS
++ bool "Use obsolescent context control functions"
++ depends on UCLIBC_SUSV3_LEGACY && ARCH_HAS_UCONTEXT
++ help
++ Add into library the SuSv3 obsolescent functions used for context
++ control. The setcontext family allows the implementation in C of
++ advanced control flow patterns such as iterators, fibers, and
++ coroutines. They may be viewed as an advanced version of
++ setjmp/longjmp; whereas the latter allows only a single non-local jump
++ up the stack, setcontext allows the creation of multiple cooperative
++ threads of control, each with its own stack.
++ These functions are: setcontext, getcontext, makecontext, swapcontext.
++
+ config UCLIBC_SUSV3_LEGACY_MACROS
+ bool "Enable SuSv3 LEGACY macros"
+ help
+@@ -737,7 +800,6 @@
+ config UCLIBC_HAS___PROGNAME
+ bool "Support for __progname"
+ default y
+- depends on UCLIBC_HAS_PROGRAM_INVOCATION_NAME
+ help
+ Some packages (like openssh) like to peek into internal libc
+ symbols to make their output a bit more user friendly.
+@@ -1320,6 +1382,12 @@
+ In particular, the following functions will be added to the
+ library:
+
++ ns_skiprr, ns_initparse, ns_parserr, ns_msg_getflag,
++ res_mkquery, res_init, res_ninit, res_close, res_nclose
++ res_query, res_search, res_querydomain,
++ dn_expand, dn_comp,
++ ns_name_uncompress, ns_name_ntop, ns_name_pton, ns_name_unpack,
++ ns_name_pack, ns_name_compress, ns_name_skip, dn_skipname,
+ ns_get16, ns_get32, ns_put16, ns_put32
+
+ config UCLIBC_HAS_LIBRESOLV_STUB
+@@ -1462,7 +1530,7 @@
+
+ config UCLIBC_PREGENERATED_LOCALE_DATA
+ bool "Use Pre-generated Locale Data"
+- depends on UCLIBC_HAS_LOCALE
++ depends on UCLIBC_HAS_LOCALE && !TARGET_metag
+ help
+ Use pre-built locale data.
+
+@@ -1590,19 +1658,6 @@
+
+ Most people will answer 9.
+
+-
+-config UCLIBC_HAS_SCANF_GLIBC_A_FLAG
+- bool "Support glibc's 'a' flag for scanf string conversions (not implemented)"
+- help
+- NOTE!!! Currently Not Implemented!!! Just A Place Holder!! NOTE!!!
+- NOTE!!! Conflicts with an ANSI/ISO C99 scanf flag!! NOTE!!!
+-
+- Answer Y to enable support for glibc's 'a' flag for the scanf string
+- conversions '%s', '%[', '%ls', '%l[', and '%S'. This is used to
+- auto-allocate sufficient memory to hold the data retrieved.
+-
+- Most people will answer N.
+-
+ choice
+ prompt "Stdio buffer size"
+ default UCLIBC_HAS_STDIO_BUFSIZ_4096
+@@ -2093,6 +2148,16 @@
+
+ Most people will answer N.
+
++config ARC4RANDOM_USES_NODEV
++ bool "Do not use /dev/urandom with arc4random()"
++ depends on UCLIBC_HAS_ARC4RANDOM
++ help
++ Answer Y to use gettimeofday(2) and getpid(2) exclusively for
++ arc4random(). This is not a bad idea for a diskless system, but
++ it uses a lot of syscalls to stir each array element.
++
++ Most people will answer N.
++
+ config HAVE_NO_SSP
+ bool
+
+@@ -2145,8 +2210,8 @@
+ choice
+ prompt "Propolice protection blocking signal"
+ depends on UCLIBC_HAS_SSP
+- default PROPOLICE_BLOCK_ABRT if ! DODEBUG
+- default PROPOLICE_BLOCK_SEGV if DODEBUG
++ depends on DODEBUG
++ default PROPOLICE_BLOCK_SEGV
+ help
+ "abort" use SIGABRT to block offending programs.
+ This is the default implementation.
+@@ -2340,6 +2405,7 @@
+ config UCLIBC_MALLOC_DEBUGGING
+ bool "Build malloc with debugging support"
+ depends on MALLOC || MALLOC_STANDARD
++ select DOASSERTS
+ help
+ Answer Y here to compile extra debugging support code into malloc.
+ Malloc debugging output may then be enabled at runtime using the
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.in.arch uClibc-git/extra/Configs/Config.in.arch
+--- uClibc-0.9.33.2/extra/Configs/Config.in.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.in.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -10,9 +10,6 @@
+ if !ARCH_USE_MMU
+ choice
+ prompt "Target File Format"
+-config UCLIBC_FORMAT_ELF
+- bool "ELF"
+- depends on ARCH_USE_MMU
+ config UCLIBC_FORMAT_FDPIC_ELF
+ bool "FDPIC ELF"
+ depends on !ARCH_USE_MMU && (TARGET_bfin || TARGET_frv)
+@@ -42,6 +39,14 @@
+ comment "Using ELF file format"
+ endif
+
++config ARCH_HAS_DEPRECATED_SYSCALLS
++ bool
++ help
++ New architectures do not support deprecated system calls. However,
++ these system calls are needed to build linuxthreads (old and new) so
++ this symbol controls whether there is support for these threading libraries
++ or not.
++
+ config UCLIBC_SHARED_FLAT_ID
+ int "Shared library ID"
+ default 1
+@@ -152,7 +157,6 @@
+ config DO_C99_MATH
+ bool "Enable full C99 math library support"
+ depends on UCLIBC_HAS_FLOATS
+- default n
+ help
+ If you want the uClibc math library to contain the full set C99
+ math library features, then answer Y. If you leave this set to
+@@ -166,7 +170,6 @@
+ config DO_XSI_MATH
+ bool "Enable XSI math extensions to the ISO C standard (bessel)"
+ depends on UCLIBC_HAS_FLOATS
+- default n
+ help
+ X/Open System Interfaces extensions to ISO C math functions
+ (differential equation functions):
+@@ -177,7 +180,6 @@
+ config UCLIBC_HAS_FENV
+ bool "Enable C99 Floating-point environment"
+ depends on UCLIBC_HAS_FLOATS
+- default n
+ help
+ If you want the uClibc math library to contain the C99 floating
+ point environment, rounding and exception handling functions then
+@@ -198,7 +200,7 @@
+
+ config KERNEL_HEADERS
+ string "Linux kernel header location"
+- default "/usr/include"
++ default ""
+ help
+ The kernel source you use to compile with should be the same
+ as the Linux kernel you run your apps on. uClibc doesn't even
+@@ -209,6 +211,8 @@
+ but then run on Linux 2.0.x, lchown will be compiled into uClibc,
+ but won't work at all. You have been warned.
+
++ If you don't set this, we'll assume the toolchain can find them.
++
+ config UCLIBC_UCLINUX_BROKEN_MUNMAP
+ bool
+ depends on !ARCH_USE_MMU
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.m68k uClibc-git/extra/Configs/Config.m68k
+--- uClibc-0.9.33.2/extra/Configs/Config.m68k 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.m68k 2014-02-03 12:32:56.000000000 +0100
+@@ -11,3 +11,4 @@
+ bool
+ default y
+ select ARCH_BIG_ENDIAN
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.metag uClibc-git/extra/Configs/Config.metag
+--- uClibc-0.9.33.2/extra/Configs/Config.metag 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/Configs/Config.metag 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,32 @@
++#
++# For a description of the syntax of this configuration file,
++# see extra/config/Kconfig-language.txt
++#
++# Copyright (C) 2013, Imagination Technologies Ltd.
++#
++# Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++config TARGET_ARCH
++ default "metag"
++
++config FORCE_OPTIONS_FOR_ARCH
++ bool
++ default y
++ select ARCH_LITTLE_ENDIAN
++ select ARCH_HAS_MMU
++
++choice
++ prompt "Target Processor Type"
++ default CONFIG_META_2_1
++ help
++ This is the processor type of your CPU. This information is used for
++ optimizing purposes.
++
++config CONFIG_META_1_2
++ bool "Meta 1.2"
++
++config CONFIG_META_2_1
++ bool "Meta 2.1"
++
++endchoice
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.microblaze uClibc-git/extra/Configs/Config.microblaze
+--- uClibc-0.9.33.2/extra/Configs/Config.microblaze 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.microblaze 2014-02-03 12:32:56.000000000 +0100
+@@ -6,3 +6,8 @@
+ config TARGET_ARCH
+ string
+ default "microblaze"
++
++config FORCE_OPTIONS_FOR_ARCH
++ bool
++ default y
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.mips uClibc-git/extra/Configs/Config.mips
+--- uClibc-0.9.33.2/extra/Configs/Config.mips 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.mips 2014-02-15 14:18:15.000000000 +0100
+@@ -11,6 +11,8 @@
+ bool
+ default y
+ select ARCH_ANY_ENDIAN
++ select ARCH_HAS_UCONTEXT
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target ABI"
+@@ -70,4 +72,7 @@
+ config CONFIG_MIPS_ISA_MIPS64
+ bool "MIPS64"
+
++config CONFIG_MIPS_ISA_MIPS64R2
++ bool "MIPS64r2"
++
+ endchoice
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.nios uClibc-git/extra/Configs/Config.nios
+--- uClibc-0.9.33.2/extra/Configs/Config.nios 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.nios 2014-02-03 12:32:56.000000000 +0100
+@@ -13,4 +13,5 @@
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_NO_MMU
+ select ARCH_HAS_NO_LDSO
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+ select HAVE_NO_PIC
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.nios2 uClibc-git/extra/Configs/Config.nios2
+--- uClibc-0.9.33.2/extra/Configs/Config.nios2 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.nios2 2014-02-03 12:32:56.000000000 +0100
+@@ -13,4 +13,5 @@
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_NO_MMU
+ select ARCH_HAS_NO_LDSO
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+ select HAVE_NO_PIC
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.powerpc uClibc-git/extra/Configs/Config.powerpc
+--- uClibc-0.9.33.2/extra/Configs/Config.powerpc 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.powerpc 2014-02-03 12:32:56.000000000 +0100
+@@ -12,6 +12,7 @@
+ default y
+ select ARCH_BIG_ENDIAN
+ select ARCH_HAS_MMU
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target Processor Type"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.sh uClibc-git/extra/Configs/Config.sh
+--- uClibc-0.9.33.2/extra/Configs/Config.sh 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.sh 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+ bool
+ default y
+ select ARCH_ANY_ENDIAN
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target Processor Type"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.sh64 uClibc-git/extra/Configs/Config.sh64
+--- uClibc-0.9.33.2/extra/Configs/Config.sh64 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.sh64 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+ bool
+ default y
+ select ARCH_ANY_ENDIAN
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target Processor Type"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.sparc uClibc-git/extra/Configs/Config.sparc
+--- uClibc-0.9.33.2/extra/Configs/Config.sparc 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.sparc 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+ bool
+ default y
+ select ARCH_BIG_ENDIAN
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+
+ choice
+ prompt "Target Processor Type"
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.v850 uClibc-git/extra/Configs/Config.v850
+--- uClibc-0.9.33.2/extra/Configs/Config.v850 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.v850 2014-02-03 12:32:56.000000000 +0100
+@@ -12,4 +12,5 @@
+ default y
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_NO_MMU
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+ select HAVE_NO_PIC
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.vax uClibc-git/extra/Configs/Config.vax
+--- uClibc-0.9.33.2/extra/Configs/Config.vax 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.vax 2014-02-03 12:32:56.000000000 +0100
+@@ -12,3 +12,4 @@
+ default y
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_NO_LDSO
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.x86_64 uClibc-git/extra/Configs/Config.x86_64
+--- uClibc-0.9.33.2/extra/Configs/Config.x86_64 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.x86_64 2014-02-03 12:32:56.000000000 +0100
+@@ -12,3 +12,5 @@
+ default y
+ select ARCH_LITTLE_ENDIAN
+ select ARCH_HAS_MMU
++ select ARCH_HAS_UCONTEXT
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/Config.xtensa uClibc-git/extra/Configs/Config.xtensa
+--- uClibc-0.9.33.2/extra/Configs/Config.xtensa 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/Configs/Config.xtensa 2014-02-03 12:32:56.000000000 +0100
+@@ -6,3 +6,8 @@
+ config TARGET_ARCH
+ string
+ default "xtensa"
++
++config FORCE_OPTIONS_FOR_ARCH
++ bool
++ default y
++ select ARCH_HAS_DEPRECATED_SYSCALLS
+diff -Nur uClibc-0.9.33.2/extra/Configs/defconfigs/arc/defconfig uClibc-git/extra/Configs/defconfigs/arc/defconfig
+--- uClibc-0.9.33.2/extra/Configs/defconfigs/arc/defconfig 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/Configs/defconfigs/arc/defconfig 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,28 @@
++ARCH_WANTS_LITTLE_ENDIAN=y
++# UCLIBC_HAS_FPU is not set
++DO_C99_MATH=y
++KERNEL_HEADERS="%KERNEL_HEADERS%"
++# DOPIC is not set
++# LDSO_CACHE_SUPPORT is not set
++LDSO_RUNPATH=y
++# LDSO_SAFE_RUNPATH is not set
++LINUXTHREADS_OLD=y
++PTHREADS_DEBUG_SUPPORT=y
++UCLIBC_SUSV2_LEGACY=y
++UCLIBC_SUSV3_LEGACY=y
++UCLIBC_SUSV4_LEGACY=y
++UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
++UCLIBC_SV4_DEPRECATED=y
++UCLIBC_HAS_RPC=y
++UCLIBC_HAS_FULL_RPC=y
++UCLIBC_HAS_RESOLVER_SUPPORT=y
++UCLIBC_HAS_LIBRESOLV_STUB=y
++UCLIBC_HAS_LOCALE=y
++UCLIBC_HAS_NFTW=y
++UCLIBC_HAS_FTW=y
++RUNTIME_PREFIX="%RUNTIME_PREFIX%"
++DEVEL_PREFIX="%DEVEL_PREFIX%"
++CROSS_COMPILER_PREFIX="arc-linux-uclibc-"
++# DOSTRIP is not set
++SUPPORT_LD_DEBUG=y
++UCLIBC_HAS_BACKTRACE=y
+diff -Nur uClibc-0.9.33.2/extra/Configs/defconfigs/arc/tb10x_defconfig uClibc-git/extra/Configs/defconfigs/arc/tb10x_defconfig
+--- uClibc-0.9.33.2/extra/Configs/defconfigs/arc/tb10x_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/Configs/defconfigs/arc/tb10x_defconfig 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,37 @@
++ARCH_WANTS_LITTLE_ENDIAN=y
++# UCLIBC_HAS_FPU is not set
++DO_C99_MATH=y
++KERNEL_HEADERS="%KERNEL_HEADERS%"
++# DOPIC is not set
++# LDSO_CACHE_SUPPORT is not set
++LDSO_RUNPATH=y
++# LDSO_SAFE_RUNPATH is not set
++LINUXTHREADS_OLD=y
++PTHREADS_DEBUG_SUPPORT=y
++MALLOC_GLIBC_COMPAT=y
++UCLIBC_SUSV3_LEGACY=y
++UCLIBC_SUSV4_LEGACY=y
++UCLIBC_HAS_GETPT=y
++UCLIBC_HAS_LIBUTIL=y
++UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
++UCLIBC_SV4_DEPRECATED=y
++UCLIBC_HAS_IPV6=y
++UCLIBC_HAS_RPC=y
++UCLIBC_HAS_FULL_RPC=y
++UCLIBC_HAS_REENTRANT_RPC=y
++UCLIBC_HAS_RESOLVER_SUPPORT=y
++UCLIBC_HAS_LIBRESOLV_STUB=y
++UCLIBC_HAS_LIBNSL_STUB=y
++UCLIBC_HAS_CTYPE_CHECKED=y
++UCLIBC_HAS_LOCALE=y
++UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
++UCLIBC_HAS_FOPEN_CLOSEEXEC_MODE=y
++UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
++UCLIBC_HAS_PRINTF_M_SPEC=y
++UCLIBC_HAS_NFTW=y
++UCLIBC_HAS_FTW=y
++RUNTIME_PREFIX="%RUNTIME_PREFIX%"
++DEVEL_PREFIX="%DEVEL_PREFIX%"
++CROSS_COMPILER_PREFIX="arc-linux-uclibc-"
++# DOSTRIP is not set
++SUPPORT_LD_DEBUG=y
+diff -Nur uClibc-0.9.33.2/extra/Configs/defconfigs/metag/defconfig uClibc-git/extra/Configs/defconfigs/metag/defconfig
+--- uClibc-0.9.33.2/extra/Configs/defconfigs/metag/defconfig 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/Configs/defconfigs/metag/defconfig 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1 @@
++TARGET_metag=y
+diff -Nur uClibc-0.9.33.2/extra/locale/gen_wc8bit.c uClibc-git/extra/locale/gen_wc8bit.c
+--- uClibc-0.9.33.2/extra/locale/gen_wc8bit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/locale/gen_wc8bit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -182,7 +182,11 @@
+ printf("\tunsigned char idx8c2wc[%d];\n", C2WC_IDX_LEN);
+ printf("\tunsigned char idx8wc2c[%d];\n", II_LEN);
+ #endif
++#ifndef __metag__
+ printf("} __codeset_8_bit_t;\n\n");
++#else
++ printf("} __attribute__((__packed__)) __codeset_8_bit_t;\n\n");
++#endif /* __metag__ */
+
+ printf("#ifdef WANT_DATA\n\n");
+ printf("static const __codeset_8_bit_t codeset_8_bit[%d] = {\n", argc-1);
+diff -Nur uClibc-0.9.33.2/extra/locale/Makefile.in uClibc-git/extra/locale/Makefile.in
+--- uClibc-0.9.33.2/extra/locale/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/locale/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -111,16 +111,10 @@
+ $(Q)echo "$(CURDIR)/$(locale_DIR)/charmaps/ISO-8859-1.pairs" >> $@
+ else
+ $(Q)set -e; \
+- tmp=`mktemp $@.XXXXXX 2>/dev/null || true`; \
+- [ -z "$$tmp" ] && tmp='$@.new'; \
+ find $(CURDIR)/$(locale_DIR)/charmaps/ -name '*.pairs' | \
+- sort > $$tmp; \
+- [ -s $$tmp ]; \
+- if cmp $@ $$tmp >/dev/null 2>&1; then \
+- $(RM) $$tmp; \
+- else \
+- mv -f $$tmp $@; \
+- fi
++ sort > $@.new; \
++ [ -s $@.new ]; \
++ cmp -s $@ $@.new && $(RM) $@.new || mv -f $@.new $@
+ endif
+
+ # the lines beginning w/ '#-' are mandatory
+diff -Nur uClibc-0.9.33.2/extra/locale/programs/locale.c uClibc-git/extra/locale/programs/locale.c
+--- uClibc-0.9.33.2/extra/locale/programs/locale.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/locale/programs/locale.c 2014-02-03 12:32:56.000000000 +0100
+@@ -31,7 +31,7 @@
+ unsigned char lc_messages_row;
+ } locale_entry;
+
+-/* Need to include this before locale.h and xlocale.h! */
++/* Need to include this before locale.h! */
+ #include <bits/uClibc_locale.h>
+
+ #undef CODESET_LIST
+diff -Nur uClibc-0.9.33.2/extra/scripts/gen_bits_syscall_h.sh uClibc-git/extra/scripts/gen_bits_syscall_h.sh
+--- uClibc-0.9.33.2/extra/scripts/gen_bits_syscall_h.sh 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/scripts/gen_bits_syscall_h.sh 2014-02-03 12:32:56.000000000 +0100
+@@ -8,14 +8,18 @@
+
+ # June 27, 2001 Manuel Novoa III
+ #
+-# This script expects top_builddir and CC (as used in the Makefiles) to be set
+-# in the environment, and outputs the appropriate
+-# $top_builddir/include/bits/sysnum.h # corresponding to
+-# $top_builddir/include/asm/unistd.h to stdout.
++# This script expects CC (as used in the Makefiles) to be set
++# in the environment, and outputs the appropriate bits/sysnum.h #
++# corresponding to asm/unistd.h to stdout.
+ #
+ # Warning!!! This does _no_ error checking!!!
+
+-INCLUDE_OPTS="-nostdinc -I${KERNEL_HEADERS}"
++if [ "${KERNEL_HEADERS:-/}" != "/" ] ; then
++ INCLUDE_OPTS="-nostdinc -I${KERNEL_HEADERS}"
++else
++ # Let the toolchain use its configure paths.
++ INCLUDE_OPTS=
++fi
+
+ case $CC in
+ *icc*) CC_SYSNUM_ARGS="-dM" ;;
+@@ -25,22 +29,31 @@
+ ( echo "#include <asm/unistd.h>";
+ echo "#include <asm/unistd.h>" |
+ $CC -E $CC_SYSNUM_ARGS $INCLUDE_OPTS - |
+- sed -ne 's/^[ ]*#define[ ]*\(__ARM_NR_\|__NR_\)\([A-Za-z0-9_]*\).*/UCLIBC\1\2 \1\2/gp' \
+- -e 's/^[ ]*#undef[ ]*\(__ARM_NR_\|__NR_\)\([A-Za-z0-9_]*\).*/UNDEFUCLIBC\1\2 \1\2/gp' # needed to strip out any kernel-internal defines
++ sed -n -r \
++ -e 's/^[ ]*#define[ ]*(__ARM_NR_|__NR_)([A-Za-z0-9_]*).*/UCLIBC\1\2 \1\2/gp' \
++ -e 's/^[ ]*#undef[ ]*(__ARM_NR_|__NR_)([A-Za-z0-9_]*).*/UNDEFUCLIBC\1\2 \1\2/gp' # needed to strip out any kernel-internal defines
+ ) |
+ $CC -E $INCLUDE_OPTS - |
+-( echo "/* WARNING!!! AUTO-GENERATED FILE!!! DO NOT EDIT!!! */" ;
+- echo ;
+- echo "#ifndef _BITS_SYSNUM_H" ;
+- echo "#define _BITS_SYSNUM_H" ;
+- echo ;
+- echo "#ifndef _SYSCALL_H" ;
+- echo "# error \"Never use <bits/sysnum.h> directly; include <sys/syscall.h> instead.\"" ;
+- echo "#endif" ; echo ;
+- sed -ne 's/^UCLIBC\(__ARM_NR_\|__NR_\)\([A-Za-z0-9_]*\) *\(.*\)/#undef \1\2\
++(
++ cat <<-EOF
++/* WARNING!!! AUTO-GENERATED FILE!!! DO NOT EDIT!!! */
++/* See $0 for more information. */
++
++#ifndef _BITS_SYSNUM_H
++#define _BITS_SYSNUM_H
++
++#ifndef _SYSCALL_H
++# error "Never use <bits/sysnum.h> directly; include <sys/syscall.h> instead."
++#endif
++
++EOF
++ sed -n -r -e 's/^UCLIBC(__ARM_NR_|__NR_)([A-Za-z0-9_]*) *(.*)/#undef \1\2\
+ #define \1\2 \3\
+ #define SYS_\2 \1\2/gp' \
+- -e 's/^UNDEFUCLIBC\(__ARM_NR_\|__NR_\)\([A-Za-z0-9_]*\).*/#undef \1\2/gp'
+- echo ;
+- echo "#endif" ;
++ -e 's/^UNDEFUCLIBC(__ARM_NR_|__NR_)([A-Za-z0-9_]*).*/#undef \1\2\
++#undef SYS_\2/gp'
++ cat <<-EOF
++
++#endif
++EOF
+ )
+diff -Nur uClibc-0.9.33.2/extra/scripts/getent uClibc-git/extra/scripts/getent
+--- uClibc-0.9.33.2/extra/scripts/getent 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/scripts/getent 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,4 @@
+ #!/bin/sh
+-# $Header: /var/cvs/uClibc/extra/scripts/getent,v 1.2 2005/02/02 14:18:01 solar Exp $
+ #
+ # Closely (not perfectly) emulate the behavior of glibc's getent utility
+ #
+@@ -9,7 +8,8 @@
+ # case-insensitive matches not supported (ethers; others?)
+ # may return false-positives (hosts,protocols,rpc,services,ethers)
+
+-export PATH="${PATH}:/bin:/usr/bin"
++[ -z "$PATH" ] && PATH="/bin:/usr/bin" || PATH="${PATH}:/bin:/usr/bin"
++export PATH
+
+ file="/etc/$1"
+ case $1 in
+diff -Nur uClibc-0.9.33.2/extra/scripts/install_headers.sh uClibc-git/extra/scripts/install_headers.sh
+--- uClibc-0.9.33.2/extra/scripts/install_headers.sh 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/scripts/install_headers.sh 2014-02-03 12:32:56.000000000 +0100
+@@ -32,10 +32,9 @@
+ exit 1
+ fi
+
+-
+ # Sanitize and copy uclibc headers
+ (
+-# We must cd, or else we'll prepend "${srcdir}" to filenames!
++# We must cd, or else we will prepend "${srcdir}" to filenames!
+ cd "${srcdir}" || exit 1
+ find . ! -name '.' -a ! -path '*/.*' | sed -e 's/^\.\///' -e '/^config\//d' \
+ -e '/^config$/d'
+@@ -51,18 +50,20 @@
+ # Do not install libc-XXXX.h files
+ continue
+ fi
+- # NB: unifdef exits with 1 if output is not
+- # exactly the same as input. That's ok.
+ # Do not abort the script if unifdef "fails"!
+ # NB2: careful with sed command arguments, they contain tab character
+ "$top_builddir/extra/scripts/unifdef" \
++ -B \
++ -t \
++ -x 2 \
++ -f "$top_builddir/include/generated/unifdef_config.h" \
+ -U_LIBC \
+ -U__UCLIBC_GEN_LOCALE \
+ -U__NO_CTYPE \
+ "${srcdir}/$filename" \
+ | sed -e '/^rtld_hidden_proto[ ]*([a-zA-Z0-9_]*)$/d' \
+ | sed -e '/^lib\(c\|m\|resolv\|dl\|intl\|rt\|nsl\|util\|crypt\|pthread\)_hidden_proto[ ]*([a-zA-Z0-9_]*)$/d' \
+- >"${dstdir}/$filename"
++ > "${dstdir}/$filename"
+ done
+ )
+
+diff -Nur uClibc-0.9.33.2/extra/scripts/relinfo.pl uClibc-git/extra/scripts/relinfo.pl
+--- uClibc-0.9.33.2/extra/scripts/relinfo.pl 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/scripts/relinfo.pl 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ #! /usr/bin/perl
+-eval "exec /usr/bin/perl -S $0 $*"
++eval "exec /usr/bin/env perl -w -S $0 $@"
+ if 0;
+ # Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc.
+ # Written by Ulrich Drepper <drepper@redhat.com>, 2000.
+@@ -14,8 +14,7 @@
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software Foundation,
+-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ for ($cnt = 0; $cnt <= $#ARGV; ++$cnt) {
+ $relent = 0;
+diff -Nur uClibc-0.9.33.2/extra/scripts/unifdef.c uClibc-git/extra/scripts/unifdef.c
+--- uClibc-0.9.33.2/extra/scripts/unifdef.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/extra/scripts/unifdef.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,13 +1,5 @@
+ /*
+- * Copyright (c) 2002 - 2005 Tony Finch <dot@dotat.at>. All rights reserved.
+- *
+- * This code is derived from software contributed to Berkeley by Dave Yost.
+- * It was rewritten to support ANSI C by Tony Finch. The original version of
+- * unifdef carried the following copyright notice. None of its code remains
+- * in this version (though some of the names remain).
+- *
+- * Copyright (c) 1985, 1993
+- * The Regents of the University of California. All rights reserved.
++ * Copyright (c) 2002 - 2014 Tony Finch <dot@dotat.at>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+@@ -31,27 +23,15 @@
+ * SUCH DAMAGE.
+ */
+
+-#include <sys/cdefs.h>
+-
+-#ifndef lint
+-#if 0
+-static const char copyright[] =
+-"@(#) Copyright (c) 1985, 1993\n\
+- The Regents of the University of California. All rights reserved.\n";
+-#endif
+-#ifdef __IDSTRING
+-__IDSTRING(Berkeley, "@(#)unifdef.c 8.1 (Berkeley) 6/6/93");
+-__IDSTRING(NetBSD, "$NetBSD: unifdef.c,v 1.8 2000/07/03 02:51:36 matt Exp $");
+-__IDSTRING(dotat, "$dotat: things/unifdef.c,v 1.171 2005/03/08 12:38:48 fanf2 Exp $");
+-#endif
+-#endif /* not lint */
+-#ifdef __FBSDID
+-__FBSDID("$FreeBSD: /repoman/r/ncvs/src/usr.bin/unifdef/unifdef.c,v 1.20 2005/05/21 09:55:09 ru Exp $");
+-#endif
+-
+ /*
+ * unifdef - remove ifdef'ed lines
+ *
++ * This code was derived from software contributed to Berkeley by Dave Yost.
++ * It was rewritten to support ANSI C by Tony Finch. The original version
++ * of unifdef carried the 4-clause BSD copyright licence. None of its code
++ * remains in this version (though some of the names remain) so it now
++ * carries a more liberal licence.
++ *
+ * Wishlist:
+ * provide an option which will append the name of the
+ * appropriate symbol after #else's and #endif's
+@@ -59,26 +39,17 @@
+ * #else's and #endif's to see that they match their
+ * corresponding #ifdef or #ifndef
+ *
+- * The first two items above require better buffer handling, which would
+- * also make it possible to handle all "dodgy" directives correctly.
++ * These require better buffer handling, which would also make
++ * it possible to handle all "dodgy" directives correctly.
+ */
+
+-#include <errno.h>
+-#include <ctype.h>
+-#include <stdarg.h>
+-#include <stdbool.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <unistd.h>
+-
+-/* Avoid err.h since uClibc can disable these things */
+-#define vwarnx(fmt, args) ({ fprintf(stderr, "unifdef: "); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); })
+-#define warnx(fmt, args...) fprintf(stderr, "unifdef: " fmt "\n", ## args)
+-#define errx(exit_code, fmt, args...) ({ warnx(fmt, ## args); exit(exit_code); })
+-#define err(exit_code, fmt, args...) errx(exit_code, fmt ": %s", ## args, strerror(errno))
++#include "unifdef.h"
+
+-size_t strlcpy(char *dst, const char *src, size_t siz);
++static const char copyright[] =
++ #include "version.h"
++ "@(#) $Author: Tony Finch (dot@dotat.at) $\n"
++ "@(#) $URL: http://dotat.at/prog/unifdef $\n"
++;
+
+ /* types of input lines: */
+ typedef enum {
+@@ -96,6 +67,7 @@
+ LT_DODGY_LAST = LT_DODGY + LT_ENDIF,
+ LT_PLAIN, /* ordinary line */
+ LT_EOF, /* end of file */
++ LT_ERROR, /* unevaluable #if */
+ LT_COUNT
+ } Linetype;
+
+@@ -106,9 +78,12 @@
+ "DODGY IF", "DODGY TRUE", "DODGY FALSE",
+ "DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE",
+ "DODGY ELSE", "DODGY ENDIF",
+- "PLAIN", "EOF"
++ "PLAIN", "EOF", "ERROR"
+ };
+
++#define linetype_if2elif(lt) ((Linetype)(lt - LT_IF + LT_ELIF))
++#define linetype_2dodgy(lt) ((Linetype)(lt + LT_DODGY))
++
+ /* state of #if processing */
+ typedef enum {
+ IS_OUTSIDE,
+@@ -162,7 +137,7 @@
+ */
+ #define MAXDEPTH 64 /* maximum #if nesting */
+ #define MAXLINE 4096 /* maximum length of line */
+-#define MAXSYMS 4096 /* maximum number of symbols */
++#define MAXSYMS 16384 /* maximum number of symbols */
+
+ /*
+ * Sometimes when editing a keyword the replacement text is longer, so
+@@ -174,13 +149,17 @@
+ * Globals.
+ */
+
++static bool compblank; /* -B: compress blank lines */
++static bool lnblank; /* -b: blank deleted lines */
+ static bool complement; /* -c: do the complement */
+ static bool debugging; /* -d: debugging reports */
++static bool inplace; /* -m: modify in place */
+ static bool iocccok; /* -e: fewer IOCCC errors */
++static bool strictlogic; /* -K: keep ambiguous #ifs */
+ static bool killconsts; /* -k: eval constant #ifs */
+-static bool lnblank; /* -l: blank deleted lines */
+ static bool lnnum; /* -n: add #line directives */
+ static bool symlist; /* -s: output symbol list */
++static bool symdepth; /* -S: output symbol depth */
+ static bool text; /* -t: this is a text file */
+
+ static const char *symname[MAXSYMS]; /* symbol name */
+@@ -191,10 +170,28 @@
+ static FILE *input; /* input file pointer */
+ static const char *filename; /* input file name */
+ static int linenum; /* current line number */
++static const char *linefile; /* file name for #line */
++static FILE *output; /* output file pointer */
++static const char *ofilename; /* output file name */
++static const char *backext; /* backup extension */
++static char *tempname; /* avoid splatting input */
+
+ static char tline[MAXLINE+EDITSLOP];/* input buffer plus space */
+ static char *keyword; /* used for editing #elif's */
+
++/*
++ * When processing a file, the output's newline style will match the
++ * input's, and unifdef correctly handles CRLF or LF endings whatever
++ * the platform's native style. The stdio streams are opened in binary
++ * mode to accommodate platforms whose native newline style is CRLF.
++ * When the output isn't a processed input file (when it is error /
++ * debug / diagnostic messages) then unifdef uses native line endings.
++ */
++
++static const char *newline; /* input file format */
++static const char newline_unix[] = "\n";
++static const char newline_crlf[] = "\r\n";
++
+ static Comment_state incomment; /* comment parser state */
+ static Line_state linestate; /* #if line parser state */
+ static Ifstate ifstate[MAXDEPTH]; /* #if processor state */
+@@ -202,31 +199,53 @@
+ static int stifline[MAXDEPTH]; /* start of current #if */
+ static int depth; /* current #if nesting */
+ static int delcount; /* count of deleted lines */
+-static bool keepthis; /* don't delete constant #if */
++static unsigned blankcount; /* count of blank lines */
++static unsigned blankmax; /* maximum recent blankcount */
++static bool constexpr; /* constant #if expression */
++static bool zerosyms; /* to format symdepth output */
++static bool firstsym; /* ditto */
+
++static int exitmode; /* exit status mode */
+ static int exitstat; /* program exit status */
++static bool altered; /* was this file modified? */
+
+-static void addsym(bool, bool, char *);
++static void addsym1(bool, bool, char *);
++static void addsym2(bool, const char *, const char *);
++static char *astrcat(const char *, const char *);
++static void cleantemp(void);
++static void closeio(void);
+ static void debug(const char *, ...);
++static void debugsym(const char *, int);
++static bool defundef(void);
++static void defundefile(const char *);
+ static void done(void);
+ static void error(const char *);
+-static int findsym(const char *);
++static int findsym(const char **);
+ static void flushline(bool);
+-static Linetype get_line(void);
++static void hashline(void);
++static void help(void);
+ static Linetype ifeval(const char **);
+ static void ignoreoff(void);
+ static void ignoreon(void);
++static void indirectsym(void);
+ static void keywordedit(const char *);
++static const char *matchsym(const char *, const char *);
+ static void nest(void);
++static Linetype parseline(void);
+ static void process(void);
++static void processinout(const char *, const char *);
++static const char *skipargs(const char *);
+ static const char *skipcomment(const char *);
++static const char *skiphash(void);
++static const char *skipline(const char *);
+ static const char *skipsym(const char *);
+ static void state(Ifstate);
+-static int strlcmp(const char *, const char *, size_t);
+ static void unnest(void);
+ static void usage(void);
++static void version(void);
++static const char *xstrdup(const char *, const char *);
+
+-#define endsym(c) (!isalpha((unsigned char)c) && !isdigit((unsigned char)c) && c != '_')
++#define endsym(c) (!isalnum((unsigned char)c) && c != '_')
+
+ /*
+ * The main program.
+@@ -236,7 +255,7 @@
+ {
+ int opt;
+
+- while ((opt = getopt(argc, argv, "i:D:U:I:cdeklnst")) != -1)
++ while ((opt = getopt(argc, argv, "i:D:U:f:I:M:o:x:bBcdehKklmnsStV")) != -1)
+ switch (opt) {
+ case 'i': /* treat stuff controlled by these symbols as text */
+ /*
+@@ -246,20 +265,26 @@
+ */
+ opt = *optarg++;
+ if (opt == 'D')
+- addsym(true, true, optarg);
++ addsym1(true, true, optarg);
+ else if (opt == 'U')
+- addsym(true, false, optarg);
++ addsym1(true, false, optarg);
+ else
+ usage();
+ break;
+ case 'D': /* define a symbol */
+- addsym(false, true, optarg);
++ addsym1(false, true, optarg);
+ break;
+ case 'U': /* undef a symbol */
+- addsym(false, false, optarg);
++ addsym1(false, false, optarg);
+ break;
+- case 'I':
+- /* no-op for compatibility with cpp */
++ case 'I': /* no-op for compatibility with cpp */
++ break;
++ case 'b': /* blank deleted lines instead of omitting them */
++ case 'l': /* backwards compatibility */
++ lnblank = true;
++ break;
++ case 'B': /* compress blank lines around removed section */
++ compblank = true;
+ break;
+ case 'c': /* treat -D as -U and vice versa */
+ complement = true;
+@@ -270,50 +295,214 @@
+ case 'e': /* fewer errors from dodgy lines */
+ iocccok = true;
+ break;
++ case 'f': /* definitions file */
++ defundefile(optarg);
++ break;
++ case 'h':
++ help();
++ break;
++ case 'K': /* keep ambiguous #ifs */
++ strictlogic = true;
++ break;
+ case 'k': /* process constant #ifs */
+ killconsts = true;
+ break;
+- case 'l': /* blank deleted lines instead of omitting them */
+- lnblank = true;
++ case 'm': /* modify in place */
++ inplace = true;
++ break;
++ case 'M': /* modify in place and keep backup */
++ inplace = true;
++ backext = optarg;
+ break;
+ case 'n': /* add #line directive after deleted lines */
+ lnnum = true;
+ break;
++ case 'o': /* output to a file */
++ ofilename = optarg;
++ break;
+ case 's': /* only output list of symbols that control #ifs */
+ symlist = true;
+ break;
++ case 'S': /* list symbols with their nesting depth */
++ symlist = symdepth = true;
++ break;
+ case 't': /* don't parse C comments */
+ text = true;
+ break;
++ case 'V':
++ version();
++ break;
++ case 'x':
++ exitmode = atoi(optarg);
++ if(exitmode < 0 || exitmode > 2)
++ usage();
++ break;
+ default:
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+- if (argc > 1) {
+- errx(2, "can only do one file");
+- } else if (argc == 1 && strcmp(*argv, "-") != 0) {
+- filename = *argv;
+- input = fopen(filename, "r");
+- if (input == NULL)
+- err(2, "can't open %s", filename);
+- } else {
++ if (compblank && lnblank)
++ errx(2, "-B and -b are mutually exclusive");
++ if (symlist && (ofilename != NULL || inplace || argc > 1))
++ errx(2, "-s only works with one input file");
++ if (argc > 1 && ofilename != NULL)
++ errx(2, "-o cannot be used with multiple input files");
++ if (argc > 1 && !inplace)
++ errx(2, "multiple input files require -m or -M");
++ if (argc == 0)
++ argc = 1;
++ if (argc == 1 && !inplace && ofilename == NULL)
++ ofilename = "-";
++ indirectsym();
++
++ atexit(cleantemp);
++ if (ofilename != NULL)
++ processinout(*argv, ofilename);
++ else while (argc-- > 0) {
++ processinout(*argv, *argv);
++ argv++;
++ }
++ switch(exitmode) {
++ case(0): exit(exitstat);
++ case(1): exit(!exitstat);
++ case(2): exit(0);
++ default: abort(); /* bug */
++ }
++}
++
++/*
++ * File logistics.
++ */
++static void
++processinout(const char *ifn, const char *ofn)
++{
++ struct stat st;
++
++ if (ifn == NULL || strcmp(ifn, "-") == 0) {
+ filename = "[stdin]";
+- input = stdin;
++ linefile = NULL;
++ input = fbinmode(stdin);
++ } else {
++ filename = ifn;
++ linefile = ifn;
++ input = fopen(ifn, "rb");
++ if (input == NULL)
++ err(2, "can't open %s", ifn);
++ }
++ if (strcmp(ofn, "-") == 0) {
++ output = fbinmode(stdout);
++ process();
++ return;
+ }
++ if (stat(ofn, &st) < 0) {
++ output = fopen(ofn, "wb");
++ if (output == NULL)
++ err(2, "can't create %s", ofn);
++ process();
++ return;
++ }
++
++ tempname = astrcat(ofn, ".XXXXXX");
++ output = mktempmode(tempname, st.st_mode);
++ if (output == NULL)
++ err(2, "can't create %s", tempname);
++
+ process();
+- debug("bug at line %d", __LINE__);
+- abort(); /* bug */
++
++ if (backext != NULL) {
++ char *backname = astrcat(ofn, backext);
++ if (rename(ofn, backname) < 0)
++ err(2, "can't rename \"%s\" to \"%s\"", ofn, backname);
++ free(backname);
++ }
++ /* leave file unmodified if unifdef made no changes */
++ if (!altered && backext == NULL) {
++ if (remove(tempname) < 0)
++ warn("can't remove \"%s\"", tempname);
++ } else if (replace(tempname, ofn) < 0)
++ err(2, "can't rename \"%s\" to \"%s\"", tempname, ofn);
++ free(tempname);
++ tempname = NULL;
++}
++
++/*
++ * For cleaning up if there is an error.
++ */
++static void
++cleantemp(void)
++{
++ if (tempname != NULL)
++ remove(tempname);
++}
++
++/*
++ * Self-identification functions.
++ */
++
++static void
++version(void)
++{
++ const char *c = copyright;
++ for (;;) {
++ while (*++c != '$')
++ if (*c == '\0')
++ exit(0);
++ while (*++c != '$')
++ putc(*c, stderr);
++ putc('\n', stderr);
++ }
++}
++
++static void
++synopsis(FILE *fp)
++{
++ fprintf(fp,
++ "usage: unifdef [-bBcdehKkmnsStV] [-x{012}] [-Mext] [-opath] \\\n"
++ " [-[i]Dsym[=val]] [-[i]Usym] [-fpath] ... [file] ...\n");
+ }
+
+ static void
+ usage(void)
+ {
+- fprintf(stderr, "usage: unifdef [-cdeklnst] [-Ipath]"
+- " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n");
++ synopsis(stderr);
+ exit(2);
+ }
+
++static void
++help(void)
++{
++ synopsis(stdout);
++ printf(
++ " -Dsym=val define preprocessor symbol with given value\n"
++ " -Dsym define preprocessor symbol with value 1\n"
++ " -Usym preprocessor symbol is undefined\n"
++ " -iDsym=val \\ ignore C strings and comments\n"
++ " -iDsym ) in sections controlled by these\n"
++ " -iUsym / preprocessor symbols\n"
++ " -fpath file containing #define and #undef directives\n"
++ " -b blank lines instead of deleting them\n"
++ " -B compress blank lines around deleted section\n"
++ " -c complement (invert) keep vs. delete\n"
++ " -d debugging mode\n"
++ " -e ignore multiline preprocessor directives\n"
++ " -h print help\n"
++ " -Ipath extra include file path (ignored)\n"
++ " -K disable && and || short-circuiting\n"
++ " -k process constant #if expressions\n"
++ " -Mext modify in place and keep backups\n"
++ " -m modify input files in place\n"
++ " -n add #line directives to output\n"
++ " -opath output file name\n"
++ " -S list #if control symbols with nesting\n"
++ " -s list #if control symbols\n"
++ " -t ignore C strings and comments\n"
++ " -V print version\n"
++ " -x{012} exit status mode\n"
++ );
++ exit(0);
++}
++
+ /*
+ * A state transition function alters the global #if processing state
+ * in a particular way. The table below is indexed by the current
+@@ -327,7 +516,8 @@
+ * When we have processed a group that starts off with a known-false
+ * #if/#elif sequence (which has therefore been deleted) followed by a
+ * #elif that we don't understand and therefore must keep, we edit the
+- * latter into a #if to keep the nesting correct.
++ * latter into a #if to keep the nesting correct. We use memcpy() to
++ * overwrite the 4 byte token "elif" with "if " without a '\0' byte.
+ *
+ * When we find a true #elif in a group, the following block will
+ * always be kept and the rest of the sequence after the next #elif or
+@@ -380,75 +570,66 @@
+ static void Idrop (void) { Fdrop(); ignoreon(); }
+ static void Itrue (void) { Ftrue(); ignoreon(); }
+ static void Ifalse(void) { Ffalse(); ignoreon(); }
+-/* edit this line */
+-static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); }
+-static void Mtrue (void) { keywordedit("else\n"); state(IS_TRUE_MIDDLE); }
+-static void Melif (void) { keywordedit("endif\n"); state(IS_FALSE_TRAILER); }
+-static void Melse (void) { keywordedit("endif\n"); state(IS_FALSE_ELSE); }
++/* modify this line */
++static void Mpass (void) { memcpy(keyword, "if ", 4); Pelif(); }
++static void Mtrue (void) { keywordedit("else"); state(IS_TRUE_MIDDLE); }
++static void Melif (void) { keywordedit("endif"); state(IS_FALSE_TRAILER); }
++static void Melse (void) { keywordedit("endif"); state(IS_FALSE_ELSE); }
+
+ static state_fn * const trans_table[IS_COUNT][LT_COUNT] = {
+ /* IS_OUTSIDE */
+ { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif,
+- print, done },
++ print, done, abort },
+ /* IS_FALSE_PREFIX */
+ { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc,
+- drop, Eeof },
++ drop, Eeof, abort },
+ /* IS_TRUE_PREFIX */
+ { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
+- print, Eeof },
++ print, Eeof, abort },
+ /* IS_PASS_MIDDLE */
+ { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif,
+- print, Eeof },
++ print, Eeof, abort },
+ /* IS_FALSE_MIDDLE */
+ { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
+- drop, Eeof },
++ drop, Eeof, abort },
+ /* IS_TRUE_MIDDLE */
+ { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif,
+- print, Eeof },
++ print, Eeof, abort },
+ /* IS_PASS_ELSE */
+ { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif,
+- print, Eeof },
++ print, Eeof, abort },
+ /* IS_FALSE_ELSE */
+ { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc,
+- drop, Eeof },
++ drop, Eeof, abort },
+ /* IS_TRUE_ELSE */
+ { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc,
+- print, Eeof },
++ print, Eeof, abort },
+ /* IS_FALSE_TRAILER */
+ { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc,
+- drop, Eeof }
++ drop, Eeof, abort }
+ /*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF
+ TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY)
+- PLAIN EOF */
++ PLAIN EOF ERROR */
+ };
+
+ /*
+ * State machine utility functions
+ */
+ static void
+-done(void)
+-{
+- if (incomment)
+- error("EOF in comment");
+- exit(exitstat);
+-}
+-static void
+ ignoreoff(void)
+ {
+- if (depth == 0) {
+- debug("bug at line %d", __LINE__);
++ if (depth == 0)
+ abort(); /* bug */
+- }
+ ignoring[depth] = ignoring[depth-1];
+ }
+ static void
+@@ -459,31 +640,26 @@
+ static void
+ keywordedit(const char *replacement)
+ {
+- size_t size = tline + sizeof(tline) - keyword;
+- char *dst = keyword;
+- const char *src = replacement;
+- if (size != 0) {
+- while ((--size != 0) && (*src != '\0'))
+- *dst++ = *src++;
+- *dst = '\0';
+- }
++ snprintf(keyword, tline + sizeof(tline) - keyword,
++ "%s%s", replacement, newline);
++ altered = true;
+ print();
+ }
+ static void
+ nest(void)
+ {
+- depth += 1;
+- if (depth >= MAXDEPTH)
++ if (depth > MAXDEPTH-1)
++ abort(); /* bug */
++ if (depth == MAXDEPTH-1)
+ error("Too many levels of nesting");
++ depth += 1;
+ stifline[depth] = linenum;
+ }
+ static void
+ unnest(void)
+ {
+- if (depth == 0) {
+- debug("bug at line %d", __LINE__);
++ if (depth == 0)
+ abort(); /* bug */
+- }
+ depth -= 1;
+ }
+ static void
+@@ -493,7 +669,20 @@
+ }
+
+ /*
++ * The last state transition function. When this is called,
++ * lineval == LT_EOF, so the process() loop will terminate.
++ */
++static void
++done(void)
++{
++ if (incomment)
++ error("EOF in comment");
++ closeio();
++}
++
++/*
+ * Write a line to the output or not, according to command line options.
++ * If writing fails, closeio() will print the error and exit.
+ */
+ static void
+ flushline(bool keep)
+@@ -501,16 +690,58 @@
+ if (symlist)
+ return;
+ if (keep ^ complement) {
+- if (lnnum && delcount > 0)
+- printf("#line %d\n", linenum);
+- fputs(tline, stdout);
+- delcount = 0;
++ bool blankline = tline[strspn(tline, " \t\r\n")] == '\0';
++ if (blankline && compblank && blankcount != blankmax) {
++ delcount += 1;
++ blankcount += 1;
++ } else {
++ if (lnnum && delcount > 0)
++ hashline();
++ if (fputs(tline, output) == EOF)
++ closeio();
++ delcount = 0;
++ blankmax = blankcount = blankline ? blankcount + 1 : 0;
++ }
+ } else {
+- if (lnblank)
+- putc('\n', stdout);
+- exitstat = 1;
++ if (lnblank && fputs(newline, output) == EOF)
++ closeio();
++ altered = true;
+ delcount += 1;
++ blankcount = 0;
+ }
++ if (debugging && fflush(output) == EOF)
++ closeio();
++}
++
++/*
++ * Format of #line directives depends on whether we know the input filename.
++ */
++static void
++hashline(void)
++{
++ int e;
++
++ if (linefile == NULL)
++ e = fprintf(output, "#line %d%s", linenum, newline);
++ else
++ e = fprintf(output, "#line %d \"%s\"%s",
++ linenum, linefile, newline);
++ if (e < 0)
++ closeio();
++}
++
++/*
++ * Flush the output and handle errors.
++ */
++static void
++closeio(void)
++{
++ /* Tidy up after findsym(). */
++ if (symdepth && !zerosyms)
++ printf("\n");
++ if (output != NULL && (ferror(output) || fclose(output) == EOF))
++ err(2, "%s: can't write to output", filename);
++ fclose(input);
+ }
+
+ /*
+@@ -519,16 +750,22 @@
+ static void
+ process(void)
+ {
+- Linetype lineval;
+-
+- for (;;) {
+- linenum++;
+- lineval = get_line();
++ Linetype lineval = LT_PLAIN;
++ /* When compressing blank lines, act as if the file
++ is preceded by a large number of blank lines. */
++ blankmax = blankcount = 1000;
++ zerosyms = true;
++ newline = NULL;
++ linenum = 0;
++ altered = false;
++ while (lineval != LT_EOF) {
++ lineval = parseline();
+ trans_table[ifstate[depth]][lineval]();
+- debug("process %s -> %s depth %d",
+- linetype_name[lineval],
++ debug("process line %d %s -> %s depth %d",
++ linenum, linetype_name[lineval],
+ ifstate_name[ifstate[depth]], depth);
+ }
++ exitstat |= altered;
+ }
+
+ /*
+@@ -537,104 +774,131 @@
+ * help from skipcomment().
+ */
+ static Linetype
+-get_line(void)
++parseline(void)
+ {
+ const char *cp;
+ int cursym;
+- int kwlen;
+ Linetype retval;
+ Comment_state wascomment;
+
+- if (fgets(tline, MAXLINE, input) == NULL)
+- return (LT_EOF);
+- retval = LT_PLAIN;
+ wascomment = incomment;
+- cp = skipcomment(tline);
+- if (linestate == LS_START) {
+- if (*cp == '#') {
+- linestate = LS_HASH;
+- cp = skipcomment(cp + 1);
+- } else if (*cp != '\0')
+- linestate = LS_DIRTY;
++ cp = skiphash();
++ if (cp == NULL)
++ return (LT_EOF);
++ if (newline == NULL) {
++ if (strrchr(tline, '\n') == strrchr(tline, '\r') + 1)
++ newline = newline_crlf;
++ else
++ newline = newline_unix;
+ }
+- if (!incomment && linestate == LS_HASH) {
+- keyword = tline + (cp - tline);
+- cp = skipsym(cp);
+- kwlen = cp - keyword;
+- /* no way can we deal with a continuation inside a keyword */
+- if (strncmp(cp, "\\\n", 2) == 0)
+- Eioccc();
+- if (strlcmp("ifdef", keyword, kwlen) == 0 ||
+- strlcmp("ifndef", keyword, kwlen) == 0) {
+- cp = skipcomment(cp);
+- if ((cursym = findsym(cp)) < 0)
+- retval = LT_IF;
+- else {
+- retval = (keyword[2] == 'n')
+- ? LT_FALSE : LT_TRUE;
+- if (value[cursym] == NULL)
+- retval = (retval == LT_TRUE)
+- ? LT_FALSE : LT_TRUE;
+- if (ignore[cursym])
+- retval = (retval == LT_TRUE)
+- ? LT_TRUEI : LT_FALSEI;
+- }
+- cp = skipsym(cp);
+- } else if (strlcmp("if", keyword, kwlen) == 0)
+- retval = ifeval(&cp);
+- else if (strlcmp("elif", keyword, kwlen) == 0)
+- retval = ifeval(&cp) - LT_IF + LT_ELIF;
+- else if (strlcmp("else", keyword, kwlen) == 0)
+- retval = LT_ELSE;
+- else if (strlcmp("endif", keyword, kwlen) == 0)
+- retval = LT_ENDIF;
++ if (*cp == '\0') {
++ retval = LT_PLAIN;
++ goto done;
++ }
++ keyword = tline + (cp - tline);
++ if ((cp = matchsym("ifdef", keyword)) != NULL ||
++ (cp = matchsym("ifndef", keyword)) != NULL) {
++ cp = skipcomment(cp);
++ if ((cursym = findsym(&cp)) < 0)
++ retval = LT_IF;
+ else {
+- linestate = LS_DIRTY;
+- retval = LT_PLAIN;
++ retval = (keyword[2] == 'n')
++ ? LT_FALSE : LT_TRUE;
++ if (value[cursym] == NULL)
++ retval = (retval == LT_TRUE)
++ ? LT_FALSE : LT_TRUE;
++ if (ignore[cursym])
++ retval = (retval == LT_TRUE)
++ ? LT_TRUEI : LT_FALSEI;
+ }
+- cp = skipcomment(cp);
+- if (*cp != '\0') {
++ } else if ((cp = matchsym("if", keyword)) != NULL)
++ retval = ifeval(&cp);
++ else if ((cp = matchsym("elif", keyword)) != NULL)
++ retval = linetype_if2elif(ifeval(&cp));
++ else if ((cp = matchsym("else", keyword)) != NULL)
++ retval = LT_ELSE;
++ else if ((cp = matchsym("endif", keyword)) != NULL)
++ retval = LT_ENDIF;
++ else {
++ cp = skipsym(keyword);
++ /* no way can we deal with a continuation inside a keyword */
++ if (strncmp(cp, "\\\r\n", 3) == 0 ||
++ strncmp(cp, "\\\n", 2) == 0)
++ Eioccc();
++ cp = skipline(cp);
++ retval = LT_PLAIN;
++ goto done;
++ }
++ cp = skipcomment(cp);
++ if (*cp != '\0') {
++ cp = skipline(cp);
++ if (retval == LT_TRUE || retval == LT_FALSE ||
++ retval == LT_TRUEI || retval == LT_FALSEI)
++ retval = LT_IF;
++ if (retval == LT_ELTRUE || retval == LT_ELFALSE)
++ retval = LT_ELIF;
++ }
++ /* the following can happen if the last line of the file lacks a
++ newline or if there is too much whitespace in a directive */
++ if (linestate == LS_HASH) {
++ long len = cp - tline;
++ if (fgets(tline + len, MAXLINE - len, input) == NULL) {
++ if (ferror(input))
++ err(2, "can't read %s", filename);
++ /* append the missing newline at eof */
++ strcpy(tline + len, newline);
++ cp += strlen(newline);
++ linestate = LS_START;
++ } else {
+ linestate = LS_DIRTY;
+- if (retval == LT_TRUE || retval == LT_FALSE ||
+- retval == LT_TRUEI || retval == LT_FALSEI)
+- retval = LT_IF;
+- if (retval == LT_ELTRUE || retval == LT_ELFALSE)
+- retval = LT_ELIF;
+- }
+- if (retval != LT_PLAIN && (wascomment || incomment)) {
+- retval += LT_DODGY;
+- if (incomment)
+- linestate = LS_DIRTY;
+ }
+- /* skipcomment should have changed the state */
+-// Hmm hppens sometimes on valid files
+-// if (linestate == LS_HASH) {
+-// debug("bug at line %d", __LINE__);
+-// abort(); /* bug */
+-// }
+- }
+- if (linestate == LS_DIRTY) {
+- while (*cp != '\0')
+- cp = skipcomment(cp + 1);
+ }
+- debug("parser %s comment %s line",
++ if (retval != LT_PLAIN && (wascomment || linestate != LS_START)) {
++ retval = linetype_2dodgy(retval);
++ linestate = LS_DIRTY;
++ }
++done:
++ debug("parser line %d state %s comment %s line", linenum,
+ comment_name[incomment], linestate_name[linestate]);
+ return (retval);
+ }
+
+ /*
+ * These are the binary operators that are supported by the expression
+- * evaluator. Note that if support for division is added then we also
+- * need short-circuiting booleans because of divide-by-zero.
++ * evaluator.
+ */
+-static int op_lt(int a, int b) { return (a < b); }
+-static int op_gt(int a, int b) { return (a > b); }
+-static int op_le(int a, int b) { return (a <= b); }
+-static int op_ge(int a, int b) { return (a >= b); }
+-static int op_eq(int a, int b) { return (a == b); }
+-static int op_ne(int a, int b) { return (a != b); }
+-static int op_or(int a, int b) { return (a || b); }
+-static int op_and(int a, int b) { return (a && b); }
++static Linetype op_strict(long *p, long v, Linetype at, Linetype bt) {
++ if(at == LT_IF || bt == LT_IF) return (LT_IF);
++ return (*p = v, v ? LT_TRUE : LT_FALSE);
++}
++static Linetype op_lt(long *p, Linetype at, long a, Linetype bt, long b) {
++ return op_strict(p, a < b, at, bt);
++}
++static Linetype op_gt(long *p, Linetype at, long a, Linetype bt, long b) {
++ return op_strict(p, a > b, at, bt);
++}
++static Linetype op_le(long *p, Linetype at, long a, Linetype bt, long b) {
++ return op_strict(p, a <= b, at, bt);
++}
++static Linetype op_ge(long *p, Linetype at, long a, Linetype bt, long b) {
++ return op_strict(p, a >= b, at, bt);
++}
++static Linetype op_eq(long *p, Linetype at, long a, Linetype bt, long b) {
++ return op_strict(p, a == b, at, bt);
++}
++static Linetype op_ne(long *p, Linetype at, long a, Linetype bt, long b) {
++ return op_strict(p, a != b, at, bt);
++}
++static Linetype op_or(long *p, Linetype at, long a, Linetype bt, long b) {
++ if (!strictlogic && (at == LT_TRUE || bt == LT_TRUE))
++ return (*p = 1, LT_TRUE);
++ return op_strict(p, a || b, at, bt);
++}
++static Linetype op_and(long *p, Linetype at, long a, Linetype bt, long b) {
++ if (!strictlogic && (at == LT_FALSE || bt == LT_FALSE))
++ return (*p = 0, LT_FALSE);
++ return op_strict(p, a && b, at, bt);
++}
+
+ /*
+ * An evaluation function takes three arguments, as follows: (1) a pointer to
+@@ -643,12 +907,12 @@
+ * value of the expression; and (3) a pointer to a char* that points to the
+ * expression to be evaluated and that is updated to the end of the expression
+ * when evaluation is complete. The function returns LT_FALSE if the value of
+- * the expression is zero, LT_TRUE if it is non-zero, or LT_IF if the
+- * expression could not be evaluated.
++ * the expression is zero, LT_TRUE if it is non-zero, LT_IF if the expression
++ * depends on an unknown symbol, or LT_ERROR if there is a parse failure.
+ */
+ struct ops;
+
+-typedef Linetype eval_fn(const struct ops *, int *, const char **);
++typedef Linetype eval_fn(const struct ops *, long *, const char **);
+
+ static eval_fn eval_table, eval_unary;
+
+@@ -659,139 +923,139 @@
+ * element of the table. Innermost expressions have special non-table-driven
+ * handling.
+ */
+-static const struct ops {
++struct op {
++ const char *str;
++ Linetype (*fn)(long *, Linetype, long, Linetype, long);
++};
++struct ops {
+ eval_fn *inner;
+- struct op {
+- const char *str;
+- int short_circuit_val;
+- int (*fn)(int, int);
+- } op[5];
+-} eval_ops[] = {
+- { eval_table, { { "||", 1, op_or } } },
+- { eval_table, { { "&&", 0, op_and } } },
+- { eval_table, { { "==", -1, op_eq },
+- { "!=", -1, op_ne } } },
+- { eval_unary, { { "<=", -1, op_le },
+- { ">=", -1, op_ge },
+- { "<", -1, op_lt },
+- { ">", -1, op_gt } } }
++ struct op op[5];
++};
++static const struct ops eval_ops[] = {
++ { eval_table, { { "||", op_or } } },
++ { eval_table, { { "&&", op_and } } },
++ { eval_table, { { "==", op_eq },
++ { "!=", op_ne } } },
++ { eval_unary, { { "<=", op_le },
++ { ">=", op_ge },
++ { "<", op_lt },
++ { ">", op_gt } } }
+ };
+
++/* Current operator precedence level */
++static long prec(const struct ops *ops)
++{
++ return (ops - eval_ops);
++}
++
+ /*
+- * Function for evaluating the innermost parts of expressions, viz.
+- * "!expr", "(expr)", "defined(symbol)", "defined symbol", "symbol", "number".
+- * We reset the keepthis flag when we find a non-constant subexpression.
+- */
+-// TODO: we use LT_IF both as "I don't know whether it's false or true"
+-// (example: "#if defined FOO") and when we see syntax error
+-// (example: "#if (1 || 2" - no closing paren!), but this is wrong.
+-// Binary && and || need to distinguish these cases in order to handle this:
+-// "#if defined KNOWN_UNDEFINED && FOO" - discard
+-// "#if defined KNOWN_UNDEFINED && (syntax_error_here" - do not discard!
++ * Function for evaluating the innermost parts of expressions,
++ * viz. !expr (expr) number defined(symbol) symbol
++ * We reset the constexpr flag in the last two cases.
++ */
+ static Linetype
+-eval_unary(const struct ops *ops, int *valp, const char **cpp)
++eval_unary(const struct ops *ops, long *valp, const char **cpp)
+ {
+ const char *cp;
+ char *ep;
+ int sym;
++ bool defparen;
++ Linetype lt;
+
+ cp = skipcomment(*cpp);
+ if (*cp == '!') {
+- debug("eval%d !", ops - eval_ops);
++ debug("eval%d !", prec(ops));
+ cp++;
+- if (eval_unary(ops, valp, &cp) == LT_IF) {
+- *cpp = cp;
+- return (LT_IF);
++ lt = eval_unary(ops, valp, &cp);
++ if (lt == LT_ERROR)
++ return (LT_ERROR);
++ if (lt != LT_IF) {
++ *valp = !*valp;
++ lt = *valp ? LT_TRUE : LT_FALSE;
+ }
+- *valp = !*valp;
+-
+ } else if (*cp == '(') {
+- Linetype expr_res;
+-
+ cp++;
+- debug("eval%d (%s", ops - eval_ops, cp);
+- expr_res = eval_table(eval_ops, valp, &cp);
++ debug("eval%d (", prec(ops));
++ lt = eval_table(eval_ops, valp, &cp);
++ if (lt == LT_ERROR)
++ return (LT_ERROR);
+ cp = skipcomment(cp);
+- *cpp = cp;
+ if (*cp++ != ')')
+- return (LT_IF);
+- *cpp = cp;
+- if (expr_res == LT_IF)
+- return (LT_IF);
+-
++ return (LT_ERROR);
+ } else if (isdigit((unsigned char)*cp)) {
+- debug("eval%d number", ops - eval_ops);
++ debug("eval%d number", prec(ops));
+ *valp = strtol(cp, &ep, 0);
+- cp = skipsym(cp);
+-
+- } else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) {
+- bool parens;
+-
++ if (ep == cp)
++ return (LT_ERROR);
++ lt = *valp ? LT_TRUE : LT_FALSE;
++ cp = ep;
++ } else if (matchsym("defined", cp) != NULL) {
+ cp = skipcomment(cp+7);
+- debug("eval%d defined '%s'", ops - eval_ops, cp);
+- parens = (*cp == '(');
+- if (parens)
++ if (*cp == '(') {
+ cp = skipcomment(cp+1);
+- sym = findsym(cp);
+- cp = skipsym(cp);
++ defparen = true;
++ } else {
++ defparen = false;
++ }
++ sym = findsym(&cp);
+ cp = skipcomment(cp);
+- if (parens) {
+- if (*cp != ')')
+- return (LT_IF);
+- cp = skipcomment(cp+1);
++ if (defparen && *cp++ != ')') {
++ debug("eval%d defined missing ')'", prec(ops));
++ return (LT_ERROR);
+ }
+- *cpp = cp;
+ if (sym < 0) {
+- debug("sym not found, returning LT_IF");
+- return (LT_IF);
++ debug("eval%d defined unknown", prec(ops));
++ lt = LT_IF;
++ } else {
++ debug("eval%d defined %s", prec(ops), symname[sym]);
++ *valp = (value[sym] != NULL);
++ lt = *valp ? LT_TRUE : LT_FALSE;
+ }
+- *valp = (value[sym] != NULL);
+- keepthis = false;
+-
++ constexpr = false;
+ } else if (!endsym(*cp)) {
+- debug("eval%d symbol", ops - eval_ops);
+- sym = findsym(cp);
+- cp = skipsym(cp);
+- *cpp = cp;
+- if (sym < 0)
+- return (LT_IF);
+- if (value[sym] == NULL)
++ debug("eval%d symbol", prec(ops));
++ sym = findsym(&cp);
++ if (sym < 0) {
++ lt = LT_IF;
++ cp = skipargs(cp);
++ } else if (value[sym] == NULL) {
+ *valp = 0;
+- else {
++ lt = LT_FALSE;
++ } else {
+ *valp = strtol(value[sym], &ep, 0);
+ if (*ep != '\0' || ep == value[sym])
+- return (LT_IF);
++ return (LT_ERROR);
++ lt = *valp ? LT_TRUE : LT_FALSE;
++ cp = skipargs(cp);
+ }
+- keepthis = false;
+-
++ constexpr = false;
+ } else {
+- debug("eval%d bad expr", ops - eval_ops);
+- return (LT_IF);
++ debug("eval%d bad expr", prec(ops));
++ return (LT_ERROR);
+ }
+
+ *cpp = cp;
+- debug("eval%d = %d", ops - eval_ops, *valp);
+- return (*valp ? LT_TRUE : LT_FALSE);
++ debug("eval%d = %d", prec(ops), *valp);
++ return (lt);
+ }
+
+ /*
+ * Table-driven evaluation of binary operators.
+ */
+ static Linetype
+-eval_table(const struct ops *ops, int *valp, const char **cpp)
++eval_table(const struct ops *ops, long *valp, const char **cpp)
+ {
+- Linetype left_side;
+ const struct op *op;
+ const char *cp;
+- int val;
++ long val;
++ Linetype lt, rt;
+
+- debug("eval%d '%s'", ops - eval_ops, *cpp);
+- left_side = ops->inner(ops+1, valp, cpp);
++ debug("eval%d", prec(ops));
+ cp = *cpp;
+-
++ lt = ops->inner(ops+1, valp, &cp);
++ if (lt == LT_ERROR)
++ return (LT_ERROR);
+ for (;;) {
+- Linetype right_side;
+-
+ cp = skipcomment(cp);
+ for (op = ops->op; op->str != NULL; op++)
+ if (strncmp(cp, op->str, strlen(op->str)) == 0)
+@@ -799,38 +1063,17 @@
+ if (op->str == NULL)
+ break;
+ cp += strlen(op->str);
+- debug("eval%d '%s'", ops - eval_ops, op->str);
+- right_side = ops->inner(ops+1, &val, &cp);
+- *cpp = cp;
+-
+- /* If short_circuit_val is 0 or 1, we can ignore
+- * right side if left size is known, and its value
+- * (i.e., *valp) is 0 or !0, respectively */
+- if (left_side != LT_IF && op->short_circuit_val == !!*valp) {
+- debug("op->short_circuit_val:%d *valp:%d cp:'%s'",
+- op->short_circuit_val, *valp, cp);
+- *valp = !!*valp;
+- break;
+- }
+- /* Same for the right side */
+- if (right_side != LT_IF && op->short_circuit_val == !!val) {
+- debug("op->short_circuit_val:%d val:%d cp:'%s'",
+- op->short_circuit_val, val, cp);
+- left_side = right_side;
+- *valp = !!val;
+- break;
+- }
+-
+- if (left_side == LT_IF || right_side == LT_IF)
+- return (LT_IF);
+- *valp = op->fn(*valp, val);
+- left_side = right_side;
++ debug("eval%d %s", prec(ops), op->str);
++ rt = ops->inner(ops+1, &val, &cp);
++ if (rt == LT_ERROR)
++ return (LT_ERROR);
++ lt = op->fn(valp, lt, *valp, rt, val);
+ }
+
+- debug("eval%d = %d LT_IF:%d", ops - eval_ops, *valp, (left_side == LT_IF));
+- if (left_side == LT_IF)
+- return (LT_IF);
+- return (*valp ? LT_TRUE : LT_FALSE);
++ *cpp = cp;
++ debug("eval%d = %d", prec(ops), *valp);
++ debug("eval%d lt = %s", prec(ops), linetype_name[lt]);
++ return (lt);
+ }
+
+ /*
+@@ -841,14 +1084,57 @@
+ static Linetype
+ ifeval(const char **cpp)
+ {
+- int ret;
+- int val;
++ Linetype ret;
++ long val = 0;
+
+ debug("eval %s", *cpp);
+- keepthis = killconsts ? false : true;
++ constexpr = killconsts ? false : true;
+ ret = eval_table(eval_ops, &val, cpp);
+- debug("val:%d ret:%d keepthis:%d", val, ret, keepthis);
+- return (keepthis ? LT_IF : ret);
++ debug("eval = %d", val);
++ return (constexpr ? LT_IF : ret == LT_ERROR ? LT_IF : ret);
++}
++
++/*
++ * Read a line and examine its initial part to determine if it is a
++ * preprocessor directive. Returns NULL on EOF, or a pointer to a
++ * preprocessor directive name, or a pointer to the zero byte at the
++ * end of the line.
++ */
++static const char *
++skiphash(void)
++{
++ const char *cp;
++
++ linenum++;
++ if (fgets(tline, MAXLINE, input) == NULL) {
++ if (ferror(input))
++ err(2, "can't read %s", filename);
++ else
++ return (NULL);
++ }
++ cp = skipcomment(tline);
++ if (linestate == LS_START && *cp == '#') {
++ linestate = LS_HASH;
++ return (skipcomment(cp + 1));
++ } else if (*cp == '\0') {
++ return (cp);
++ } else {
++ return (skipline(cp));
++ }
++}
++
++/*
++ * Mark a line dirty and consume the rest of it, keeping track of the
++ * lexical state.
++ */
++static const char *
++skipline(const char *cp)
++{
++ if (*cp != '\0')
++ linestate = LS_DIRTY;
++ while (*cp != '\0')
++ cp = skipcomment(cp + 1);
++ return (cp);
+ }
+
+ /*
+@@ -869,11 +1155,16 @@
+ }
+ while (*cp != '\0')
+ /* don't reset to LS_START after a line continuation */
+- if (strncmp(cp, "\\\n", 2) == 0)
++ if (strncmp(cp, "\\\r\n", 3) == 0)
++ cp += 3;
++ else if (strncmp(cp, "\\\n", 2) == 0)
+ cp += 2;
+ else switch (incomment) {
+ case NO_COMMENT:
+- if (strncmp(cp, "/\\\n", 3) == 0) {
++ if (strncmp(cp, "/\\\r\n", 4) == 0) {
++ incomment = STARTING_COMMENT;
++ cp += 4;
++ } else if (strncmp(cp, "/\\\n", 3) == 0) {
+ incomment = STARTING_COMMENT;
+ cp += 3;
+ } else if (strncmp(cp, "/*", 2) == 0) {
+@@ -893,7 +1184,7 @@
+ } else if (strncmp(cp, "\n", 1) == 0) {
+ linestate = LS_START;
+ cp += 1;
+- } else if (strchr(" \t", *cp) != NULL) {
++ } else if (strchr(" \r\t", *cp) != NULL) {
+ cp += 1;
+ } else
+ return (cp);
+@@ -925,7 +1216,10 @@
+ cp += 1;
+ continue;
+ case C_COMMENT:
+- if (strncmp(cp, "*\\\n", 3) == 0) {
++ if (strncmp(cp, "*\\\r\n", 4) == 0) {
++ incomment = FINISHING_COMMENT;
++ cp += 4;
++ } else if (strncmp(cp, "*\\\n", 3) == 0) {
+ incomment = FINISHING_COMMENT;
+ cp += 3;
+ } else if (strncmp(cp, "*/", 2) == 0) {
+@@ -954,13 +1248,37 @@
+ incomment = C_COMMENT;
+ continue;
+ default:
+- debug("bug at line %d", __LINE__);
+ abort(); /* bug */
+ }
+ return (cp);
+ }
+
+ /*
++ * Skip macro arguments.
++ */
++static const char *
++skipargs(const char *cp)
++{
++ const char *ocp = cp;
++ int level = 0;
++ cp = skipcomment(cp);
++ if (*cp != '(')
++ return (cp);
++ do {
++ if (*cp == '(')
++ level++;
++ if (*cp == ')')
++ level--;
++ cp = skipcomment(cp+1);
++ } while (level != 0 && *cp != '\0');
++ if (level == 0)
++ return (cp);
++ else
++ /* Rewind and re-detect the syntax error later. */
++ return (ocp);
++}
++
++/*
+ * Skip over an identifier.
+ */
+ static const char *
+@@ -972,27 +1290,69 @@
+ }
+
+ /*
+- * Look for the symbol in the symbol table. If is is found, we return
++ * Skip whitespace and take a copy of any following identifier.
++ */
++static const char *
++getsym(const char **cpp)
++{
++ const char *cp = *cpp, *sym;
++
++ cp = skipcomment(cp);
++ cp = skipsym(sym = cp);
++ if (cp == sym)
++ return NULL;
++ *cpp = cp;
++ return (xstrdup(sym, cp));
++}
++
++/*
++ * Check that s (a symbol) matches the start of t, and that the
++ * following character in t is not a symbol character. Returns a
++ * pointer to the following character in t if there is a match,
++ * otherwise NULL.
++ */
++static const char *
++matchsym(const char *s, const char *t)
++{
++ while (*s != '\0' && *t != '\0')
++ if (*s != *t)
++ return (NULL);
++ else
++ ++s, ++t;
++ if (*s == '\0' && endsym(*t))
++ return(t);
++ else
++ return(NULL);
++}
++
++/*
++ * Look for the symbol in the symbol table. If it is found, we return
+ * the symbol table index, else we return -1.
+ */
+ static int
+-findsym(const char *str)
++findsym(const char **strp)
+ {
+- const char *cp;
++ const char *str;
+ int symind;
+
+- cp = skipsym(str);
+- if (cp == str)
+- return (-1);
++ str = *strp;
++ *strp = skipsym(str);
+ if (symlist) {
+- printf("%.*s\n", (int)(cp-str), str);
++ if (*strp == str)
++ return (-1);
++ if (symdepth && firstsym)
++ printf("%s%3d", zerosyms ? "" : "\n", depth);
++ firstsym = zerosyms = false;
++ printf("%s%.*s%s",
++ symdepth ? " " : "",
++ (int)(*strp-str), str,
++ symdepth ? "" : "\n");
+ /* we don't care about the value of the symbol */
+ return (0);
+ }
+ for (symind = 0; symind < nsyms; ++symind) {
+- if (strlcmp(symname[symind], str, cp-str) == 0) {
+- debug("findsym %s %s", symname[symind],
+- value[symind] ? value[symind] : "");
++ if (matchsym(symname[symind], str) != NULL) {
++ debugsym("findsym", symind);
+ return (symind);
+ }
+ }
+@@ -1000,51 +1360,194 @@
+ }
+
+ /*
++ * Resolve indirect symbol values to their final definitions.
++ */
++static void
++indirectsym(void)
++{
++ const char *cp;
++ int changed, sym, ind;
++
++ do {
++ changed = 0;
++ for (sym = 0; sym < nsyms; ++sym) {
++ if (value[sym] == NULL)
++ continue;
++ cp = value[sym];
++ ind = findsym(&cp);
++ if (ind == -1 || ind == sym ||
++ *cp != '\0' ||
++ value[ind] == NULL ||
++ value[ind] == value[sym])
++ continue;
++ debugsym("indir...", sym);
++ value[sym] = value[ind];
++ debugsym("...ectsym", sym);
++ changed++;
++ }
++ } while (changed);
++}
++
++/*
++ * Add a symbol to the symbol table, specified with the format sym=val
++ */
++static void
++addsym1(bool ignorethis, bool definethis, char *symval)
++{
++ const char *sym, *val;
++
++ sym = symval;
++ val = skipsym(sym);
++ if (definethis && *val == '=') {
++ symval[val - sym] = '\0';
++ val = val + 1;
++ } else if (*val == '\0') {
++ val = definethis ? "1" : NULL;
++ } else {
++ usage();
++ }
++ addsym2(ignorethis, sym, val);
++}
++
++/*
+ * Add a symbol to the symbol table.
+ */
+ static void
+-addsym(bool ignorethis, bool definethis, char *sym)
++addsym2(bool ignorethis, const char *sym, const char *val)
+ {
++ const char *cp = sym;
+ int symind;
+- char *val;
+
+- symind = findsym(sym);
++ symind = findsym(&cp);
+ if (symind < 0) {
+ if (nsyms >= MAXSYMS)
+ errx(2, "too many symbols");
+ symind = nsyms++;
+ }
+- symname[symind] = sym;
+ ignore[symind] = ignorethis;
+- val = sym + (skipsym(sym) - sym);
+- if (definethis) {
+- if (*val == '=') {
+- value[symind] = val+1;
+- *val = '\0';
+- } else if (*val == '\0')
+- value[symind] = "";
+- else
+- usage();
++ symname[symind] = sym;
++ value[symind] = val;
++ debugsym("addsym", symind);
++}
++
++static void
++debugsym(const char *why, int symind)
++{
++ debug("%s %s%c%s", why, symname[symind],
++ value[symind] ? '=' : ' ',
++ value[symind] ? value[symind] : "undef");
++}
++
++/*
++ * Add symbols to the symbol table from a file containing
++ * #define and #undef preprocessor directives.
++ */
++static void
++defundefile(const char *fn)
++{
++ filename = fn;
++ input = fopen(fn, "rb");
++ if (input == NULL)
++ err(2, "can't open %s", fn);
++ linenum = 0;
++ while (defundef())
++ ;
++ if (ferror(input))
++ err(2, "can't read %s", filename);
++ else
++ fclose(input);
++ if (incomment)
++ error("EOF in comment");
++}
++
++/*
++ * Read and process one #define or #undef directive
++ */
++static bool
++defundef(void)
++{
++ const char *cp, *kw, *sym, *val, *end;
++
++ cp = skiphash();
++ if (cp == NULL)
++ return (false);
++ if (*cp == '\0')
++ goto done;
++ /* strip trailing whitespace, and do a fairly rough check to
++ avoid unsupported multi-line preprocessor directives */
++ end = cp + strlen(cp);
++ while (end > tline && strchr(" \t\n\r", end[-1]) != NULL)
++ --end;
++ if (end > tline && end[-1] == '\\')
++ Eioccc();
++
++ kw = cp;
++ if ((cp = matchsym("define", kw)) != NULL) {
++ sym = getsym(&cp);
++ if (sym == NULL)
++ error("missing macro name in #define");
++ if (*cp == '(') {
++ val = "1";
++ } else {
++ cp = skipcomment(cp);
++ val = (cp < end) ? xstrdup(cp, end) : "";
++ }
++ debug("#define");
++ addsym2(false, sym, val);
++ } else if ((cp = matchsym("undef", kw)) != NULL) {
++ sym = getsym(&cp);
++ if (sym == NULL)
++ error("missing macro name in #undef");
++ cp = skipcomment(cp);
++ debug("#undef");
++ addsym2(false, sym, NULL);
+ } else {
+- if (*val != '\0')
+- usage();
+- value[symind] = NULL;
++ error("unrecognized preprocessor directive");
+ }
++ skipline(cp);
++done:
++ debug("parser line %d state %s comment %s line", linenum,
++ comment_name[incomment], linestate_name[linestate]);
++ return (true);
+ }
+
+ /*
+- * Compare s with n characters of t.
+- * The same as strncmp() except that it checks that s[n] == '\0'.
++ * Concatenate two strings into new memory, checking for failure.
+ */
+-static int
+-strlcmp(const char *s, const char *t, size_t n)
++static char *
++astrcat(const char *s1, const char *s2)
+ {
+- while (n-- && *t != '\0')
+- if (*s != *t)
+- return ((unsigned char)*s - (unsigned char)*t);
+- else
+- ++s, ++t;
+- return ((unsigned char)*s);
++ char *s;
++ int len;
++ size_t size;
++
++ len = snprintf(NULL, 0, "%s%s", s1, s2);
++ if (len < 0)
++ err(2, "snprintf");
++ size = (size_t)len + 1;
++ s = (char *)malloc(size);
++ if (s == NULL)
++ err(2, "malloc");
++ snprintf(s, size, "%s%s", s1, s2);
++ return (s);
++}
++
++/*
++ * Duplicate a segment of a string, checking for failure.
++ */
++static const char *
++xstrdup(const char *start, const char *end)
++{
++ size_t n;
++ char *s;
++
++ if (end < start) abort(); /* bug */
++ n = (size_t)(end - start) + 1;
++ s = malloc(n);
++ if (s == NULL)
++ err(2, "malloc");
++ snprintf(s, n, "%s", start);
++ return (s);
+ }
+
+ /*
+@@ -1070,5 +1573,6 @@
+ else
+ warnx("%s: %d: %s (#if line %d depth %d)",
+ filename, linenum, msg, stifline[depth], depth);
++ closeio();
+ errx(2, "output may be truncated");
+ }
+diff -Nur uClibc-0.9.33.2/extra/scripts/unifdef.h uClibc-git/extra/scripts/unifdef.h
+--- uClibc-0.9.33.2/extra/scripts/unifdef.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/scripts/unifdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,57 @@
++/*
++ * Copyright (c) 2012 - 2013 Tony Finch <dot@dotat.at>
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++#include <sys/stat.h>
++
++#include <ctype.h>
++#include <errno.h>
++#include <stdarg.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++/* Avoid err.h since this are non-standard BSD extensions */
++#define vwarnx(fmt, args) ({ fprintf(stderr, "unifdef: "); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); })
++#define warnx(fmt, args...) fprintf(stderr, "unifdef: " fmt "\n", ## args)
++#define warn(fmt, args...) warnx(fmt ": %s", ## args, strerror(errno))
++#define errx(exit_code, fmt, args...) ({ warnx(fmt, ## args); exit(exit_code); })
++#define err(exit_code, fmt, args...) errx(exit_code, fmt ": %s", ## args, strerror(errno))
++
++/* portability stubs */
++
++#define fbinmode(fp) (fp)
++
++#define replace(old,new) rename(old,new)
++
++static FILE *
++mktempmode(char *tmp, int mode)
++{
++ int fd = mkstemp(tmp);
++ if (fd < 0) return (NULL);
++ fchmod(fd, mode & (S_IRWXU|S_IRWXG|S_IRWXO));
++ return (fdopen(fd, "wb"));
++}
+diff -Nur uClibc-0.9.33.2/extra/scripts/version.h uClibc-git/extra/scripts/version.h
+--- uClibc-0.9.33.2/extra/scripts/version.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/extra/scripts/version.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,2 @@
++"@(#) $Version: unifdef-2.10.4.1542ea4 $\n"
++"@(#) $Date: 2014-01-07 22:32:21 +0000 $\n"
+diff -Nur uClibc-0.9.33.2/.gitignore uClibc-git/.gitignore
+--- uClibc-0.9.33.2/.gitignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/.gitignore 2014-02-03 12:32:56.000000000 +0100
+@@ -25,6 +25,7 @@
+ .gdb_history
+ .gdbinit
+ core
++*.c.[0-9][0-9][0-9]t.*
+
+ #
+ # Backups / patches
+diff -Nur uClibc-0.9.33.2/include/alloca.h uClibc-git/include/alloca.h
+--- uClibc-0.9.33.2/include/alloca.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/alloca.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ALLOCA_H
+ #define _ALLOCA_H 1
+diff -Nur uClibc-0.9.33.2/include/ar.h uClibc-git/include/ar.h
+--- uClibc-0.9.33.2/include/ar.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ar.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _AR_H
+ #define _AR_H 1
+diff -Nur uClibc-0.9.33.2/include/arpa/inet.h uClibc-git/include/arpa/inet.h
+--- uClibc-0.9.33.2/include/arpa/inet.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/arpa/inet.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ARPA_INET_H
+ #define _ARPA_INET_H 1
+@@ -32,7 +31,7 @@
+
+ /* Convert Internet host address from numbers-and-dots notation in CP
+ into binary data in network byte order. */
+-extern in_addr_t inet_addr (__const char *__cp) __THROW;
++extern in_addr_t inet_addr (const char *__cp) __THROW;
+ libc_hidden_proto(inet_addr)
+
+ /* Return the local host address part of the Internet address in IN. */
+@@ -50,7 +49,7 @@
+
+ /* Extract the network number in network byte order from the address
+ in numbers-and-dots natation starting at CP. */
+-extern in_addr_t inet_network (__const char *__cp) __THROW;
++extern in_addr_t inet_network (const char *__cp) __THROW;
+ libc_hidden_proto(inet_network)
+
+ /* Convert Internet number in IN to ASCII representation. The return value
+@@ -60,20 +59,19 @@
+ #ifdef __UCLIBC__
+ /* Recursion-safe flavor */
+ extern char *inet_ntoa_r (struct in_addr __in, char *__buf) __THROW;
+-libc_hidden_proto(inet_ntoa_r)
+ #endif
+
+ /* Convert from presentation format of an Internet number in buffer
+ starting at CP to the binary network format and store result for
+ interface type AF in buffer starting at BUF. */
+-extern int inet_pton (int __af, __const char *__restrict __cp,
++extern int inet_pton (int __af, const char *__restrict __cp,
+ void *__restrict __buf) __THROW;
+ libc_hidden_proto(inet_pton)
+
+ /* Convert a Internet address in binary network format for interface
+ type AF in buffer starting at CP to presentation form and place
+ result in buffer of length LEN astarting at BUF. */
+-extern __const char *inet_ntop (int __af, __const void *__restrict __cp,
++extern const char *inet_ntop (int __af, const void *__restrict __cp,
+ char *__restrict __buf, socklen_t __len)
+ __THROW;
+ libc_hidden_proto(inet_ntop)
+@@ -83,7 +81,7 @@
+ #ifdef __USE_MISC
+ /* Convert Internet host address from numbers-and-dots notation in CP
+ into binary data and store the result in the structure INP. */
+-extern int inet_aton (__const char *__cp, struct in_addr *__inp) __THROW;
++extern int inet_aton (const char *__cp, struct in_addr *__inp) __THROW;
+ libc_hidden_proto(inet_aton)
+
+ #if 0
+@@ -94,24 +92,24 @@
+ /* Convert network number for interface type AF in buffer starting at
+ CP to presentation format. The result will specifiy BITS bits of
+ the number. */
+-extern char *inet_net_ntop (int __af, __const void *__cp, int __bits,
++extern char *inet_net_ntop (int __af, const void *__cp, int __bits,
+ char *__buf, size_t __len) __THROW;
+
+ /* Convert network number for interface type AF from presentation in
+ buffer starting at CP to network format and store result int
+ buffer starting at BUF of size LEN. */
+-extern int inet_net_pton (int __af, __const char *__cp,
++extern int inet_net_pton (int __af, const char *__cp,
+ void *__buf, size_t __len) __THROW;
+
+ /* Convert ASCII representation in hexadecimal form of the Internet
+ address to binary form and place result in buffer of length LEN
+ starting at BUF. */
+-extern unsigned int inet_nsap_addr (__const char *__cp,
++extern unsigned int inet_nsap_addr (const char *__cp,
+ unsigned char *__buf, int __len) __THROW;
+
+ /* Convert internet address in binary form in LEN bytes starting at CP
+ a presentation form and place result in BUF. */
+-extern char *inet_nsap_ntoa (int __len, __const unsigned char *__cp,
++extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
+ char *__buf) __THROW;
+ #endif
+ #endif
+diff -Nur uClibc-0.9.33.2/include/assert.h uClibc-git/include/assert.h
+--- uClibc-0.9.33.2/include/assert.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/assert.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.2 Diagnostics <assert.h>
+@@ -72,7 +71,7 @@
+ # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+ # define __ASSERT_FUNCTION __func__
+ # else
+-# define __ASSERT_FUNCTION ((__const char *) 0)
++# define __ASSERT_FUNCTION ((const char *) 0)
+ # endif
+ # endif
+
+diff -Nur uClibc-0.9.33.2/include/atomic.h uClibc-git/include/atomic.h
+--- uClibc-0.9.33.2/include/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ATOMIC_H
+ #define _ATOMIC_H 1
+diff -Nur uClibc-0.9.33.2/include/byteswap.h uClibc-git/include/byteswap.h
+--- uClibc-0.9.33.2/include/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BYTESWAP_H
+ #define _BYTESWAP_H 1
+diff -Nur uClibc-0.9.33.2/include/cancel.h uClibc-git/include/cancel.h
+--- uClibc-0.9.33.2/include/cancel.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/include/cancel.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,101 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Copyright (C) 2000-2011 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _CANCEL_H
++#define _CANCEL_H
++
++/*
++ * Usage of this header:
++ * 1. define a static or hidden function __NC(NAME) - expands to __NAME_nocancel
++ * 2. if it is hidden, add the prototype to the appropiate header where NAME has
++ * it's prototype (guarded by _LIBC)
++ * 3. add a CANCELLABLE_SYSCALL(...) line at the end, this will create the function
++ * NAME (as weak) with enabled cancellation for NPTL (and later for new LT), for
++ * LT_OLD it will also create a strong_alias to __libc_NAME to be used in libpthread
++ * 4. if you need libc_hidden_(weak|def) line, use instead lt_libc_hidden, this will
++ * take care of the correct type, weak or strong depending on the THREADS type
++ * 5. If the implementation can't be done using CANCELLABLE_SYSCALL (like for fcntl)
++ * you need to manually add lt_strong_alias() line too, to optionally create the
++ * __libc_NAME alias
++ * 6. if functions are needed to implement __NC(NAME), that themselves are cancellable,
++ * decide how the cancellation should be solved, two variants are possible:
++ * a. use the other function as __NC(FUNC), this way you access the non-cancellable
++ * variant and provide by CANCELLABLE_SYSCALL(...) the dedicated cancellation for NAME.
++ * be aware, that for this case __NC(FUNC) has to be hidden (not static)
++ * b. use the other function with it's name (FUNC) and add LIBC_CANCEL_HANDLED(); at
++ * the end of file with a comment telling us which function took care of the cancellation
++ * Note: LIBC_CANCEL_HANDLED() is noop on uClibc, glibc uses it only for tests, we use
++ * it only for "documentation".
++ *
++ * For now the use of this file is limited to libc, will expand later to support libpthread
++ * and librt as well.
++ */
++
++#include <features.h>
++
++#ifndef NOT_IN_libc
++
++#define __NC(name) _NC(name)
++#define _NC(name) __##name##_nocancel
++
++#define __NC_OLD(name) _NC_OLD(name)
++#define _NC_OLD(name) __libc_##name
++
++#define __NC_PROTO(name) extern __typeof(name) __NC(name) attribute_hidden;
++#define __NC_OLD_PROTO(name) extern __typeof(name) __NC_OLD(name);
++
++#if defined __UCLIBC_HAS_THREADS__ && !defined __LINUXTHREADS_OLD__
++# define __NEW_THREADS 1
++#else
++# define SINGLE_THREAD_P 1
++#endif
++
++#ifdef __NEW_THREADS
++# include <sysdep-cancel.h>
++
++# define CANCELLABLE_SYSCALL(res_type, name, param_list, params) \
++res_type weak_function name param_list \
++{ \
++ if (SINGLE_THREAD_P) \
++ return __NC(name) params; \
++ int oldtype = LIBC_CANCEL_ASYNC(); \
++ res_type result = __NC(name) params; \
++ LIBC_CANCEL_RESET(oldtype); \
++ return result; \
++}
++
++# define lt_strong_alias(name)
++# define lt_libc_hidden(name) libc_hidden_def(name)
++
++#elif defined __LINUXTHREADS_OLD__
++
++# define CANCELLABLE_SYSCALL(res_type, name, param_list, params) \
++weak_alias(__NC(name),name) \
++lt_strong_alias(name)
++
++# define lt_strong_alias(name) \
++__NC_OLD_PROTO(name) \
++strong_alias(name,__NC_OLD(name))
++# define lt_libc_hidden(name) libc_hidden_weak(name)
++
++#else
++
++# define CANCELLABLE_SYSCALL(res_type, name, param_list, params) \
++strong_alias(__NC(name),name)
++
++# define lt_strong_alias(name)
++# define lt_libc_hidden(name) libc_hidden_def(name)
++
++#endif
++
++/* disable it, useless, glibc uses it only for tests */
++# undef LIBC_CANCEL_HANDLED
++# define LIBC_CANCEL_HANDLED()
++
++#endif /* NOT_IN_libc */
++
++#endif
+diff -Nur uClibc-0.9.33.2/include/complex.h uClibc-git/include/complex.h
+--- uClibc-0.9.33.2/include/complex.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/complex.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
++/* Copyright (C) 1997, 1998, 1999, 2000, 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99: 7.3 Complex arithmetic <complex.h>
+@@ -84,7 +83,8 @@
+
+ /* And the long double versions. It is non-critical to define them
+ here unconditionally since `long double' is required in ISO C99. */
+-#if __STDC__ - 0 || __GNUC__ - 0 && defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
++#if (__STDC__ - 0 || __GNUC__ - 0) \
++ && defined __UCLIBC_HAS_LONG_DOUBLE_MATH__
+ # ifndef _Mlong_double_
+ # define _Mlong_double_ long double
+ # endif
+diff -Nur uClibc-0.9.33.2/include/cpio.h uClibc-git/include/cpio.h
+--- uClibc-0.9.33.2/include/cpio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/cpio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _CPIO_H
+ #define _CPIO_H 1
+diff -Nur uClibc-0.9.33.2/include/crypt.h uClibc-git/include/crypt.h
+--- uClibc-0.9.33.2/include/crypt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/crypt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,10 +12,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
+- *
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ #ifndef _CRYPT_H
+diff -Nur uClibc-0.9.33.2/include/ctype.h uClibc-git/include/ctype.h
+--- uClibc-0.9.33.2/include/ctype.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ctype.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard 7.4: Character handling <ctype.h>
+diff -Nur uClibc-0.9.33.2/include/dirent.h uClibc-git/include/dirent.h
+--- uClibc-0.9.33.2/include/dirent.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/dirent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-2000, 2003-2005, 2009 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2000,2003-2005,2009,2010 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 5.1.2 Directory Operations <dirent.h>
+@@ -132,7 +131,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern DIR *opendir (__const char *__name) __nonnull ((1));
++extern DIR *opendir (const char *__name) __nonnull ((1));
+ libc_hidden_proto(opendir)
+
+ #ifdef __USE_XOPEN2K8
+@@ -224,7 +223,7 @@
+ extern long int telldir (DIR *__dirp) __THROW __nonnull ((1));
+ #endif
+
+-#if defined __USE_BSD || defined __USE_MISC || defined __XOPEN_2K8
++#if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN2K8
+
+ /* Return the file descriptor used by DIRP. */
+ extern int dirfd (DIR *__dirp) __THROW __nonnull ((1));
+@@ -256,20 +255,20 @@
+ sorted using qsort with CMP, and collected in a malloc'd array in
+ *NAMELIST. Returns the number of entries selected, or -1 on error. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int scandir (__const char *__restrict __dir,
++extern int scandir (const char *__restrict __dir,
+ struct dirent ***__restrict __namelist,
+- int (*__selector) (__const struct dirent *),
+- int (*__cmp) (__const struct dirent **,
+- __const struct dirent **))
++ int (*__selector) (const struct dirent *),
++ int (*__cmp) (const struct dirent **,
++ const struct dirent **))
+ __nonnull ((1, 2));
+ # else
+ # ifdef __REDIRECT
+ extern int __REDIRECT (scandir,
+- (__const char *__restrict __dir,
++ (const char *__restrict __dir,
+ struct dirent ***__restrict __namelist,
+- int (*__selector) (__const struct dirent *),
+- int (*__cmp) (__const struct dirent **,
+- __const struct dirent **)),
++ int (*__selector) (const struct dirent *),
++ int (*__cmp) (const struct dirent **,
++ const struct dirent **)),
+ scandir64) __nonnull ((1, 2));
+ # else
+ # define scandir scandir64
+@@ -279,24 +278,24 @@
+ # if defined __USE_GNU && defined __USE_LARGEFILE64
+ /* This function is like `scandir' but it uses the 64bit dirent structure.
+ Please note that the CMP function must now work with struct dirent64 **. */
+-extern int scandir64 (__const char *__restrict __dir,
++extern int scandir64 (const char *__restrict __dir,
+ struct dirent64 ***__restrict __namelist,
+- int (*__selector) (__const struct dirent64 *),
+- int (*__cmp) (__const struct dirent64 **,
+- __const struct dirent64 **))
++ int (*__selector) (const struct dirent64 *),
++ int (*__cmp) (const struct dirent64 **,
++ const struct dirent64 **))
+ __nonnull ((1, 2));
+ # endif
+
+ /* Function to compare two `struct dirent's alphabetically. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int alphasort (__const struct dirent **__e1,
+- __const struct dirent **__e2)
++extern int alphasort (const struct dirent **__e1,
++ const struct dirent **__e2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ # else
+ # ifdef __REDIRECT
+ extern int __REDIRECT_NTH (alphasort,
+- (__const struct dirent **__e1,
+- __const struct dirent **__e2),
++ (const struct dirent **__e1,
++ const struct dirent **__e2),
+ alphasort64) __attribute_pure__ __nonnull ((1, 2));
+ # else
+ # define alphasort alphasort64
+@@ -304,14 +303,14 @@
+ # endif
+
+ # if defined __USE_GNU && defined __USE_LARGEFILE64
+-extern int alphasort64 (__const struct dirent64 **__e1,
+- __const struct dirent64 **__e2)
++extern int alphasort64 (const struct dirent64 **__e1,
++ const struct dirent64 **__e2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ # endif
+ #endif /* Use BSD or misc or XPG7. */
+
+
+-#if defined __USE_BSD || defined __USE_MISC
++#if 0 /* defined __USE_BSD || defined __USE_MISC */
+ /* Read directory entries from FD into BUF, reading at most NBYTES.
+ Reading starts at offset *BASEP, and *BASEP is updated with the new
+ position after reading. Returns the number of bytes read; zero when at
+@@ -344,14 +343,14 @@
+ #ifdef __USE_GNU
+ /* Function to compare two `struct dirent's by name & version. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int versionsort (__const struct dirent **__e1,
+- __const struct dirent **__e2)
++extern int versionsort (const struct dirent **__e1,
++ const struct dirent **__e2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ # else
+ # ifdef __REDIRECT
+ extern int __REDIRECT_NTH (versionsort,
+- (__const struct dirent **__e1,
+- __const struct dirent **__e2),
++ (const struct dirent **__e1,
++ const struct dirent **__e2),
+ versionsort64)
+ __attribute_pure__ __nonnull ((1, 2));
+ # else
+@@ -360,12 +359,19 @@
+ # endif
+
+ # ifdef __USE_LARGEFILE64
+-extern int versionsort64 (__const struct dirent64 **__e1,
+- __const struct dirent64 **__e2)
++extern int versionsort64 (const struct dirent64 **__e1,
++ const struct dirent64 **__e2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ # endif
+ #endif /* Use GNU. */
+
+ __END_DECLS
+
++#ifdef _LIBC
++extern __ssize_t __getdents(int fd, char *buf, size_t count) attribute_hidden;
++# ifdef __UCLIBC_HAS_LFS__
++extern __ssize_t __getdents64 (int fd, char *buf, size_t count) attribute_hidden;
++# endif
++#endif
++
+ #endif /* dirent.h */
+diff -Nur uClibc-0.9.33.2/include/dlfcn.h uClibc-git/include/dlfcn.h
+--- uClibc-0.9.33.2/include/dlfcn.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/dlfcn.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,5 @@
+ /* User functions for run-time dynamic loading.
+- Copyright (C) 1995-1999,2000,2001,2003,2004,2006
+- Free Software Foundation, Inc.
++ Copyright (C) 1995-2001,2003,2004,2006,2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -14,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _DLFCN_H
+ #define _DLFCN_H 1
+@@ -52,11 +50,12 @@
+ # endif
+ #endif
+
++
+ __BEGIN_DECLS
+
+ /* Open the shared object FILE and map it in; return a handle that can be
+ passed to `dlsym' to get symbol values from it. */
+-extern void *dlopen (__const char *__file, int __mode) __THROW;
++extern void *dlopen (const char *__file, int __mode) __THROW;
+
+ /* Unmap and close a shared object opened by `dlopen'.
+ The handle cannot be used again after calling `dlclose'. */
+@@ -65,17 +64,17 @@
+ /* Find the run-time address in the shared object HANDLE refers to
+ of the symbol called NAME. */
+ extern void *dlsym (void *__restrict __handle,
+- __const char *__restrict __name) __THROW __nonnull ((2));
++ const char *__restrict __name) __THROW __nonnull ((2));
+
+ #if 0 /*def __USE_GNU*/
+ /* Like `dlopen', but request object to be allocated in a new namespace. */
+-extern void *dlmopen (Lmid_t __nsid, __const char *__file, int __mode) __THROW;
++extern void *dlmopen (Lmid_t __nsid, const char *__file, int __mode) __THROW;
+
+ /* Find the run-time address in the shared object HANDLE refers to
+ of the symbol called NAME with VERSION. */
+ extern void *dlvsym (void *__restrict __handle,
+- __const char *__restrict __name,
+- __const char *__restrict __version)
++ const char *__restrict __name,
++ const char *__restrict __version)
+ __THROW __nonnull ((2, 3));
+ #endif
+
+@@ -90,20 +89,20 @@
+ `dladdr'. */
+ typedef struct
+ {
+- __const char *dli_fname; /* File name of defining object. */
++ const char *dli_fname; /* File name of defining object. */
+ void *dli_fbase; /* Load address of that object. */
+- __const char *dli_sname; /* Name of nearest symbol. */
++ const char *dli_sname; /* Name of nearest symbol. */
+ void *dli_saddr; /* Exact value of nearest symbol. */
+ } Dl_info;
+
+ /* Fill in *INFO with the following information about ADDRESS.
+ Returns 0 iff no shared object's segments contain that address. */
+-extern int dladdr (__const void *__address, Dl_info *__info)
++extern int dladdr (const void *__address, Dl_info *__info)
+ __THROW __nonnull ((2));
+
+ #if 0 /* not supported by uClibc */
+ /* Same as `dladdr', but additionally sets *EXTRA_INFO according to FLAGS. */
+-extern int dladdr1 (__const void *__address, Dl_info *__info,
++extern int dladdr1 (const void *__address, Dl_info *__info,
+ void **__extra_info, int __flags) __THROW __nonnull ((2));
+
+ /* These are the possible values for the FLAGS argument to `dladdr1'.
+@@ -166,7 +165,7 @@
+ segment, or if the calling thread has not allocated a block for it. */
+ RTLD_DI_TLS_DATA = 10,
+
+- RTLD_DI_MAX = 10,
++ RTLD_DI_MAX = 10
+ };
+
+
+@@ -186,12 +185,6 @@
+ unsigned int dls_cnt; /* Number of elements in `dls_serpath'. */
+ Dl_serpath dls_serpath[1]; /* Actually longer, dls_cnt elements. */
+ } Dl_serinfo;
+-
+-#else
+-
+-/* Get information about the shared objects currently loaded */
+-extern int dlinfo (void);
+-
+ #endif
+ #endif /* __USE_GNU */
+
+diff -Nur uClibc-0.9.33.2/include/elf.h uClibc-git/include/elf.h
+--- uClibc-0.9.33.2/include/elf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/elf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ELF_H
+ #define _ELF_H 1
+@@ -148,8 +147,8 @@
+ #define ELFOSABI_SYSV 0 /* Alias. */
+ #define ELFOSABI_HPUX 1 /* HP-UX */
+ #define ELFOSABI_NETBSD 2 /* NetBSD. */
+-#define ELFOSABI_LINUX 3 /* Linux. */
+-#define ELFOSABI_HURD 4 /* GNU/Hurd */
++#define ELFOSABI_GNU 3 /* Object uses GNU ELF extensions. */
++#define ELFOSABI_LINUX ELFOSABI_GNU /* Compatibility alias. */
+ #define ELFOSABI_SOLARIS 6 /* Sun Solaris. */
+ #define ELFOSABI_AIX 7 /* IBM AIX. */
+ #define ELFOSABI_IRIX 8 /* SGI Irix. */
+@@ -260,6 +259,7 @@
+ #define EM_PJ 91 /* picoJava */
+ #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
+ #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
++#define EM_ARCOMPACT 93 /* ARCompact ISA based Cores: ARC 700 */
+ #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
+ #define EM_IP2K 101 /* Ubicom IP2022 micro controller */
+ #define EM_CR 103 /* National Semiconductor CompactRISC */
+@@ -282,6 +282,9 @@
+ unofficial e_machine number should eventually ask registry@caldera.com for
+ an officially blessed number to be added to the list above. */
+
++/* Imagination Technologies Meta */
++#define EM_METAG 174
++
+ /* picoJava */
+ #define EM_PJ_OLD 99
+
+@@ -3141,6 +3144,110 @@
+ #define R_MICROBLAZE_COPY 21 /* runtime copy */
+ #define R_MICROBLAZE_NUM 22
+
++/* Meta relocations */
++#define R_METAG_HIADDR16 0
++#define R_METAG_LOADDR16 1
++#define R_METAG_ADDR32 2
++#define R_METAG_NONE 3
++#define R_METAG_RELBRANCH 4
++#define R_METAG_GETSETOFF 5
++
++/* Backward compatability */
++#define R_METAG_REG32OP1 6
++#define R_METAG_REG32OP2 7
++#define R_METAG_REG32OP3 8
++#define R_METAG_REG16OP1 9
++#define R_METAG_REG16OP2 10
++#define R_METAG_REG16OP3 11
++#define R_METAG_REG32OP4 12
++
++#define R_METAG_HIOG 13
++#define R_METAG_LOOG 14
++
++/* GNU */
++#define R_METAG_GNU_VTINHERIT 30
++#define R_METAG_GNU_VTENTRY 31
++
++/* PIC relocations */
++#define R_METAG_HI16_GOTOFF 32
++#define R_METAG_LO16_GOTOFF 33
++#define R_METAG_GETSET_GOTOFF 34
++#define R_METAG_GETSET_GOT 35
++#define R_METAG_HI16_GOTPC 36
++#define R_METAG_LO16_GOTPC 37
++#define R_METAG_HI16_PLT 38
++#define R_METAG_LO16_PLT 39
++#define R_METAG_RELBRANCH_PLT 40
++#define R_METAG_GOTOFF 41
++#define R_METAG_PLT 42
++#define R_METAG_COPY 43
++#define R_METAG_JMP_SLOT 44
++#define R_METAG_RELATIVE 45
++#define R_METAG_GLOB_DAT 46
++
++/* TLS relocations */
++#define R_METAG_TLS_TPOFF 56
++#define R_METAG_TLS_DTPMOD 57
++#define R_METAG_TLS_DTPOFF 58
++
++/* ARCompact specific relocs */
++#define R_ARC_NONE 0x0
++#define R_ARC_8 0x1
++#define R_ARC_16 0x2
++#define R_ARC_24 0x3
++#define R_ARC_32 0x4
++#define R_ARC_B26 0x5
++#define R_ARC_B22_PCREL 0x6
++#define R_ARC_H30 0x7
++#define R_ARC_N8 0x8
++#define R_ARC_N16 0x9
++#define R_ARC_N24 0xA
++#define R_ARC_N32 0xB
++#define R_ARC_SDA 0xC
++#define R_ARC_SECTOFF 0xD
++#define R_ARC_S21H_PCREL 0xE
++#define R_ARC_S21W_PCREL 0xF
++#define R_ARC_S25H_PCREL 0x10
++#define R_ARC_S25W_PCREL 0x11
++#define R_ARC_SDA32 0x12
++#define R_ARC_SDA_LDST 0x13
++#define R_ARC_SDA_LDST1 0x14
++#define R_ARC_SDA_LDST2 0x15
++#define R_ARC_SDA16_LD 0x16
++#define R_ARC_SDA16_LD1 0x17
++#define R_ARC_SDA16_LD2 0x18
++#define R_ARC_S13_PCREL 0x19
++#define R_ARC_W 0x1A
++#define R_ARC_32_ME 0x1B
++#define R_ARC_N32_ME 0x1C
++#define R_ARC_SECTOFF_ME 0x1D
++#define R_ARC_SDA32_ME 0x1E
++#define R_ARC_W_ME 0x1F
++#define R_ARC_H30_ME 0x20
++#define R_ARC_SECTOFF_U8 0x21
++#define R_ARC_SECTOFF_S9 0x22
++#define R_AC_SECTOFF_U8 0x23
++#define R_AC_SECTOFF_U8_1 0x24
++#define R_AC_SECTOFF_U8_2 0x25
++#define R_AC_SECTOFF_S9 0x26
++#define R_AC_SECTOFF_S9_1 0x27
++#define R_AC_SECTOFF_S9_2 0x28
++#define R_ARC_SECTOFF_ME_1 0x29
++#define R_ARC_SECTOFF_ME_2 0x2A
++#define R_ARC_SECTOFF_1 0x2B
++#define R_ARC_SECTOFF_2 0x2C
++#define R_ARC_PC32 0x32
++#define R_ARC_GOTPC32 0x33
++#define R_ARC_PLT32 0x34
++#define R_ARC_COPY 0x35
++#define R_ARC_GLOB_DAT 0x36
++#define R_ARC_JMP_SLOT 0x37
++#define R_ARC_RELATIVE 0x38
++#define R_ARC_GOTOFF 0x39
++#define R_ARC_GOTPC 0x3A
++#define R_ARC_GOT32 0x3B
++#define R_ARC_NUM 0x3C
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/include/endian.h uClibc-git/include/endian.h
+--- uClibc-0.9.33.2/include/endian.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/endian.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ENDIAN_H
+ #define _ENDIAN_H 1
+@@ -55,6 +54,17 @@
+ # define __LONG_LONG_PAIR(HI, LO) HI, LO
+ #endif
+
++#ifdef _LIBC
++# ifndef __ASSEMBLER__
++# include <stdint.h>
++# define OFF_HI(offset) (offset >> 31)
++# define OFF_LO(offset) (offset)
++# define OFF64_HI(offset) (uint32_t)(offset >> 32)
++# define OFF64_LO(offset) (uint32_t)(offset & 0xffffffff)
++# define OFF_HI_LO(offset) __LONG_LONG_PAIR(OFF_HI(offset), OFF_LO(offset))
++# define OFF64_HI_LO(offset) __LONG_LONG_PAIR(OFF64_HI(offset), OFF64_LO(offset))
++# endif
++#endif
+
+ #ifdef __USE_BSD
+ /* Conversion interfaces. */
+diff -Nur uClibc-0.9.33.2/include/err.h uClibc-git/include/err.h
+--- uClibc-0.9.33.2/include/err.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/err.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ERR_H
+ #define _ERR_H 1
+@@ -32,30 +31,26 @@
+
+ /* Print "program: ", FORMAT, ": ", the standard error string for errno,
+ and a newline, on stderr. */
+-extern void warn (__const char *__format, ...)
++extern void warn (const char *__format, ...)
+ __attribute__ ((__format__ (__printf__, 1, 2)));
+-extern void vwarn (__const char *__format, __gnuc_va_list)
++extern void vwarn (const char *__format, __gnuc_va_list)
+ __attribute__ ((__format__ (__printf__, 1, 0)));
+-libc_hidden_proto(vwarn)
+
+ /* Likewise, but without ": " and the standard error string. */
+-extern void warnx (__const char *__format, ...)
++extern void warnx (const char *__format, ...)
+ __attribute__ ((__format__ (__printf__, 1, 2)));
+-extern void vwarnx (__const char *__format, __gnuc_va_list)
++extern void vwarnx (const char *__format, __gnuc_va_list)
+ __attribute__ ((__format__ (__printf__, 1, 0)));
+-libc_hidden_proto(vwarnx)
+
+ /* Likewise, and then exit with STATUS. */
+-extern void err (int __status, __const char *__format, ...)
++extern void err (int __status, const char *__format, ...)
+ __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+-extern void verr (int __status, __const char *__format, __gnuc_va_list)
++extern void verr (int __status, const char *__format, __gnuc_va_list)
+ __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0)));
+-libc_hidden_proto(verr)
+-extern void errx (int __status, __const char *__format, ...)
++extern void errx (int __status, const char *__format, ...)
+ __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+-extern void verrx (int __status, __const char *, __gnuc_va_list)
++extern void verrx (int __status, const char *, __gnuc_va_list)
+ __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0)));
+-libc_hidden_proto(verrx)
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/errno.h uClibc-git/include/errno.h
+--- uClibc-0.9.33.2/include/errno.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/errno.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.5 Errors <errno.h>
+@@ -47,6 +46,9 @@
+ extern int errno;
+ #endif
+
++#ifdef _LIBC
++extern const char *__progname, *__progname_full;
++#endif
+ #if defined __USE_GNU && defined __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__
+
+ /* The full and simple forms of the name with which the program was
+diff -Nur uClibc-0.9.33.2/include/error.h uClibc-git/include/error.h
+--- uClibc-0.9.33.2/include/error.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/error.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ERROR_H
+ #define _ERROR_H 1
+diff -Nur uClibc-0.9.33.2/include/execinfo.h uClibc-git/include/execinfo.h
+--- uClibc-0.9.33.2/include/execinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/execinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _EXECINFO_H
+ #define _EXECINFO_H 1
+@@ -30,13 +29,13 @@
+
+ /* Return names of functions from the backtrace list in ARRAY in a newly
+ malloc()ed memory block. */
+-extern char **backtrace_symbols (void *__const *__array, int __size)
++extern char **backtrace_symbols (void *const *__array, int __size)
+ __THROW __nonnull ((1));
+
+
+ /* This function is similar to backtrace_symbols() but it writes the result
+ immediately to a file. */
+-extern void backtrace_symbols_fd (void *__const *__array, int __size, int __fd)
++extern void backtrace_symbols_fd (void *const *__array, int __size, int __fd)
+ __THROW __nonnull ((1));
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/fcntl.h uClibc-git/include/fcntl.h
+--- uClibc-0.9.33.2/include/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 6.5 File Control Operations <fcntl.h>
+@@ -75,7 +74,10 @@
+ __THROW. */
+ #if !defined(__USE_FILE_OFFSET64) || defined(__LP64__)
+ extern int fcntl (int __fd, int __cmd, ...);
++# ifdef _LIBC
++extern int __fcntl_nocancel(int, int, long) attribute_hidden;
+ libc_hidden_proto(fcntl)
++# endif
+ #else
+ # ifdef __REDIRECT
+ extern int __REDIRECT (fcntl, (int __fd, int __cmd, ...), fcntl64);
+@@ -85,7 +87,10 @@
+ #endif
+ #if defined(__USE_LARGEFILE64) && !defined(__LP64__)
+ extern int fcntl64 (int __fd, int __cmd, ...);
++# ifdef _LIBC
++extern int __fcntl64_nocancel(int, int, long) attribute_hidden;
+ libc_hidden_proto(fcntl64)
++# endif
+ #endif
+
+ /* Open FILE and return a new file descriptor for it, or -1 on error.
+@@ -95,18 +100,22 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ #ifndef __USE_FILE_OFFSET64
+-extern int open (__const char *__file, int __oflag, ...) __nonnull ((1));
++extern int open (const char *__file, int __oflag, ...) __nonnull ((1));
+ libc_hidden_proto(open)
++# ifdef _LIBC
++extern int __open2_nocancel(const char *, int) __nonnull ((1)) attribute_hidden;
++extern int __open_nocancel(const char *, int, mode_t) __nonnull ((1)) attribute_hidden;
++# endif
+ #else
+ # ifdef __REDIRECT
+-extern int __REDIRECT (open, (__const char *__file, int __oflag, ...), open64)
++extern int __REDIRECT (open, (const char *__file, int __oflag, ...), open64)
+ __nonnull ((1));
+ # else
+ # define open open64
+ # endif
+ #endif
+ #ifdef __USE_LARGEFILE64
+-extern int open64 (__const char *__file, int __oflag, ...) __nonnull ((1));
++extern int open64 (const char *__file, int __oflag, ...) __nonnull ((1));
+ libc_hidden_proto(open64)
+ #endif
+
+@@ -121,21 +130,20 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int openat (int __fd, __const char *__file, int __oflag, ...)
++extern int openat (int __fd, const char *__file, int __oflag, ...)
+ __nonnull ((2));
+ libc_hidden_proto(openat)
+ # else
+ # ifdef __REDIRECT
+-extern int __REDIRECT (openat, (int __fd, __const char *__file, int __oflag,
++extern int __REDIRECT (openat, (int __fd, const char *__file, int __oflag,
+ ...), openat64) __nonnull ((2));
+ # else
+ # define openat openat64
+ # endif
+ # endif
+
+-extern int openat64 (int __fd, __const char *__file, int __oflag, ...)
++extern int openat64 (int __fd, const char *__file, int __oflag, ...)
+ __nonnull ((2));
+-libc_hidden_proto(openat64)
+ #endif
+
+ /* Create and open FILE, with mode MODE. This takes an `int' MODE
+@@ -144,17 +152,17 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ #ifndef __USE_FILE_OFFSET64
+-extern int creat (__const char *__file, __mode_t __mode) __nonnull ((1));
++extern int creat (const char *__file, __mode_t __mode) __nonnull ((1));
+ #else
+ # ifdef __REDIRECT
+-extern int __REDIRECT (creat, (__const char *__file, __mode_t __mode),
++extern int __REDIRECT (creat, (const char *__file, __mode_t __mode),
+ creat64) __nonnull ((1));
+ # else
+ # define creat creat64
+ # endif
+ #endif
+ #ifdef __USE_LARGEFILE64
+-extern int creat64 (__const char *__file, __mode_t __mode) __nonnull ((1));
++extern int creat64 (const char *__file, __mode_t __mode) __nonnull ((1));
+ #endif
+
+ #if !defined F_LOCK && (defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \
+@@ -184,7 +192,6 @@
+ # endif
+ # ifdef __USE_LARGEFILE64
+ extern int lockf64 (int __fd, int __cmd, __off64_t __len);
+-libc_hidden_proto(lockf64)
+ # endif
+ #endif
+
+@@ -210,9 +217,7 @@
+
+ #endif
+
+-#if 0 /* && defined __UCLIBC_HAS_ADVANCED_REALTIME__ */
+-
+-/* FIXME -- uClibc should probably implement these... */
++#if defined __UCLIBC_HAS_ADVANCED_REALTIME__
+
+ /* Reserve storage for the data of the file associated with FD.
+
+@@ -234,11 +239,6 @@
+ # endif
+ #endif
+
+-#ifdef _LIBC
+-extern int __fcntl_nocancel (int fd, int cmd, ...);
+-libc_hidden_proto(__fcntl_nocancel)
+-#endif
+-
+ __END_DECLS
+
+ #endif /* fcntl.h */
+diff -Nur uClibc-0.9.33.2/include/features.h uClibc-git/include/features.h
+--- uClibc-0.9.33.2/include/features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FEATURES_H
+ #define _FEATURES_H 1
+diff -Nur uClibc-0.9.33.2/include/fenv.h uClibc-git/include/fenv.h
+--- uClibc-0.9.33.2/include/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 7.6: Floating-point environment <fenv.h>
+@@ -73,7 +72,7 @@
+
+ /* Set complete status for exceptions indicated by EXCEPTS according to
+ the representation in the object pointed to by FLAGP. */
+-extern int fesetexceptflag (__const fexcept_t *__flagp, int __excepts) __THROW;
++extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
+
+ /* Determine which of subset of the exceptions specified by EXCEPTS are
+ currently set. */
+@@ -102,12 +101,12 @@
+
+ /* Establish the floating-point environment represented by the object
+ pointed to by ENVP. */
+-extern int fesetenv (__const fenv_t *__envp) __THROW;
++extern int fesetenv (const fenv_t *__envp) __THROW;
+
+ /* Save current exceptions in temporary storage, install environment
+ represented by object pointed to by ENVP and raise exceptions
+ according to saved exceptions. */
+-extern int feupdateenv (__const fenv_t *__envp) __THROW;
++extern int feupdateenv (const fenv_t *__envp) __THROW;
+
+
+ /* Include optimization. */
+diff -Nur uClibc-0.9.33.2/include/fnmatch.h uClibc-git/include/fnmatch.h
+--- uClibc-0.9.33.2/include/fnmatch.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/fnmatch.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FNMATCH_H
+ #define _FNMATCH_H 1
+@@ -23,14 +22,6 @@
+ extern "C" {
+ #endif
+
+-#ifndef const
+-# if (defined __STDC__ && __STDC__) || defined __cplusplus
+-# define __const const
+-# else
+-# define __const
+-# endif
+-#endif
+-
+ /* We #undef these before defining them because some losing systems
+ (HP-UX A.08.07 for example) define these in <unistd.h>. */
+ #undef FNM_PATHNAME
+@@ -62,7 +53,7 @@
+
+ /* Match NAME against the filename pattern PATTERN,
+ returning zero if it matches, FNM_NOMATCH if not. */
+-extern int fnmatch (__const char *__pattern, __const char *__name,
++extern int fnmatch (const char *__pattern, const char *__name,
+ int __flags);
+ libc_hidden_proto(fnmatch)
+
+diff -Nur uClibc-0.9.33.2/include/ftw.h uClibc-git/include/ftw.h
+--- uClibc-0.9.33.2/include/ftw.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ftw.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * X/Open Portability Guide 4.2: ftw.h
+@@ -112,19 +111,19 @@
+
+
+ /* Convenient types for callback functions. */
+-typedef int (*__ftw_func_t) (__const char *__filename,
+- __const struct stat *__status, int __flag);
++typedef int (*__ftw_func_t) (const char *__filename,
++ const struct stat *__status, int __flag);
+ #ifdef __USE_LARGEFILE64
+-typedef int (*__ftw64_func_t) (__const char *__filename,
+- __const struct stat64 *__status, int __flag);
++typedef int (*__ftw64_func_t) (const char *__filename,
++ const struct stat64 *__status, int __flag);
+ #endif
+ #ifdef __USE_XOPEN_EXTENDED
+-typedef int (*__nftw_func_t) (__const char *__filename,
+- __const struct stat *__status, int __flag,
++typedef int (*__nftw_func_t) (const char *__filename,
++ const struct stat *__status, int __flag,
+ struct FTW *__info);
+ # ifdef __USE_LARGEFILE64
+-typedef int (*__nftw64_func_t) (__const char *__filename,
+- __const struct stat64 *__status,
++typedef int (*__nftw64_func_t) (const char *__filename,
++ const struct stat64 *__status,
+ int __flag, struct FTW *__info);
+ # endif
+ #endif
+@@ -135,18 +134,18 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int ftw (__const char *__dir, __ftw_func_t __func, int __descriptors)
++extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
+ __nonnull ((1, 2));
+ # else
+ # ifdef __REDIRECT
+-extern int __REDIRECT (ftw, (__const char *__dir, __ftw_func_t __func,
++extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
+ int __descriptors), ftw64) __nonnull ((1, 2));
+ # else
+ # define ftw ftw64
+ # endif
+ # endif
+ # ifdef __USE_LARGEFILE64
+-extern int ftw64 (__const char *__dir, __ftw64_func_t __func,
++extern int ftw64 (const char *__dir, __ftw64_func_t __func,
+ int __descriptors) __nonnull ((1, 2));
+ # endif
+ #endif
+@@ -158,11 +157,11 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int nftw (__const char *__dir, __nftw_func_t __func, int __descriptors,
++extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
+ int __flag) __nonnull ((1, 2));
+ # else
+ # ifdef __REDIRECT
+-extern int __REDIRECT (nftw, (__const char *__dir, __nftw_func_t __func,
++extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
+ int __descriptors, int __flag), nftw64)
+ __nonnull ((1, 2));
+ # else
+@@ -170,7 +169,7 @@
+ # endif
+ # endif
+ # ifdef __USE_LARGEFILE64
+-extern int nftw64 (__const char *__dir, __nftw64_func_t __func,
++extern int nftw64 (const char *__dir, __nftw64_func_t __func,
+ int __descriptors, int __flag) __nonnull ((1, 2));
+ # endif
+ #endif
+diff -Nur uClibc-0.9.33.2/include/.gitignore uClibc-git/include/.gitignore
+--- uClibc-0.9.33.2/include/.gitignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/.gitignore 2014-02-03 12:32:56.000000000 +0100
+@@ -8,6 +8,7 @@
+ #
+ /bits/
+ /config/
++/generated/
+
+ /bfin_fixed_code.h
+ /bfin_l1layout.h
+@@ -15,6 +16,9 @@
+ /dl-osinfo.h
+ /fpu_control.h
+ /hp-timing.h
++/jmpbuf-offsets.h
++/jmpbuf-unwind.h
++/not-cancel.h
+ /pthread.h
+ /semaphore.h
+ /thread_db.h
+diff -Nur uClibc-0.9.33.2/include/glob.h uClibc-git/include/glob.h
+--- uClibc-0.9.33.2/include/glob.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/glob.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GLOB_H
+ #define _GLOB_H 1
+@@ -110,13 +109,13 @@
+ #else
+ void *(*gl_readdir) (void *);
+ #endif
+- void *(*gl_opendir) (__const char *);
++ void *(*gl_opendir) (const char *);
+ #ifdef __USE_GNU
+- int (*gl_lstat) (__const char *__restrict, struct stat *__restrict);
+- int (*gl_stat) (__const char *__restrict, struct stat *__restrict);
++ int (*gl_lstat) (const char *__restrict, struct stat *__restrict);
++ int (*gl_stat) (const char *__restrict, struct stat *__restrict);
+ #else
+- int (*gl_lstat) (__const char *__restrict, void *__restrict);
+- int (*gl_stat) (__const char *__restrict, void *__restrict);
++ int (*gl_lstat) (const char *__restrict, void *__restrict);
++ int (*gl_stat) (const char *__restrict, void *__restrict);
+ #endif
+ #endif
+ #endif /* __UCLIBC_HAS_GNU_GLOB__ */
+@@ -143,13 +142,13 @@
+ # else
+ void *(*gl_readdir) (void *);
+ # endif
+- void *(*gl_opendir) (__const char *);
++ void *(*gl_opendir) (const char *);
+ # ifdef __USE_GNU
+- int (*gl_lstat) (__const char *__restrict, struct stat64 *__restrict);
+- int (*gl_stat) (__const char *__restrict, struct stat64 *__restrict);
++ int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict);
++ int (*gl_stat) (const char *__restrict, struct stat64 *__restrict);
+ # else
+- int (*gl_lstat) (__const char *__restrict, void *__restrict);
+- int (*gl_stat) (__const char *__restrict, void *__restrict);
++ int (*gl_lstat) (const char *__restrict, void *__restrict);
++ int (*gl_stat) (const char *__restrict, void *__restrict);
+ # endif
+ #endif
+ #endif /* __UCLIBC_HAS_GNU_GLOB__ */
+@@ -170,8 +169,8 @@
+ If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
+ Otherwise, `glob' returns zero. */
+ #if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2
+-extern int glob (__const char *__restrict __pattern, int __flags,
+- int (*__errfunc) (__const char *, int),
++extern int glob (const char *__restrict __pattern, int __flags,
++ int (*__errfunc) (const char *, int),
+ glob_t *__restrict __pglob) __THROW;
+ libc_hidden_proto(glob)
+
+@@ -179,17 +178,17 @@
+ extern void globfree (glob_t *__pglob) __THROW;
+ libc_hidden_proto(globfree)
+ #else
+-extern int __REDIRECT_NTH (glob, (__const char *__restrict __pattern,
++extern int __REDIRECT_NTH (glob, (const char *__restrict __pattern,
+ int __flags,
+- int (*__errfunc) (__const char *, int),
++ int (*__errfunc) (const char *, int),
+ glob_t *__restrict __pglob), glob64);
+
+ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
+ #endif
+
+ #ifdef __USE_LARGEFILE64
+-extern int glob64 (__const char *__restrict __pattern, int __flags,
+- int (*__errfunc) (__const char *, int),
++extern int glob64 (const char *__restrict __pattern, int __flags,
++ int (*__errfunc) (const char *, int),
+ glob64_t *__restrict __pglob) __THROW;
+ libc_hidden_proto(glob64)
+
+@@ -204,7 +203,7 @@
+
+ This function is not part of the interface specified by POSIX.2
+ but several programs want to use it. */
+-extern int glob_pattern_p (__const char *__pattern, int __quote) __THROW;
++extern int glob_pattern_p (const char *__pattern, int __quote) __THROW;
+ libc_hidden_proto(glob_pattern_p)
+ #endif
+
+diff -Nur uClibc-0.9.33.2/include/gnu-versions.h uClibc-git/include/gnu-versions.h
+--- uClibc-0.9.33.2/include/gnu-versions.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/gnu-versions.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GNU_VERSIONS_H
+ #define _GNU_VERSIONS_H 1
+diff -Nur uClibc-0.9.33.2/include/grp.h uClibc-git/include/grp.h
+--- uClibc-0.9.33.2/include/grp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/grp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 9.2.1 Group Database Access <grp.h>
+@@ -92,7 +91,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int putgrent (__const struct group *__restrict __p,
++extern int putgrent (const struct group *__restrict __p,
+ FILE *__restrict __f);
+ #endif
+
+@@ -106,7 +105,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct group *getgrnam (__const char *__name);
++extern struct group *getgrnam (const char *__name);
+
+ #if defined __USE_POSIX || defined __USE_MISC
+
+@@ -149,7 +148,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int getgrnam_r (__const char *__restrict __name,
++extern int getgrnam_r (const char *__restrict __name,
+ struct group *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct group **__restrict __result);
+@@ -187,7 +186,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int getgrouplist (__const char *__user, __gid_t __group,
++extern int getgrouplist (const char *__user, __gid_t __group,
+ __gid_t *__groups, int *__ngroups);
+
+ #endif
+@@ -195,7 +194,7 @@
+ #if defined __USE_BSD
+
+ /* Set the group set for the current user to GROUPS (N of them). */
+-extern int setgroups (size_t __n, __const __gid_t *__groups) __THROW;
++extern int setgroups (size_t __n, const __gid_t *__groups) __THROW;
+ libc_hidden_proto(setgroups)
+
+ /* Initialize the group set for the current user
+@@ -206,7 +205,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int initgroups (__const char *__user, __gid_t __group);
++extern int initgroups (const char *__user, __gid_t __group);
+
+ #endif /* Use BSD. */
+
+diff -Nur uClibc-0.9.33.2/include/iconv.h uClibc-git/include/iconv.h
+--- uClibc-0.9.33.2/include/iconv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/iconv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ICONV_H
+ #define _ICONV_H 1
+@@ -39,7 +38,7 @@
+
+ This function is a possible cancellation points and therefore not
+ marked with __THROW. */
+-extern iconv_t iconv_open (__const char *__tocode, __const char *__fromcode);
++extern iconv_t iconv_open (const char *__tocode, const char *__fromcode);
+
+ /* Convert at most *INBYTESLEFT bytes from *INBUF according to the
+ code conversion algorithm specified by CD and place up to
+diff -Nur uClibc-0.9.33.2/include/ieee754.h uClibc-git/include/ieee754.h
+--- uClibc-0.9.33.2/include/ieee754.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ieee754.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _IEEE754_H
+
+diff -Nur uClibc-0.9.33.2/include/ifaddrs.h uClibc-git/include/ifaddrs.h
+--- uClibc-0.9.33.2/include/ifaddrs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ifaddrs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _IFADDRS_H
+ #define _IFADDRS_H 1
+diff -Nur uClibc-0.9.33.2/include/inttypes.h uClibc-git/include/inttypes.h
+--- uClibc-0.9.33.2/include/inttypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/inttypes.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99: 7.8 Format conversion of integer types <inttypes.h>
+@@ -304,21 +303,21 @@
+ __THROW __attribute__ ((__const__));
+
+ /* Like `strtol' but convert to `intmax_t'. */
+-extern intmax_t strtoimax (__const char *__restrict __nptr,
++extern intmax_t strtoimax (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base) __THROW;
+
+ /* Like `strtoul' but convert to `uintmax_t'. */
+-extern uintmax_t strtoumax (__const char *__restrict __nptr,
++extern uintmax_t strtoumax (const char *__restrict __nptr,
+ char ** __restrict __endptr, int __base) __THROW;
+
+ #ifdef __UCLIBC_HAS_WCHAR__
+ /* Like `wcstol' but convert to `intmax_t'. */
+-extern intmax_t wcstoimax (__const __gwchar_t *__restrict __nptr,
++extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr,
+ __gwchar_t **__restrict __endptr, int __base)
+ __THROW;
+
+ /* Like `wcstoul' but convert to `uintmax_t'. */
+-extern uintmax_t wcstoumax (__const __gwchar_t *__restrict __nptr,
++extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
+ __gwchar_t ** __restrict __endptr, int __base)
+ __THROW;
+ #endif
+@@ -327,44 +326,44 @@
+
+ # if __WORDSIZE == 64
+
+-extern long int __strtol_internal (__const char *__restrict __nptr,
++extern long int __strtol_internal (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, int __group)
+ __THROW __nonnull ((1)) __wur;
+ /* Like `strtol' but convert to `intmax_t'. */
+ __extern_inline intmax_t
+-__NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr,
++__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr,
+ int base))
+ {
+ return __strtol_internal (nptr, endptr, base, 0);
+ }
+
+-extern unsigned long int __strtoul_internal (__const char *
++extern unsigned long int __strtoul_internal (const char *
+ __restrict __nptr,
+ char ** __restrict __endptr,
+ int __base, int __group)
+ __THROW __nonnull ((1)) __wur;
+ /* Like `strtoul' but convert to `uintmax_t'. */
+ __extern_inline uintmax_t
+-__NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr,
++__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr,
+ int base))
+ {
+ return __strtoul_internal (nptr, endptr, base, 0);
+ }
+
+-extern long int __wcstol_internal (__const __gwchar_t * __restrict __nptr,
++extern long int __wcstol_internal (const __gwchar_t * __restrict __nptr,
+ __gwchar_t **__restrict __endptr,
+ int __base, int __group)
+ __THROW __nonnull ((1)) __wur;
+ /* Like `wcstol' but convert to `intmax_t'. */
+ __extern_inline intmax_t
+-__NTH (wcstoimax (__const __gwchar_t *__restrict nptr,
++__NTH (wcstoimax (const __gwchar_t *__restrict nptr,
+ __gwchar_t **__restrict endptr, int base))
+ {
+ return __wcstol_internal (nptr, endptr, base, 0);
+ }
+
+-extern unsigned long int __wcstoul_internal (__const __gwchar_t *
++extern unsigned long int __wcstoul_internal (const __gwchar_t *
+ __restrict __nptr,
+ __gwchar_t **
+ __restrict __endptr,
+@@ -372,7 +371,7 @@
+ __THROW __nonnull ((1)) __wur;
+ /* Like `wcstoul' but convert to `uintmax_t'. */
+ __extern_inline uintmax_t
+-__NTH (wcstoumax (__const __gwchar_t *__restrict nptr,
++__NTH (wcstoumax (const __gwchar_t *__restrict nptr,
+ __gwchar_t **__restrict endptr, int base))
+ {
+ return __wcstoul_internal (nptr, endptr, base, 0);
+@@ -381,20 +380,20 @@
+ # else /* __WORDSIZE == 32 */
+
+ __extension__
+-extern long long int __strtoll_internal (__const char *__restrict __nptr,
++extern long long int __strtoll_internal (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, int __group)
+ __THROW __nonnull ((1)) __wur;
+ /* Like `strtol' but convert to `intmax_t'. */
+ __extern_inline intmax_t
+-__NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr,
++__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr,
+ int base))
+ {
+ return __strtoll_internal (nptr, endptr, base, 0);
+ }
+
+ __extension__
+-extern unsigned long long int __strtoull_internal (__const char *
++extern unsigned long long int __strtoull_internal (const char *
+ __restrict __nptr,
+ char **
+ __restrict __endptr,
+@@ -403,21 +402,21 @@
+ __THROW __nonnull ((1)) __wur;
+ /* Like `strtoul' but convert to `uintmax_t'. */
+ __extern_inline uintmax_t
+-__NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr,
++__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr,
+ int base))
+ {
+ return __strtoull_internal (nptr, endptr, base, 0);
+ }
+
+ __extension__
+-extern long long int __wcstoll_internal (__const __gwchar_t *
++extern long long int __wcstoll_internal (const __gwchar_t *
+ __restrict __nptr,
+ __gwchar_t **__restrict __endptr,
+ int __base, int __group)
+ __THROW __nonnull ((1)) __wur;
+ /* Like `wcstol' but convert to `intmax_t'. */
+ __extern_inline intmax_t
+-__NTH (wcstoimax (__const __gwchar_t *__restrict nptr,
++__NTH (wcstoimax (const __gwchar_t *__restrict nptr,
+ __gwchar_t **__restrict endptr, int base))
+ {
+ return __wcstoll_internal (nptr, endptr, base, 0);
+@@ -425,7 +424,7 @@
+
+
+ __extension__
+-extern unsigned long long int __wcstoull_internal (__const __gwchar_t *
++extern unsigned long long int __wcstoull_internal (const __gwchar_t *
+ __restrict __nptr,
+ __gwchar_t **
+ __restrict __endptr,
+@@ -434,7 +433,7 @@
+ __THROW __nonnull ((1)) __wur;
+ /* Like `wcstoul' but convert to `uintmax_t'. */
+ __extern_inline uintmax_t
+-__NTH (wcstoumax (__const __gwchar_t *__restrict nptr,
++__NTH (wcstoumax (const __gwchar_t *__restrict nptr,
+ __gwchar_t **__restrict endptr, int base))
+ {
+ return __wcstoull_internal (nptr, endptr, base, 0);
+diff -Nur uClibc-0.9.33.2/include/langinfo.h uClibc-git/include/langinfo.h
+--- uClibc-0.9.33.2/include/langinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/langinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LANGINFO_H
+ #define _LANGINFO_H 1
+diff -Nur uClibc-0.9.33.2/include/libc-internal.h uClibc-git/include/libc-internal.h
+--- uClibc-0.9.33.2/include/libc-internal.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/libc-internal.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LIBC_INTERNAL_H
+ #define _LIBC_INTERNAL_H 1
+@@ -29,6 +28,9 @@
+
+ #ifdef __UCLIBC_HAS_TLS__
+ # define attribute_tls_model_ie __attribute__ ((tls_model ("initial-exec")))
++#else
++# define attribute_tls_model_ie
++# define __thread
+ #endif
+
+ /* Pull in things like __attribute_used__ */
+@@ -44,12 +46,12 @@
+ # include <stddef.h>
+
+ /* sources are built w/ _GNU_SOURCE, this gets undefined */
+-#ifdef __USE_GNU
+-extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen);
+-libc_hidden_proto(__xpg_strerror_r)
+-#else
++#if defined __USE_XOPEN2K && !defined __USE_GNU
+ extern char *__glibc_strerror_r (int __errnum, char *__buf, size_t __buflen);
+ libc_hidden_proto(__glibc_strerror_r)
++#else
++extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen);
++libc_hidden_proto(__xpg_strerror_r)
+ #endif
+
+ /* #include <pthread.h> */
+@@ -70,6 +72,10 @@
+ libc_hidden_proto(__chk_fail)
+ # endif
+
++# ifdef __UCLIBC_HAS_SSP__
++extern void __stack_chk_fail(void) attribute_noreturn __cold;
++# endif
++
+ # endif /* IS_IN_libc */
+
+ #endif /* __ASSEMBLER__ */
+diff -Nur uClibc-0.9.33.2/include/libc-symbols.h uClibc-git/include/libc-symbols.h
+--- uClibc-0.9.33.2/include/libc-symbols.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/libc-symbols.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LIBC_SYMBOLS_H
+ #define _LIBC_SYMBOLS_H 1
+@@ -196,12 +195,12 @@
+ # define _strong_alias_untyped(name, aliasname) \
+ extern __typeof (aliasname) aliasname __attribute__ ((alias (#name)));
+
++# ifdef HAVE_WEAK_SYMBOLS
++
+ /* This comes between the return type and function name in
+ a function definition to make that definition weak. */
+-# define weak_function __attribute__ ((weak))
+-# define weak_const_function __attribute__ ((weak, __const__))
+-
+-# ifdef HAVE_WEAK_SYMBOLS
++# define weak_function __attribute__ ((weak))
++# define weak_const_function __attribute__ ((weak, __const__))
+
+ /* Define ALIASNAME as a weak alias for NAME.
+ If weak aliases are not available, this defines a strong alias. */
+@@ -215,6 +214,9 @@
+
+ # else
+
++# define weak_function /* empty */
++# define weak_const_function __attribute__ ((__const__))
++
+ # define weak_alias(name, aliasname) strong_alias(name, aliasname)
+ # define weak_extern(symbol) /* Nothing. */
+
+diff -Nur uClibc-0.9.33.2/include/libgen.h uClibc-git/include/libgen.h
+--- uClibc-0.9.33.2/include/libgen.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/libgen.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LIBGEN_H
+ #define _LIBGEN_H 1
+diff -Nur uClibc-0.9.33.2/include/libintl.h uClibc-git/include/libintl.h
+--- uClibc-0.9.33.2/include/libintl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/libintl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,15 +14,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LIBINTL_H
+ #define _LIBINTL_H 1
+
+ #include <features.h>
+
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++
+ /* We define an additional symbol to signal that we use the GNU
+ implementation of gettext. */
+ #define __USE_GNU_GETTEXT 1
+@@ -37,46 +38,46 @@
+ /* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+-extern char *gettext (__const char *__msgid)
++extern char *gettext (const char *__msgid)
+ __THROW __attribute_format_arg__ (1);
+
+ /* Look up MSGID in the DOMAINNAME message catalog for the current
+ LC_MESSAGES locale. */
+-extern char *dgettext (__const char *__domainname, __const char *__msgid)
++extern char *dgettext (const char *__domainname, const char *__msgid)
+ __THROW __attribute_format_arg__ (2);
+ #if 0 /* uClibc: disabled */
+-extern char *__dgettext (__const char *__domainname, __const char *__msgid)
++extern char *__dgettext (const char *__domainname, const char *__msgid)
+ __THROW __attribute_format_arg__ (2);
+ #endif
+
+ /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+-extern char *dcgettext (__const char *__domainname,
+- __const char *__msgid, int __category)
++extern char *dcgettext (const char *__domainname,
++ const char *__msgid, int __category)
+ __THROW __attribute_format_arg__ (2);
+ #if 0 /* uClibc: disabled */
+-extern char *__dcgettext (__const char *__domainname,
+- __const char *__msgid, int __category)
++extern char *__dcgettext (const char *__domainname,
++ const char *__msgid, int __category)
+ __THROW __attribute_format_arg__ (2);
+ #endif
+
+
+ /* Similar to `gettext' but select the plural form corresponding to the
+ number N. */
+-extern char *ngettext (__const char *__msgid1, __const char *__msgid2,
++extern char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+ __THROW __attribute_format_arg__ (1) __attribute_format_arg__ (2);
+
+ /* Similar to `dgettext' but select the plural form corresponding to the
+ number N. */
+-extern char *dngettext (__const char *__domainname, __const char *__msgid1,
+- __const char *__msgid2, unsigned long int __n)
++extern char *dngettext (const char *__domainname, const char *__msgid1,
++ const char *__msgid2, unsigned long int __n)
+ __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3);
+
+ /* Similar to `dcgettext' but select the plural form corresponding to the
+ number N. */
+-extern char *dcngettext (__const char *__domainname, __const char *__msgid1,
+- __const char *__msgid2, unsigned long int __n,
++extern char *dcngettext (const char *__domainname, const char *__msgid1,
++ const char *__msgid2, unsigned long int __n,
+ int __category)
+ __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3);
+
+@@ -84,17 +85,17 @@
+ /* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+-extern char *textdomain (__const char *__domainname) __THROW;
++extern char *textdomain (const char *__domainname) __THROW;
+
+ /* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+-extern char *bindtextdomain (__const char *__domainname,
+- __const char *__dirname) __THROW;
++extern char *bindtextdomain (const char *__domainname,
++ const char *__dirname) __THROW;
+
+ /* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+-extern char *bind_textdomain_codeset (__const char *__domainname,
+- __const char *__codeset) __THROW;
++extern char *bind_textdomain_codeset (const char *__domainname,
++ const char *__codeset) __THROW;
+
+
+ /* Optimized version of the function above. */
+@@ -125,4 +126,15 @@
+
+ __END_DECLS
+
++#else
++
++#define gettext(msgid) ((const char *) (msgid))
++
++#endif /* __UCLIBC_HAS_GETTEXT_AWARENESS__ */
++
++#ifdef _LIBC
++# define _(x) gettext(x)
++# define N_(x) x
++#endif
++
+ #endif /* libintl.h */
+diff -Nur uClibc-0.9.33.2/include/limits.h uClibc-git/include/limits.h
+--- uClibc-0.9.33.2/include/limits.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/limits.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types <limits.h>
+diff -Nur uClibc-0.9.33.2/include/link.h uClibc-git/include/link.h
+--- uClibc-0.9.33.2/include/link.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/link.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINK_H
+ #define _LINK_H 1
+@@ -110,7 +109,7 @@
+ char *l_name; /* Absolute file name object was found in. */
+ ElfW(Dyn) *l_ld; /* Dynamic section of the shared object. */
+ struct link_map *l_next, *l_prev; /* Chain of loaded objects. */
+-
++#ifdef _LIBC
+ #if defined(USE_TLS) && USE_TLS
+ /* Thread-local storage related info. */
+
+@@ -134,6 +133,7 @@
+ /* Nonzero if _dl_init_static_tls should be called for this module */
+ unsigned int l_need_tls_init:1;
+ #endif
++#endif
+ };
+
+ #ifdef __USE_GNU
+diff -Nur uClibc-0.9.33.2/include/locale.h uClibc-git/include/locale.h
+--- uClibc-0.9.33.2/include/locale.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/locale.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.11 Localization <locale.h>
+@@ -124,7 +123,7 @@
+
+
+ /* Set and/or return the current locale. */
+-extern char *setlocale (int __category, __const char *__locale) __THROW;
++extern char *setlocale (int __category, const char *__locale) __THROW;
+
+ /* Return the numeric/monetary information for the current locale. */
+ extern struct lconv *localeconv (void) __THROW;
+@@ -133,7 +132,7 @@
+ __END_NAMESPACE_STD
+
+
+-#if defined __USE_XOPEN2K8 && defined __UCLIBC_HAS_LOCALE__
++#if defined __USE_XOPEN2K8 && defined __UCLIBC_HAS_XLOCALE__
+ /* The concept of one static locale per category is not very well
+ thought out. Many applications will need to process its data using
+ information from several different locales. Another application is
+@@ -145,19 +144,14 @@
+ Attention: all these functions are *not* standardized in any form.
+ This is a proof-of-concept implementation. */
+
+-#ifdef __UCLIBC_HAS_XLOCALE__
+ /* Get locale datatype definition. */
+ # include <xlocale.h>
+-#endif
+-
+-/* POSIX 2008 makes locale_t official. */
+-typedef __locale_t locale_t;
+
+ /* Return a reference to a data structure representing a set of locale
+ datasets. Unlike for the CATEGORY parameter for `setlocale' the
+ CATEGORY_MASK parameter here uses a single bit for each category,
+ made by OR'ing together LC_*_MASK bits above. */
+-extern __locale_t newlocale (int __category_mask, __const char *__locale,
++extern __locale_t newlocale (int __category_mask, const char *__locale,
+ __locale_t __base) __THROW;
+ libc_hidden_proto(newlocale)
+
+diff -Nur uClibc-0.9.33.2/include/malloc.h uClibc-git/include/malloc.h
+--- uClibc-0.9.33.2/include/malloc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/malloc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MALLOC_H
+ #define _MALLOC_H 1
+@@ -124,9 +123,12 @@
+
+ /* Allocate SIZE bytes allocated to ALIGNMENT bytes. */
+ extern __malloc_ptr_t memalign __MALLOC_P ((size_t __alignment, size_t __size));
++libc_hidden_proto(memalign)
+
++#ifdef __UCLIBC_SUSV2_LEGACY__
+ /* Allocate SIZE bytes on a page boundary. */
+ extern __malloc_ptr_t valloc __MALLOC_P ((size_t __size)) __attribute_malloc__;
++#endif
+
+ #ifdef __MALLOC_STANDARD__
+
+diff -Nur uClibc-0.9.33.2/include/math.h uClibc-git/include/math.h
+--- uClibc-0.9.33.2/include/math.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/math.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.12 Mathematics <math.h>
+diff -Nur uClibc-0.9.33.2/include/memory.h uClibc-git/include/memory.h
+--- uClibc-0.9.33.2/include/memory.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/memory.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * SVID
+diff -Nur uClibc-0.9.33.2/include/mntent.h uClibc-git/include/mntent.h
+--- uClibc-0.9.33.2/include/mntent.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/mntent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MNTENT_H
+ #define _MNTENT_H 1
+@@ -64,7 +63,7 @@
+
+ /* Prepare to begin reading and/or writing mount table entries from the
+ beginning of FILE. MODE is as for `fopen'. */
+-extern FILE *setmntent (__const char *__file, __const char *__mode) __THROW;
++extern FILE *setmntent (const char *__file, const char *__mode) __THROW;
+ libc_hidden_proto(setmntent)
+
+ /* Read one mount table entry from STREAM. Returns a pointer to storage
+@@ -84,7 +83,7 @@
+ /* Write the mount table entry described by MNT to STREAM.
+ Return zero on success, nonzero on failure. */
+ extern int addmntent (FILE *__restrict __stream,
+- __const struct mntent *__restrict __mnt) __THROW;
++ const struct mntent *__restrict __mnt) __THROW;
+
+ /* Close a stream opened with `setmntent'. */
+ extern int endmntent (FILE *__stream) __THROW;
+@@ -92,8 +91,8 @@
+
+ /* Search MNT->mnt_opts for an option matching OPT.
+ Returns the address of the substring, or null if none found. */
+-extern char *hasmntopt (__const struct mntent *__mnt,
+- __const char *__opt) __THROW;
++extern char *hasmntopt (const struct mntent *__mnt,
++ const char *__opt) __THROW;
+
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/mqueue.h uClibc-git/include/mqueue.h
+--- uClibc-0.9.33.2/include/mqueue.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/mqueue.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MQUEUE_H
+ #define _MQUEUE_H 1
+diff -Nur uClibc-0.9.33.2/include/net/ethernet.h uClibc-git/include/net/ethernet.h
+--- uClibc-0.9.33.2/include/net/ethernet.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/ethernet.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Based on the FreeBSD version of this file. Curiously, that file
+ lacks a copyright in the header. */
+diff -Nur uClibc-0.9.33.2/include/net/if_arp.h uClibc-git/include/net/if_arp.h
+--- uClibc-0.9.33.2/include/net/if_arp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/if_arp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Based on the 4.4BSD and Linux version of this file. */
+
+diff -Nur uClibc-0.9.33.2/include/net/if.h uClibc-git/include/net/if.h
+--- uClibc-0.9.33.2/include/net/if.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/if.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NET_IF_H
+ #define _NET_IF_H 1
+@@ -191,7 +190,7 @@
+ __BEGIN_DECLS
+
+ /* Convert an interface name to an index, and vice versa. */
+-extern unsigned int if_nametoindex (__const char *__ifname) __THROW;
++extern unsigned int if_nametoindex (const char *__ifname) __THROW;
+ libc_hidden_proto(if_nametoindex)
+ extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW;
+
+diff -Nur uClibc-0.9.33.2/include/net/if_packet.h uClibc-git/include/net/if_packet.h
+--- uClibc-0.9.33.2/include/net/if_packet.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/if_packet.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __IF_PACKET_H
+ #define __IF_PACKET_H
+diff -Nur uClibc-0.9.33.2/include/net/if_shaper.h uClibc-git/include/net/if_shaper.h
+--- uClibc-0.9.33.2/include/net/if_shaper.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/if_shaper.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NET_IF_SHAPER_H
+ #define _NET_IF_SHAPER_H 1
+diff -Nur uClibc-0.9.33.2/include/net/if_slip.h uClibc-git/include/net/if_slip.h
+--- uClibc-0.9.33.2/include/net/if_slip.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/if_slip.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NET_IF_SLIP_H
+ #define _NET_IF_SLIP_H 1
+diff -Nur uClibc-0.9.33.2/include/net/route.h uClibc-git/include/net/route.h
+--- uClibc-0.9.33.2/include/net/route.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/net/route.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Based on the 4.4BSD and Linux version of this file. */
+
+diff -Nur uClibc-0.9.33.2/include/netax25/ax25.h uClibc-git/include/netax25/ax25.h
+--- uClibc-0.9.33.2/include/netax25/ax25.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netax25/ax25.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETAX25_AX25_H
+ #define _NETAX25_AX25_H 1
+diff -Nur uClibc-0.9.33.2/include/netdb.h uClibc-git/include/netdb.h
+--- uClibc-0.9.33.2/include/netdb.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netdb.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc.
++/* Copyright (C) 1996-2002, 2003, 2004, 2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* All data returned by the network data base library are supplied in
+ host order and returned in network order (suitable for use in
+@@ -59,6 +58,11 @@
+
+ /* Function to get address of global `h_errno' variable. */
+ extern int *__h_errno_location (void) __THROW __attribute__ ((__const__));
++#ifdef _LIBC
++# if !defined(__UCLIBC_HAS_TLS__) && !defined(__UCLIBC_HAS_THREADS__)
++extern int weak_const_function *__h_errno_location(void);
++# endif
++#endif
+ libc_hidden_proto(__h_errno_location)
+
+ /* Macros for accessing h_errno from inside libc. */
+@@ -88,8 +92,6 @@
+ #endif /* _LIBC */
+
+ /* Possible values left in `h_errno'. */
+-#define NETDB_INTERNAL -1 /* See errno. */
+-#define NETDB_SUCCESS 0 /* No problem. */
+ #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found. */
+ #define TRY_AGAIN 2 /* Non-Authoritative Host not found,
+ or SERVERFAIL. */
+@@ -97,7 +99,11 @@
+ NOTIMP. */
+ #define NO_DATA 4 /* Valid name, no data record of requested
+ type. */
+-#define NO_ADDRESS NO_DATA /* No address, look for MX record. */
++#if defined __USE_MISC || defined __USE_GNU
++# define NETDB_INTERNAL -1 /* See errno. */
++# define NETDB_SUCCESS 0 /* No problem. */
++# define NO_ADDRESS NO_DATA /* No address, look for MX record. */
++#endif
+
+ #ifdef __USE_XOPEN2K
+ /* Highest reserved Internet port number. */
+@@ -109,13 +115,15 @@
+ # define SCOPE_DELIMITER '%'
+ #endif
+
++#if defined __USE_MISC || defined __USE_GNU
+ /* Print error indicated by `h_errno' variable on standard error. STR
+ if non-null is printed before the error string. */
+-extern void herror (__const char *__str) __THROW;
++extern void herror (const char *__str) __THROW;
+ libc_hidden_proto(herror)
+
+ /* Return string associated with error ERR_NUM. */
+-extern __const char *hstrerror (int __err_num) __THROW;
++extern const char *hstrerror (int __err_num) __THROW;
++#endif
+
+
+ /* Description of data base entry for a single host. */
+@@ -126,7 +134,9 @@
+ int h_addrtype; /* Host address type. */
+ int h_length; /* Length of address. */
+ char **h_addr_list; /* List of addresses from name server. */
+-#define h_addr h_addr_list[0] /* Address, for backward compatibility. */
++#if defined __USE_MISC || defined __USE_GNU
++# define h_addr h_addr_list[0] /* Address, for backward compatibility.*/
++#endif
+ };
+
+ /* Open host data base files and mark them as staying open even after
+@@ -154,7 +164,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct hostent *gethostbyaddr (__const void *__addr, __socklen_t __len,
++extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
+ int __type);
+ libc_hidden_proto(gethostbyaddr)
+
+@@ -162,7 +172,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct hostent *gethostbyname (__const char *__name);
++extern struct hostent *gethostbyname (const char *__name);
+ libc_hidden_proto(gethostbyname)
+
+ #ifdef __USE_MISC
+@@ -174,7 +184,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern struct hostent *gethostbyname2 (__const char *__name, int __af);
++extern struct hostent *gethostbyname2 (const char *__name, int __af);
+ libc_hidden_proto(gethostbyname2)
+
+ /* Reentrant versions of the functions above. The additional
+@@ -193,7 +203,7 @@
+ int *__restrict __h_errnop);
+ libc_hidden_proto(gethostent_r)
+
+-extern int gethostbyaddr_r (__const void *__restrict __addr, __socklen_t __len,
++extern int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
+ int __type,
+ struct hostent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+@@ -201,14 +211,14 @@
+ int *__restrict __h_errnop);
+ libc_hidden_proto(gethostbyaddr_r)
+
+-extern int gethostbyname_r (__const char *__restrict __name,
++extern int gethostbyname_r (const char *__restrict __name,
+ struct hostent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct hostent **__restrict __result,
+ int *__restrict __h_errnop);
+ libc_hidden_proto(gethostbyname_r)
+
+-extern int gethostbyname2_r (__const char *__restrict __name, int __af,
++extern int gethostbyname2_r (const char *__restrict __name, int __af,
+ struct hostent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct hostent **__restrict __result,
+@@ -250,7 +260,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct netent *getnetbyname (__const char *__name);
++extern struct netent *getnetbyname (const char *__name);
+
+ #ifdef __USE_MISC
+ /* Reentrant versions of the functions above. The additional
+@@ -268,13 +278,15 @@
+ struct netent **__restrict __result,
+ int *__restrict __h_errnop);
+ libc_hidden_proto(getnetent_r)
++
+ extern int getnetbyaddr_r (uint32_t __net, int __type,
+ struct netent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct netent **__restrict __result,
+ int *__restrict __h_errnop);
+ libc_hidden_proto(getnetbyaddr_r)
+-extern int getnetbyname_r (__const char *__restrict __name,
++
++extern int getnetbyname_r (const char *__restrict __name,
+ struct netent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct netent **__restrict __result,
+@@ -319,15 +331,15 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct servent *getservbyname (__const char *__name,
+- __const char *__proto);
++extern struct servent *getservbyname (const char *__name,
++ const char *__proto);
+
+ /* Return entry from service data base which matches port PORT and
+ protocol PROTO.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct servent *getservbyport (int __port, __const char *__proto);
++extern struct servent *getservbyport (int __port, const char *__proto);
+ libc_hidden_proto(getservbyport)
+
+
+@@ -344,14 +356,14 @@
+ struct servent **__restrict __result);
+ libc_hidden_proto(getservent_r)
+
+-extern int getservbyname_r (__const char *__restrict __name,
+- __const char *__restrict __proto,
++extern int getservbyname_r (const char *__restrict __name,
++ const char *__restrict __proto,
+ struct servent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct servent **__restrict __result);
+ libc_hidden_proto(getservbyname_r)
+
+-extern int getservbyport_r (int __port, __const char *__restrict __proto,
++extern int getservbyport_r (int __port, const char *__restrict __proto,
+ struct servent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct servent **__restrict __result);
+@@ -393,7 +405,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct protoent *getprotobyname (__const char *__name);
++extern struct protoent *getprotobyname (const char *__name);
+
+ /* Return entry from protocol data base which number is PROTO.
+
+@@ -415,7 +427,7 @@
+ struct protoent **__restrict __result);
+ libc_hidden_proto(getprotoent_r)
+
+-extern int getprotobyname_r (__const char *__restrict __name,
++extern int getprotobyname_r (const char *__restrict __name,
+ struct protoent *__restrict __result_buf,
+ char *__restrict __buf, size_t __buflen,
+ struct protoent **__restrict __result);
+@@ -435,7 +447,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int setnetgrent (__const char *__netgroup);
++extern int setnetgrent (const char *__netgroup);
+
+ /* Free all space allocated by previous `setnetgrent' call.
+
+@@ -463,8 +475,8 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int innetgr (__const char *__netgroup, __const char *__host,
+- __const char *__user, __const char *domain);
++extern int innetgr (const char *__netgroup, const char *__host,
++ const char *__user, const char *__domain);
+
+ /* Reentrant version of `getnetgrent' where result is placed in BUFFER.
+
+@@ -479,12 +491,12 @@
+ #endif /* UCLIBC_HAS_NETGROUP */
+ #endif /* misc */
+
+-
++#ifdef __UCLIBC__
+ /* ruserpass - remote password check.
+ This function also exists in glibc but is undocumented */
+ extern int ruserpass(const char *host, const char **aname, const char **apass);
+ libc_hidden_proto(ruserpass)
+-
++#endif
+
+ #ifdef __USE_BSD
+ /* Call `rshd' at port RPORT on remote machine *AHOST to execute CMD.
+@@ -499,9 +511,9 @@
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+ extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
+- __const char *__restrict __locuser,
+- __const char *__restrict __remuser,
+- __const char *__restrict __cmd, int *__restrict __fd2p);
++ const char *__restrict __locuser,
++ const char *__restrict __remuser,
++ const char *__restrict __cmd, int *__restrict __fd2p);
+
+ #if 0
+ /* FIXME */
+@@ -513,9 +525,9 @@
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+ extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
+- __const char *__restrict __locuser,
+- __const char *__restrict __remuser,
+- __const char *__restrict __cmd, int *__restrict __fd2p,
++ const char *__restrict __locuser,
++ const char *__restrict __remuser,
++ const char *__restrict __cmd, int *__restrict __fd2p,
+ sa_family_t __af);
+ #endif
+
+@@ -530,9 +542,9 @@
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+ extern int rexec (char **__restrict __ahost, int __rport,
+- __const char *__restrict __name,
+- __const char *__restrict __pass,
+- __const char *__restrict __cmd, int *__restrict __fd2p);
++ const char *__restrict __name,
++ const char *__restrict __pass,
++ const char *__restrict __cmd, int *__restrict __fd2p);
+
+ /* This is the equivalent function where the protocol can be selected
+ and which therefore can be used for IPv6.
+@@ -542,9 +554,9 @@
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+ extern int rexec_af (char **__restrict __ahost, int __rport,
+- __const char *__restrict __name,
+- __const char *__restrict __pass,
+- __const char *__restrict __cmd, int *__restrict __fd2p,
++ const char *__restrict __name,
++ const char *__restrict __pass,
++ const char *__restrict __cmd, int *__restrict __fd2p,
+ sa_family_t __af);
+ libc_hidden_proto(rexec_af)
+
+@@ -556,8 +568,8 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int ruserok (__const char *__rhost, int __suser,
+- __const char *__remuser, __const char *__locuser);
++extern int ruserok (const char *__rhost, int __suser,
++ const char *__remuser, const char *__locuser);
+
+ #if 0
+ /* FIXME */
+@@ -568,8 +580,8 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int ruserok_af (__const char *__rhost, int __suser,
+- __const char *__remuser, __const char *__locuser,
++extern int ruserok_af (const char *__rhost, int __suser,
++ const char *__remuser, const char *__locuser,
+ sa_family_t __af);
+ #endif
+
+@@ -638,15 +650,15 @@
+ # define EAI_NONAME -2 /* NAME or SERVICE is unknown. */
+ # define EAI_AGAIN -3 /* Temporary failure in name resolution. */
+ # define EAI_FAIL -4 /* Non-recoverable failure in name res. */
+-# define EAI_NODATA -5 /* No address associated with NAME. */
+ # define EAI_FAMILY -6 /* `ai_family' not supported. */
+ # define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */
+ # define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */
+-# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
+ # define EAI_MEMORY -10 /* Memory allocation failure. */
+ # define EAI_SYSTEM -11 /* System error returned in `errno'. */
+ # define EAI_OVERFLOW -12 /* Argument buffer overflow. */
+ # ifdef __USE_GNU
++# define EAI_NODATA -5 /* No address associated with NAME. */
++# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
+ # define EAI_INPROGRESS -100 /* Processing request in progress. */
+ # define EAI_CANCELED -101 /* Request canceled. */
+ # define EAI_NOTCANCELED -102 /* Request not canceled. */
+@@ -655,8 +667,10 @@
+ # define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
+ # endif
+
+-# define NI_MAXHOST 1025
+-# define NI_MAXSERV 32
++# ifdef __USE_MISC
++# define NI_MAXHOST 1025
++# define NI_MAXSERV 32
++# endif
+
+ # define NI_NUMERICHOST 1 /* Don't try to look up hostname. */
+ # define NI_NUMERICSERV 2 /* Don't convert port number to name. */
+@@ -676,9 +690,9 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int getaddrinfo (__const char *__restrict __name,
+- __const char *__restrict __service,
+- __const struct addrinfo *__restrict __req,
++extern int getaddrinfo (const char *__restrict __name,
++ const char *__restrict __service,
++ const struct addrinfo *__restrict __req,
+ struct addrinfo **__restrict __pai);
+ libc_hidden_proto(getaddrinfo)
+
+@@ -687,13 +701,13 @@
+ libc_hidden_proto(freeaddrinfo)
+
+ /* Convert error return from getaddrinfo() to a string. */
+-extern __const char *gai_strerror (int __ecode) __THROW;
++extern const char *gai_strerror (int __ecode) __THROW;
+
+ /* Translate a socket address to a location and service name.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int getnameinfo (__const struct sockaddr *__restrict __sa,
++extern int getnameinfo (const struct sockaddr *__restrict __sa,
+ socklen_t __salen, char *__restrict __host,
+ socklen_t __hostlen, char *__restrict __serv,
+ socklen_t __servlen, unsigned int __flags);
+diff -Nur uClibc-0.9.33.2/include/neteconet/ec.h uClibc-git/include/neteconet/ec.h
+--- uClibc-0.9.33.2/include/neteconet/ec.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/neteconet/ec.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETECONET_EC_H
+ #define _NETECONET_EC_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/ether.h uClibc-git/include/netinet/ether.h
+--- uClibc-0.9.33.2/include/netinet/ether.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/ether.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_ETHER_H
+ #define _NETINET_ETHER_H 1
+@@ -34,27 +33,27 @@
+ #if defined __UCLIBC_HAS_SOCKET__ || defined __UCLIBC_HAS_IPV4__ || \
+ defined __UCLIBC_HAS_IPV6__
+ /* Convert 48 bit Ethernet ADDRess to ASCII. */
+-extern char *ether_ntoa (__const struct ether_addr *__addr) __THROW;
+-extern char *ether_ntoa_r (__const struct ether_addr *__addr, char *__buf)
++extern char *ether_ntoa (const struct ether_addr *__addr) __THROW;
++extern char *ether_ntoa_r (const struct ether_addr *__addr, char *__buf)
+ __THROW;
+ libc_hidden_proto(ether_ntoa_r)
+
+ /* Convert ASCII string S to 48 bit Ethernet address. */
+-extern struct ether_addr *ether_aton (__const char *__asc) __THROW;
+-extern struct ether_addr *ether_aton_r (__const char *__asc,
++extern struct ether_addr *ether_aton (const char *__asc) __THROW;
++extern struct ether_addr *ether_aton_r (const char *__asc,
+ struct ether_addr *__addr) __THROW;
+ libc_hidden_proto(ether_aton_r)
+
+ /* Map 48 bit Ethernet number ADDR to HOSTNAME. */
+-extern int ether_ntohost (char *__hostname, __const struct ether_addr *__addr)
++extern int ether_ntohost (char *__hostname, const struct ether_addr *__addr)
+ __THROW;
+
+ /* Map HOSTNAME to 48 bit Ethernet address. */
+-extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr)
++extern int ether_hostton (const char *__hostname, struct ether_addr *__addr)
+ __THROW;
+
+ /* Scan LINE and set ADDR and HOSTNAME. */
+-extern int ether_line (__const char *__line, struct ether_addr *__addr,
++extern int ether_line (const char *__line, struct ether_addr *__addr,
+ char *__hostname) __THROW;
+ #endif
+
+diff -Nur uClibc-0.9.33.2/include/netinet/icmp6.h uClibc-git/include/netinet/icmp6.h
+--- uClibc-0.9.33.2/include/netinet/icmp6.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/icmp6.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_ICMP6_H
+ #define _NETINET_ICMP6_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/if_ether.h uClibc-git/include/netinet/if_ether.h
+--- uClibc-0.9.33.2/include/netinet/if_ether.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/if_ether.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __NETINET_IF_ETHER_H
+
+diff -Nur uClibc-0.9.33.2/include/netinet/if_fddi.h uClibc-git/include/netinet/if_fddi.h
+--- uClibc-0.9.33.2/include/netinet/if_fddi.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/if_fddi.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_IF_FDDI_H
+ #define _NETINET_IF_FDDI_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/if_tr.h uClibc-git/include/netinet/if_tr.h
+--- uClibc-0.9.33.2/include/netinet/if_tr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/if_tr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_IF_TR_H
+ #define _NETINET_IF_TR_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/igmp.h uClibc-git/include/netinet/igmp.h
+--- uClibc-0.9.33.2/include/netinet/igmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/igmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_IGMP_H
+ #define _NETINET_IGMP_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/in.h uClibc-git/include/netinet/in.h
+--- uClibc-0.9.33.2/include/netinet/in.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/in.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_IN_H
+ #define _NETINET_IN_H 1
+@@ -415,43 +414,43 @@
+
+ #if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__
+ #define IN6_IS_ADDR_UNSPECIFIED(a) \
+- (((__const uint32_t *) (a))[0] == 0 \
+- && ((__const uint32_t *) (a))[1] == 0 \
+- && ((__const uint32_t *) (a))[2] == 0 \
+- && ((__const uint32_t *) (a))[3] == 0)
++ (((const uint32_t *) (a))[0] == 0 \
++ && ((const uint32_t *) (a))[1] == 0 \
++ && ((const uint32_t *) (a))[2] == 0 \
++ && ((const uint32_t *) (a))[3] == 0)
+
+ #define IN6_IS_ADDR_LOOPBACK(a) \
+- (((__const uint32_t *) (a))[0] == 0 \
+- && ((__const uint32_t *) (a))[1] == 0 \
+- && ((__const uint32_t *) (a))[2] == 0 \
+- && ((__const uint32_t *) (a))[3] == htonl (1))
++ (((const uint32_t *) (a))[0] == 0 \
++ && ((const uint32_t *) (a))[1] == 0 \
++ && ((const uint32_t *) (a))[2] == 0 \
++ && ((const uint32_t *) (a))[3] == htonl (1))
+
+-#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff)
++#define IN6_IS_ADDR_MULTICAST(a) (((const uint8_t *) (a))[0] == 0xff)
+
+ #define IN6_IS_ADDR_LINKLOCAL(a) \
+- ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \
++ ((((const uint32_t *) (a))[0] & htonl (0xffc00000)) \
+ == htonl (0xfe800000))
+
+ #define IN6_IS_ADDR_SITELOCAL(a) \
+- ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \
++ ((((const uint32_t *) (a))[0] & htonl (0xffc00000)) \
+ == htonl (0xfec00000))
+
+ #define IN6_IS_ADDR_V4MAPPED(a) \
+- ((((__const uint32_t *) (a))[0] == 0) \
+- && (((__const uint32_t *) (a))[1] == 0) \
+- && (((__const uint32_t *) (a))[2] == htonl (0xffff)))
++ ((((const uint32_t *) (a))[0] == 0) \
++ && (((const uint32_t *) (a))[1] == 0) \
++ && (((const uint32_t *) (a))[2] == htonl (0xffff)))
+
+ #define IN6_IS_ADDR_V4COMPAT(a) \
+- ((((__const uint32_t *) (a))[0] == 0) \
+- && (((__const uint32_t *) (a))[1] == 0) \
+- && (((__const uint32_t *) (a))[2] == 0) \
+- && (ntohl (((__const uint32_t *) (a))[3]) > 1))
++ ((((const uint32_t *) (a))[0] == 0) \
++ && (((const uint32_t *) (a))[1] == 0) \
++ && (((const uint32_t *) (a))[2] == 0) \
++ && (ntohl (((const uint32_t *) (a))[3]) > 1))
+
+ #define IN6_ARE_ADDR_EQUAL(a,b) \
+- ((((__const uint32_t *) (a))[0] == ((__const uint32_t *) (b))[0]) \
+- && (((__const uint32_t *) (a))[1] == ((__const uint32_t *) (b))[1]) \
+- && (((__const uint32_t *) (a))[2] == ((__const uint32_t *) (b))[2]) \
+- && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3]))
++ ((((const uint32_t *) (a))[0] == ((const uint32_t *) (b))[0]) \
++ && (((const uint32_t *) (a))[1] == ((const uint32_t *) (b))[1]) \
++ && (((const uint32_t *) (a))[2] == ((const uint32_t *) (b))[2]) \
++ && (((const uint32_t *) (a))[3] == ((const uint32_t *) (b))[3]))
+ #endif
+
+ #if defined __USE_MISC || defined __USE_GNU
+@@ -470,23 +469,23 @@
+ #if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__
+ #define IN6_IS_ADDR_MC_NODELOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) \
+- && ((((__const uint8_t *) (a))[1] & 0xf) == 0x1))
++ && ((((const uint8_t *) (a))[1] & 0xf) == 0x1))
+
+ #define IN6_IS_ADDR_MC_LINKLOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) \
+- && ((((__const uint8_t *) (a))[1] & 0xf) == 0x2))
++ && ((((const uint8_t *) (a))[1] & 0xf) == 0x2))
+
+ #define IN6_IS_ADDR_MC_SITELOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) \
+- && ((((__const uint8_t *) (a))[1] & 0xf) == 0x5))
++ && ((((const uint8_t *) (a))[1] & 0xf) == 0x5))
+
+ #define IN6_IS_ADDR_MC_ORGLOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) \
+- && ((((__const uint8_t *) (a))[1] & 0xf) == 0x8))
++ && ((((const uint8_t *) (a))[1] & 0xf) == 0x8))
+
+ #define IN6_IS_ADDR_MC_GLOBAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) \
+- && ((((__const uint8_t *) (a))[1] & 0xf) == 0xe))
++ && ((((const uint8_t *) (a))[1] & 0xf) == 0xe))
+ #endif
+
+
+@@ -514,15 +513,15 @@
+ extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp,
+ int __type) __THROW __attribute_deprecated__;
+ extern int inet6_option_append (struct cmsghdr *__cmsg,
+- __const uint8_t *__typep, int __multx,
++ const uint8_t *__typep, int __multx,
+ int __plusy) __THROW __attribute_deprecated__;
+ extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen,
+ int __multx, int __plusy)
+ __THROW __attribute_deprecated__;
+-extern int inet6_option_next (__const struct cmsghdr *__cmsg,
++extern int inet6_option_next (const struct cmsghdr *__cmsg,
+ uint8_t **__tptrp)
+ __THROW __attribute_deprecated__;
+-extern int inet6_option_find (__const struct cmsghdr *__cmsg,
++extern int inet6_option_find (const struct cmsghdr *__cmsg,
+ uint8_t **__tptrp, int __type)
+ __THROW __attribute_deprecated__;
+
+@@ -550,10 +549,10 @@
+ extern socklen_t inet6_rth_space (int __type, int __segments) __THROW;
+ extern void *inet6_rth_init (void *__bp, socklen_t __bp_len, int __type,
+ int __segments) __THROW;
+-extern int inet6_rth_add (void *__bp, __const struct in6_addr *__addr) __THROW;
+-extern int inet6_rth_reverse (__const void *__in, void *__out) __THROW;
+-extern int inet6_rth_segments (__const void *__bp) __THROW;
+-extern struct in6_addr *inet6_rth_getaddr (__const void *__bp, int __index)
++extern int inet6_rth_add (void *__bp, const struct in6_addr *__addr) __THROW;
++extern int inet6_rth_reverse (const void *__in, void *__out) __THROW;
++extern int inet6_rth_segments (const void *__bp) __THROW;
++extern struct in6_addr *inet6_rth_getaddr (const void *__bp, int __index)
+ __THROW;
+ # endif
+ # endif
+@@ -572,23 +571,23 @@
+ extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
+ struct in_addr __group, uint32_t __fmode,
+ uint32_t __numsrc,
+- __const struct in_addr *__slist)
++ const struct in_addr *__slist)
+ __THROW;
+
+
+ /* Get source filter. */
+ extern int getsourcefilter (int __s, uint32_t __interface_addr,
+- __const struct sockaddr *__group,
++ const struct sockaddr *__group,
+ socklen_t __grouplen, uint32_t *__fmode,
+ uint32_t *__numsrc,
+ struct sockaddr_storage *__slist) __THROW;
+
+ /* Set source filter. */
+ extern int setsourcefilter (int __s, uint32_t __interface_addr,
+- __const struct sockaddr *__group,
++ const struct sockaddr *__group,
+ socklen_t __grouplen, uint32_t __fmode,
+ uint32_t __numsrc,
+- __const struct sockaddr_storage *__slist) __THROW;
++ const struct sockaddr_storage *__slist) __THROW;
+ # endif
+ #endif /* use GNU */
+
+diff -Nur uClibc-0.9.33.2/include/netinet/in_systm.h uClibc-git/include/netinet/in_systm.h
+--- uClibc-0.9.33.2/include/netinet/in_systm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/in_systm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_IN_SYSTM_H
+ #define _NETINET_IN_SYSTM_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/ip6.h uClibc-git/include/netinet/ip6.h
+--- uClibc-0.9.33.2/include/netinet/ip6.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/ip6.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETINET_IP6_H
+ #define _NETINET_IP6_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/ip.h uClibc-git/include/netinet/ip.h
+--- uClibc-0.9.33.2/include/netinet/ip.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/ip.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __NETINET_IP_H
+ #define __NETINET_IP_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/ip_icmp.h uClibc-git/include/netinet/ip_icmp.h
+--- uClibc-0.9.33.2/include/netinet/ip_icmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/ip_icmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __NETINET_IP_ICMP_H
+ #define __NETINET_IP_ICMP_H 1
+diff -Nur uClibc-0.9.33.2/include/netinet/udp.h uClibc-git/include/netinet/udp.h
+--- uClibc-0.9.33.2/include/netinet/udp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netinet/udp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Copyright (C) 1982, 1986 Regents of the University of California.
+diff -Nur uClibc-0.9.33.2/include/netipx/ipx.h uClibc-git/include/netipx/ipx.h
+--- uClibc-0.9.33.2/include/netipx/ipx.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netipx/ipx.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __NETIPX_IPX_H
+ #define __NETIPX_IPX_H 1
+diff -Nur uClibc-0.9.33.2/include/netpacket/packet.h uClibc-git/include/netpacket/packet.h
+--- uClibc-0.9.33.2/include/netpacket/packet.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/netpacket/packet.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __NETPACKET_PACKET_H
+ #define __NETPACKET_PACKET_H 1
+diff -Nur uClibc-0.9.33.2/include/nl_types.h uClibc-git/include/nl_types.h
+--- uClibc-0.9.33.2/include/nl_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/nl_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NL_TYPES_H
+ #define _NL_TYPES_H 1
+@@ -49,12 +48,12 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern nl_catd catopen (__const char *__cat_name, int __flag) __nonnull ((1));
++extern nl_catd catopen (const char *__cat_name, int __flag) __nonnull ((1));
+
+ /* Return translation with NUMBER in SET of CATALOG; if not found
+ return STRING. */
+ extern char *catgets (nl_catd __catalog, int __set, int __number,
+- __const char *__string) __THROW __nonnull ((1));
++ const char *__string) __THROW __nonnull ((1));
+
+ /* Close message CATALOG. */
+ extern int catclose (nl_catd __catalog) __THROW __nonnull ((1));
+diff -Nur uClibc-0.9.33.2/include/obstack.h uClibc-git/include/obstack.h
+--- uClibc-0.9.33.2/include/obstack.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/obstack.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Summary:
+
+@@ -180,6 +179,7 @@
+ /* Declare the external functions we use; they are in obstack.c. */
+
+ extern void _obstack_newchunk (struct obstack *, int);
++libc_hidden_proto(_obstack_newchunk)
+ extern int _obstack_begin (struct obstack *, int, int,
+ void *(*) (long), void (*) (void *));
+ extern int _obstack_begin_1 (struct obstack *, int, int,
+diff -Nur uClibc-0.9.33.2/include/printf.h uClibc-git/include/printf.h
+--- uClibc-0.9.33.2/include/printf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/printf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* March 11, 2001 Manuel Novoa III
+ *
+@@ -143,14 +142,14 @@
+
+ #ifdef __UCLIBC_HAS_GLIBC_CUSTOM_PRINTF__
+ typedef int (*printf_function) (FILE *__stream,
+- __const struct printf_info *__info,
+- __const void *__const *__args);
++ const struct printf_info *__info,
++ const void *const *__args);
+
+ /* Type of a printf specifier-arginfo function.
+ INFO gives information about the format specification.
+ N, ARGTYPES, and return value are as for parse_printf_format. */
+
+-typedef int printf_arginfo_function (__const struct printf_info *__info,
++typedef int printf_arginfo_function (const struct printf_info *__info,
+ size_t __n, int *__argtypes);
+
+
+@@ -174,7 +173,7 @@
+ array it is passed with the types of the arguments it wants, and return
+ the number of arguments it wants. */
+
+-extern size_t parse_printf_format (__const char *__restrict __fmt, size_t __n,
++extern size_t parse_printf_format (const char *__restrict __fmt, size_t __n,
+ int *__restrict __argtypes) __THROW;
+
+
+@@ -222,11 +221,11 @@
+ the format specifier is a uppercase character powers of 1000 are
+ used. Otherwise powers of 1024. */
+ extern int printf_size (FILE *__restrict __fp,
+- __const struct printf_info *__info,
+- __const void *__const *__restrict __args) __THROW;
++ const struct printf_info *__info,
++ const void *const *__restrict __args) __THROW;
+
+ /* This is the appropriate argument information function for `printf_size'. */
+-extern int printf_size_info (__const struct printf_info *__restrict
++extern int printf_size_info (const struct printf_info *__restrict
+ __info, size_t __n, int *__restrict __argtypes)
+ __THROW;
+
+diff -Nur uClibc-0.9.33.2/include/pty.h uClibc-git/include/pty.h
+--- uClibc-0.9.33.2/include/pty.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/pty.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTY_H
+ #define _PTY_H 1
+diff -Nur uClibc-0.9.33.2/include/pwd.h uClibc-git/include/pwd.h
+--- uClibc-0.9.33.2/include/pwd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/pwd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 9.2.2 User Database Access <pwd.h>
+@@ -100,7 +99,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int putpwent (__const struct passwd *__restrict __p,
++extern int putpwent (const struct passwd *__restrict __p,
+ FILE *__restrict __f);
+ #endif
+
+@@ -114,7 +113,8 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct passwd *getpwnam (__const char *__name);
++extern struct passwd *getpwnam (const char *__name);
++libc_hidden_proto(getpwnam)
+
+ #if defined __USE_POSIX || defined __USE_MISC
+
+@@ -149,7 +149,7 @@
+ struct passwd **__restrict __result);
+ libc_hidden_proto(getpwuid_r)
+
+-extern int getpwnam_r (__const char *__restrict __name,
++extern int getpwnam_r (const char *__restrict __name,
+ struct passwd *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct passwd **__restrict __result);
+diff -Nur uClibc-0.9.33.2/include/regex.h uClibc-git/include/regex.h
+--- uClibc-0.9.33.2/include/regex.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/regex.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* Definitions for data structures and routines for the regular
+ expression library.
+- Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005
++ Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006,2008
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+@@ -15,28 +15,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _REGEX_H
+ #define _REGEX_H 1
+
+-#include <features.h>
+-
+ #include <sys/types.h>
+
+ __BEGIN_DECLS
+
+-/* POSIX says that <sys/types.h> must be included (by the caller) before
+- <regex.h>. */
+-
+-#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
+-/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
+- should be there. */
+-# include <stddef.h>
+-#endif
+-
+ /* The following two types have to be signed and unsigned integer type
+ wide enough to hold a value of a pointer. For most ANSI compilers
+ ptrdiff_t and size_t should be likely OK. Still size of these two
+@@ -51,20 +39,21 @@
+ add or remove a bit, only one other definition need change. */
+ typedef unsigned long int reg_syntax_t;
+
++#ifdef __USE_GNU
+ /* If this bit is not set, then \ inside a bracket expression is literal.
+ If set, then such a \ quotes the following character. */
+-#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
++# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+ /* If this bit is not set, then + and ? are operators, and \+ and \? are
+ literals.
+ If set, then \+ and \? are operators and + and ? are literals. */
+-#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
++# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+ /* If this bit is set, then character classes are supported. They are:
+ [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
+ [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+ If not set, then character classes are not supported. */
+-#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
++# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+ /* If this bit is set, then ^ and $ are always anchors (outside bracket
+ expressions, of course).
+@@ -78,7 +67,7 @@
+ POSIX draft 11.2 says that * etc. in leading positions is undefined.
+ We already implemented a previous draft which made those constructs
+ invalid, though, so we haven't changed the code back. */
+-#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
++# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+ /* If this bit is set, then special characters are always special
+ regardless of where they are in the pattern.
+@@ -86,71 +75,71 @@
+ some contexts; otherwise they are ordinary. Specifically,
+ * + ? and intervals are only special when not after the beginning,
+ open-group, or alternation operator. */
+-#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
++# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+ /* If this bit is set, then *, +, ?, and { cannot be first in an re or
+ immediately after an alternation or begin-group operator. */
+-#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
++# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+ /* If this bit is set, then . matches newline.
+ If not set, then it doesn't. */
+-#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
++# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+ /* If this bit is set, then . doesn't match NUL.
+ If not set, then it does. */
+-#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
++# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+ /* If this bit is set, nonmatching lists [^...] do not match newline.
+ If not set, they do. */
+-#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
++# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+ /* If this bit is set, either \{...\} or {...} defines an
+ interval, depending on RE_NO_BK_BRACES.
+ If not set, \{, \}, {, and } are literals. */
+-#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
++# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+ /* If this bit is set, +, ? and | aren't recognized as operators.
+ If not set, they are. */
+-#define RE_LIMITED_OPS (RE_INTERVALS << 1)
++# define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+ /* If this bit is set, newline is an alternation operator.
+ If not set, newline is literal. */
+-#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
++# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+ /* If this bit is set, then `{...}' defines an interval, and \{ and \}
+ are literals.
+ If not set, then `\{...\}' defines an interval. */
+-#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
++# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+ /* If this bit is set, (...) defines a group, and \( and \) are literals.
+ If not set, \(...\) defines a group, and ( and ) are literals. */
+-#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
++# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+ /* If this bit is set, then \<digit> matches <digit>.
+ If not set, then \<digit> is a back-reference. */
+-#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
++# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+ /* If this bit is set, then | is an alternation operator, and \| is literal.
+ If not set, then \| is an alternation operator, and | is literal. */
+-#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
++# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+ /* If this bit is set, then an ending range point collating higher
+ than the starting range point, as in [z-a], is invalid.
+ If not set, then when ending range point collates higher than the
+ starting range point, the range is ignored. */
+-#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
++# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+ /* If this bit is set, then an unmatched ) is ordinary.
+ If not set, then an unmatched ) is invalid. */
+-#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
++# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+ /* If this bit is set, succeed as soon as we match the whole pattern,
+ without further backtracking. */
+-#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
++# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+ /* If this bit is set, do not process the GNU regex operators.
+ If not set, then the GNU regex operators are recognized. */
+-#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
++# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+ /* If this bit is set, turn on internal regex debugging.
+ If not set, and debugging was on, turn it off.
+@@ -158,29 +147,30 @@
+ We define this bit always, so that all that's needed to turn on
+ debugging is to recompile regex.c; the calling code can always have
+ this bit set, and it won't affect anything in the normal case. */
+-#define RE_DEBUG (RE_NO_GNU_OPS << 1)
++# define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+ /* If this bit is set, a syntactically invalid interval is treated as
+ a string of ordinary characters. For example, the ERE 'a{1' is
+ treated as 'a\{1'. */
+-#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
++# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+ /* If this bit is set, then ignore case when matching.
+ If not set, then case is significant. */
+-#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
++# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
+ /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
+ for ^, because it is difficult to scan the regex backwards to find
+ whether ^ should be special. */
+-#define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
++# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
+
+ /* If this bit is set, then \{ cannot be first in an bre or
+ immediately after an alternation or begin-group operator. */
+-#define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
++# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
+
+ /* If this bit is set, then no_sub will be set to 1 during
+ re_compile_pattern. */
+-#define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
++# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
++#endif
+
+ /* This global variable defines the particular regexp syntax to use (for
+ some interfaces). When a regexp is compiled, the syntax used is
+@@ -188,6 +178,7 @@
+ already-compiled regexps. */
+ extern reg_syntax_t re_syntax_options;
+
++#ifdef __USE_GNU
+ /* Define combinations of the above bits for the standard possibilities.
+ (The [[[ comments delimit what gets put into the Texinfo file, so
+ don't delete them!) */
+@@ -262,11 +253,12 @@
+ /* Maximum number of duplicates an interval can allow. Some systems
+ (erroneously) define this in other header files, but we want our
+ value, so remove any previous define. */
+-#ifdef RE_DUP_MAX
+-# undef RE_DUP_MAX
+-#endif
++# ifdef RE_DUP_MAX
++# undef RE_DUP_MAX
++# endif
+ /* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */
+-#define RE_DUP_MAX (0x7fff)
++# define RE_DUP_MAX (0x7fff)
++#endif
+
+
+ /* POSIX `cflags' bits (i.e., information for `regcomp'). */
+@@ -310,7 +302,7 @@
+ `re_error_msg' table in regex.c. */
+ typedef enum
+ {
+-#ifdef _XOPEN_SOURCE
++#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K
+ REG_ENOSYS = -1, /* This will never happen for this implementation. */
+ #endif
+
+@@ -345,7 +337,16 @@
+ private to the regex routines. */
+
+ #ifndef RE_TRANSLATE_TYPE
+-# define RE_TRANSLATE_TYPE unsigned char *
++# define __RE_TRANSLATE_TYPE unsigned char *
++# ifdef __USE_GNU
++# define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE
++# endif
++#endif
++
++#ifdef __USE_GNU
++# define __REPB_PREFIX(name) name
++#else
++# define __REPB_PREFIX(name) __##name
+ #endif
+
+ struct re_pattern_buffer
+@@ -353,27 +354,27 @@
+ /* Space that holds the compiled pattern. It is declared as
+ `unsigned char *' because its elements are sometimes used as
+ array indexes. */
+- unsigned char *buffer;
++ unsigned char *__REPB_PREFIX(buffer);
+
+ /* Number of bytes to which `buffer' points. */
+- unsigned long int allocated;
++ unsigned long int __REPB_PREFIX(allocated);
+
+ /* Number of bytes actually used in `buffer'. */
+- unsigned long int used;
++ unsigned long int __REPB_PREFIX(used);
+
+ /* Syntax setting with which the pattern was compiled. */
+- reg_syntax_t syntax;
++ reg_syntax_t __REPB_PREFIX(syntax);
+
+ /* Pointer to a fastmap, if any, otherwise zero. re_search uses the
+ fastmap, if there is one, to skip over impossible starting points
+ for matches. */
+- char *fastmap;
++ char *__REPB_PREFIX(fastmap);
+
+ /* Either a translate table to apply to all characters before
+ comparing them, or zero for no translation. The translation is
+ applied to a pattern when it is compiled and to a string when it
+ is matched. */
+- RE_TRANSLATE_TYPE translate;
++ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate);
+
+ /* Number of subexpressions found by the compiler. */
+ size_t re_nsub;
+@@ -382,34 +383,36 @@
+ Well, in truth it's used only in `re_search_2', to see whether or
+ not we should use the fastmap, so we don't set this absolutely
+ perfectly; see `re_compile_fastmap' (the `duplicate' case). */
+- unsigned can_be_null : 1;
++ unsigned __REPB_PREFIX(can_be_null) : 1;
+
+ /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+ for `max (RE_NREGS, re_nsub + 1)' groups.
+ If REGS_REALLOCATE, reallocate space if necessary.
+ If REGS_FIXED, use what's there. */
+-#define REGS_UNALLOCATED 0
+-#define REGS_REALLOCATE 1
+-#define REGS_FIXED 2
+- unsigned regs_allocated : 2;
++#ifdef __USE_GNU
++# define REGS_UNALLOCATED 0
++# define REGS_REALLOCATE 1
++# define REGS_FIXED 2
++#endif
++ unsigned __REPB_PREFIX(regs_allocated) : 2;
+
+ /* Set to zero when `regex_compile' compiles a pattern; set to one
+ by `re_compile_fastmap' if it updates the fastmap. */
+- unsigned fastmap_accurate : 1;
++ unsigned __REPB_PREFIX(fastmap_accurate) : 1;
+
+ /* If set, `re_match_2' does not return information about
+ subexpressions. */
+- unsigned no_sub : 1;
++ unsigned __REPB_PREFIX(no_sub) : 1;
+
+ /* If set, a beginning-of-line anchor doesn't match at the beginning
+ of the string. */
+- unsigned not_bol : 1;
++ unsigned __REPB_PREFIX(not_bol) : 1;
+
+ /* Similarly for an end-of-line anchor. */
+- unsigned not_eol : 1;
++ unsigned __REPB_PREFIX(not_eol) : 1;
+
+ /* If true, an anchor at a newline matches. */
+- unsigned newline_anchor : 1;
++ unsigned __REPB_PREFIX(newline_anchor) : 1;
+ };
+
+ typedef struct re_pattern_buffer regex_t;
+@@ -418,6 +421,7 @@
+ typedef int regoff_t;
+
+
++#ifdef __USE_GNU
+ /* This is the structure we store register match data in. See
+ regex.texinfo for a full description of what registers match. */
+ struct re_registers
+@@ -431,8 +435,9 @@
+ /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+ `re_match_2' returns information about at least this many registers
+ the first time a `regs' structure is passed. */
+-#ifndef RE_NREGS
+-# define RE_NREGS 30
++# ifndef RE_NREGS
++# define RE_NREGS 30
++# endif
+ #endif
+
+
+@@ -447,7 +452,7 @@
+
+ /* Declarations for routines. */
+
+-
++#ifdef __USE_GNU
+ /* Sets the current default syntax to SYNTAX, and return the old syntax.
+ You can also simply assign to the `re_syntax_options' variable. */
+ extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
+@@ -515,8 +520,9 @@
+ struct re_registers *__regs,
+ unsigned int __num_regs,
+ regoff_t *__starts, regoff_t *__ends);
++#endif /* Use GNU */
+
+-#if defined _REGEX_RE_COMP || defined _LIBC
++#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_BSD)
+ # ifndef _CRAY
+ /* 4.2 bsd compatibility. */
+ extern char *re_comp (const char *);
+@@ -537,7 +543,8 @@
+ #endif
+ /* gcc 3.1 and up support the [restrict] syntax. */
+ #ifndef __restrict_arr
+-# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
++# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \
++ && !defined __GNUG__
+ # define __restrict_arr __restrict
+ # else
+ # define __restrict_arr
+diff -Nur uClibc-0.9.33.2/include/regexp.h uClibc-git/include/regexp.h
+--- uClibc-0.9.33.2/include/regexp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/regexp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _REGEXP_H
+ #define _REGEXP_H 1
+@@ -103,7 +102,7 @@
+ on the macros. */
+ char *
+ compile (char *__restrict instring, char *__restrict expbuf,
+- __const char *__restrict endbuf, int eof)
++ const char *__restrict endbuf, int eof)
+ {
+ char *__input_buffer = NULL;
+ size_t __input_size = 0;
+@@ -216,14 +215,14 @@
+ found in the buffer starting at EXPBUF. `loc1' will return the
+ first character matched and `loc2' points to the next unmatched
+ character. */
+-extern int step (__const char *__restrict __string,
+- __const char *__restrict __expbuf) __THROW;
++extern int step (const char *__restrict __string,
++ const char *__restrict __expbuf) __THROW;
+
+ /* Match the beginning of STRING with the compiled regular expression
+ in EXPBUF. If the match is successful `loc2' will contain the
+ position of the first unmatched character. */
+-extern int advance (__const char *__restrict __string,
+- __const char *__restrict __expbuf) __THROW;
++extern int advance (const char *__restrict __string,
++ const char *__restrict __expbuf) __THROW;
+ #endif
+
+
+diff -Nur uClibc-0.9.33.2/include/rpc/auth_des.h uClibc-git/include/rpc/auth_des.h
+--- uClibc-0.9.33.2/include/rpc/auth_des.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/auth_des.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _RPC_AUTH_DES_H
+ #define _RPC_AUTH_DES_H 1
+@@ -89,27 +88,26 @@
+ #define adv_nickname adv_int_u
+
+ /* Map a des credential into a unix cred. */
+-extern int authdes_getucred (__const struct authdes_cred * __adc,
++extern int authdes_getucred (const struct authdes_cred * __adc,
+ uid_t * __uid, gid_t * __gid,
+ short *__grouplen, gid_t * __groups) __THROW;
+
+ /* Get the public key for NAME and place it in KEY. NAME can only be
+ up to MAXNETNAMELEN bytes long and the destination buffer KEY should
+ have HEXKEYBYTES + 1 bytes long to fit all characters from the key. */
+-extern int getpublickey (__const char *__name, char *__key) __THROW;
++extern int getpublickey (const char *__name, char *__key) __THROW;
+
+ /* Get the secret key for NAME and place it in KEY. PASSWD is used to
+ decrypt the encrypted key stored in the database. NAME can only be
+ up to MAXNETNAMELEN bytes long and the destination buffer KEY
+ should have HEXKEYBYTES + 1 bytes long to fit all characters from
+ the key. */
+-extern int getsecretkey (__const char *__name, char *__key,
+- __const char *__passwd) __THROW;
++extern int getsecretkey (const char *__name, char *__key,
++ const char *__passwd) __THROW;
+ #endif
+
+ extern int rtime (struct sockaddr_in *__addrp, struct rpc_timeval *__timep,
+ struct rpc_timeval *__timeout) __THROW;
+-libc_hidden_proto(rtime)
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/rpc/auth.h uClibc-git/include/rpc/auth.h
+--- uClibc-0.9.33.2/include/rpc/auth.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/auth.h 2014-02-03 12:32:56.000000000 +0100
+@@ -41,17 +41,6 @@
+ #ifndef _RPC_AUTH_H
+
+ #define _RPC_AUTH_H 1
+-#ifdef _LIBC
+-/* Some adjustments to make the libc source from glibc
+- * compile more easily with uClibc... */
+-#ifndef __FORCE_GLIBC
+-#define __FORCE_GLIBC
+-#endif
+-#ifndef _GNU_SOURCE
+-#define _GNU_SOURCE
+-#endif
+-#define _(X) X
+-#endif
+ #include <features.h>
+ #include <rpc/xdr.h>
+
+@@ -107,6 +96,10 @@
+ struct opaque_auth ah_cred;
+ struct opaque_auth ah_verf;
+ union des_block ah_key;
++ /* not sure whether non-const-ness is a part of the spec... if it is,
++ * enclose "const" in #ifdef _LIBC / #endif
++ * to make it effective only for libc compile */
++ const
+ struct auth_ops {
+ void (*ah_nextverf) (AUTH *);
+ int (*ah_marshal) (AUTH *, XDR *); /* nextverf & serialize */
+@@ -200,11 +193,11 @@
+ *
+ */
+ extern int getnetname (char *) __THROW;
+-extern int host2netname (char *, __const char *, __const char *) __THROW;
+-extern int user2netname (char *, __const uid_t, __const char *) __THROW;
+-extern int netname2user (__const char *, uid_t *, gid_t *, int *, gid_t *)
++extern int host2netname (char *, const char *, const char *) __THROW;
++extern int user2netname (char *, const uid_t, const char *) __THROW;
++extern int netname2user (const char *, uid_t *, gid_t *, int *, gid_t *)
+ __THROW;
+-extern int netname2host (__const char *, char *, __const int) __THROW;
++extern int netname2host (const char *, char *, const int) __THROW;
+
+ /*
+ *
+diff -Nur uClibc-0.9.33.2/include/rpc/clnt.h uClibc-git/include/rpc/clnt.h
+--- uClibc-0.9.33.2/include/rpc/clnt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/clnt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -281,7 +281,7 @@
+ * u_long prog;
+ * u_long vers;
+ */
+-extern CLIENT *clntraw_create (__const u_long __prog, __const u_long __vers)
++extern CLIENT *clntraw_create (const u_long __prog, const u_long __vers)
+ __THROW;
+
+
+@@ -295,8 +295,8 @@
+ * u_ong vers; -- version number
+ * char *prot; -- protocol
+ */
+-extern CLIENT *clnt_create (__const char *__host, __const u_long __prog,
+- __const u_long __vers, __const char *__prot)
++extern CLIENT *clnt_create (const char *__host, const u_long __prog,
++ const u_long __vers, const char *__prot)
+ __THROW;
+
+
+@@ -365,18 +365,18 @@
+ libc_hidden_proto(clntunix_create)
+
+
+-extern int callrpc (__const char *__host, __const u_long __prognum,
+- __const u_long __versnum, __const u_long __procnum,
+- __const xdrproc_t __inproc, __const char *__in,
+- __const xdrproc_t __outproc, char *__out) __THROW;
++extern int callrpc (const char *__host, const u_long __prognum,
++ const u_long __versnum, const u_long __procnum,
++ const xdrproc_t __inproc, const char *__in,
++ const xdrproc_t __outproc, char *__out) __THROW;
+ extern int _rpc_dtablesize (void) __THROW;
+ libc_hidden_proto(_rpc_dtablesize)
+
+ /*
+ * Print why creation failed
+ */
+-extern void clnt_pcreateerror (__const char *__msg); /* stderr */
+-extern char *clnt_spcreateerror(__const char *__msg) __THROW; /* string */
++extern void clnt_pcreateerror (const char *__msg); /* stderr */
++extern char *clnt_spcreateerror(const char *__msg) __THROW; /* string */
+ libc_hidden_proto(clnt_spcreateerror)
+
+ /*
+@@ -387,10 +387,10 @@
+ /*
+ * Print an English error message, given the client error code
+ */
+-extern void clnt_perror (CLIENT *__clnt, __const char *__msg);
++extern void clnt_perror (CLIENT *__clnt, const char *__msg);
+ /* stderr */
+ libc_hidden_proto(clnt_perror)
+-extern char *clnt_sperror (CLIENT *__clnt, __const char *__msg) __THROW;
++extern char *clnt_sperror (CLIENT *__clnt, const char *__msg) __THROW;
+ /* string */
+ libc_hidden_proto(clnt_sperror)
+
+@@ -416,7 +416,7 @@
+ /*
+ * get the port number on the host for the rpc program,version and proto
+ */
+-extern int getrpcport (__const char * __host, u_long __prognum,
++extern int getrpcport (const char * __host, u_long __prognum,
+ u_long __versnum, u_int proto) __THROW;
+
+ /*
+diff -Nur uClibc-0.9.33.2/include/rpc/netdb.h uClibc-git/include/rpc/netdb.h
+--- uClibc-0.9.33.2/include/rpc/netdb.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/netdb.h 2014-02-03 12:32:56.000000000 +0100
+@@ -54,7 +54,7 @@
+ libc_hidden_proto(setrpcent)
+ extern void endrpcent (void) __THROW;
+ libc_hidden_proto(endrpcent)
+-extern struct rpcent *getrpcbyname (__const char *__name) __THROW;
++extern struct rpcent *getrpcbyname (const char *__name) __THROW;
+ libc_hidden_proto(getrpcbyname)
+ extern struct rpcent *getrpcbynumber (int __number) __THROW;
+ libc_hidden_proto(getrpcbynumber)
+@@ -62,7 +62,7 @@
+ libc_hidden_proto(getrpcent)
+
+ #if defined __USE_MISC && defined __UCLIBC_HAS_REENTRANT_RPC__
+-extern int getrpcbyname_r (__const char *__name, struct rpcent *__result_buf,
++extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct rpcent **__result) __THROW;
+
+diff -Nur uClibc-0.9.33.2/include/rpc/pmap_clnt.h uClibc-git/include/rpc/pmap_clnt.h
+--- uClibc-0.9.33.2/include/rpc/pmap_clnt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/pmap_clnt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -69,30 +69,30 @@
+ * address if the responder to the broadcast.
+ */
+
+-extern bool_t pmap_set (__const u_long __program, __const u_long __vers,
++extern bool_t pmap_set (const u_long __program, const u_long __vers,
+ int __protocol, u_short __port) __THROW;
+ libc_hidden_proto(pmap_set)
+-extern bool_t pmap_unset (__const u_long __program, __const u_long __vers)
++extern bool_t pmap_unset (const u_long __program, const u_long __vers)
+ __THROW;
+ libc_hidden_proto(pmap_unset)
+ extern struct pmaplist *pmap_getmaps (struct sockaddr_in *__address) __THROW;
+ extern enum clnt_stat pmap_rmtcall (struct sockaddr_in *__addr,
+- __const u_long __prog,
+- __const u_long __vers,
+- __const u_long __proc,
++ const u_long __prog,
++ const u_long __vers,
++ const u_long __proc,
+ xdrproc_t __xdrargs,
+ caddr_t __argsp, xdrproc_t __xdrres,
+ caddr_t __resp, struct timeval __tout,
+ u_long *__port_ptr) __THROW;
+-extern enum clnt_stat clnt_broadcast (__const u_long __prog,
+- __const u_long __vers,
+- __const u_long __proc, xdrproc_t __xargs,
++extern enum clnt_stat clnt_broadcast (const u_long __prog,
++ const u_long __vers,
++ const u_long __proc, xdrproc_t __xargs,
+ caddr_t __argsp, xdrproc_t __xresults,
+ caddr_t __resultsp,
+ resultproc_t __eachresult) __THROW;
+ extern u_short pmap_getport (struct sockaddr_in *__address,
+- __const u_long __program,
+- __const u_long __version, u_int __protocol)
++ const u_long __program,
++ const u_long __version, u_int __protocol)
+ __THROW;
+ libc_hidden_proto(pmap_getport)
+
+diff -Nur uClibc-0.9.33.2/include/rpc/rpc.h uClibc-git/include/rpc/rpc.h
+--- uClibc-0.9.33.2/include/rpc/rpc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/rpc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -38,19 +38,6 @@
+ #ifndef _RPC_RPC_H
+ #define _RPC_RPC_H 1
+
+-#ifdef _LIBC
+-/* Some adjustments to make the libc source from glibc
+- * compile more easily with uClibc... */
+-#ifndef __FORCE_GLIBC
+-#define __FORCE_GLIBC
+-#endif
+-#ifndef _GNU_SOURCE
+-#define _GNU_SOURCE
+-#endif
+-#define _(X) X
+-#include <features.h>
+-#endif
+-
+ #include <rpc/types.h> /* some typedefs */
+ #include <netinet/in.h>
+
+@@ -109,11 +96,6 @@
+ libc_hidden_proto(__rpc_thread_svc_max_pollfd)
+ #define svc_max_pollfd (*__rpc_thread_svc_max_pollfd ())
+
+-extern bool_t xdr_accepted_reply (XDR *xdrs, struct accepted_reply *ar);
+-libc_hidden_proto(xdr_accepted_reply)
+-extern bool_t xdr_rejected_reply (XDR *xdrs, struct rejected_reply *rr);
+-libc_hidden_proto(xdr_rejected_reply)
+-
+ __END_DECLS
+
+ #endif /* rpc/rpc.h */
+diff -Nur uClibc-0.9.33.2/include/rpc/rpc_msg.h uClibc-git/include/rpc/rpc_msg.h
+--- uClibc-0.9.33.2/include/rpc/rpc_msg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/rpc_msg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -201,6 +201,26 @@
+ __THROW;
+ libc_hidden_proto(_seterr_reply)
+
++#ifdef __UCLIBC__
++/*
++ * XDR routine to handle an accepted rpc reply.
++ * xdr_accepted_reply(xdrs, rej)
++ * XDR *xdrs;
++ * struct accepted_reply *rej;
++ */
++extern bool_t xdr_accepted_reply(XDR *__xdrs, struct accepted_reply *__ar);
++libc_hidden_proto(xdr_accepted_reply)
++
++/*
++ * XDR routine to handle a rejected rpc reply.
++ * xdr_rejected_reply(xdrs, rej)
++ * XDR *xdrs;
++ * struct rejected_reply *rej;
++ */
++extern bool_t xdr_rejected_reply(XDR *__xdrs, struct rejected_reply *__rr);
++libc_hidden_proto(xdr_rejected_reply)
++#endif
++
+ __END_DECLS
+
+ #endif /* rpc/rpc_msg.h */
+diff -Nur uClibc-0.9.33.2/include/rpc/types.h uClibc-git/include/rpc/types.h
+--- uClibc-0.9.33.2/include/rpc/types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -33,19 +33,6 @@
+ #ifndef _RPC_TYPES_H
+ #define _RPC_TYPES_H 1
+
+-#ifdef _LIBC
+-/* Some adjustments to make the libc source from glibc
+- * compile more easily with uClibc... */
+-#ifndef __FORCE_GLIBC
+-#define __FORCE_GLIBC
+-#endif
+-#ifndef _GNU_SOURCE
+-#define _GNU_SOURCE
+-#endif
+-#define _(X) X
+-#endif
+-#include <features.h>
+-
+ typedef int bool_t;
+ typedef int enum_t;
+ /* This needs to be changed to uint32_t in the future */
+diff -Nur uClibc-0.9.33.2/include/rpc/xdr.h uClibc-git/include/rpc/xdr.h
+--- uClibc-0.9.33.2/include/rpc/xdr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/rpc/xdr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -36,14 +36,6 @@
+ #ifndef _RPC_XDR_H
+ #define _RPC_XDR_H 1
+
+-#ifdef _LIBC
+-/* Some adjustments to make the libc source from glibc
+- * compile more easily with uClibc... */
+-# ifndef __FORCE_GLIBC
+-# define __FORCE_GLIBC
+-# endif
+-# define _(X) X
+-#endif
+ #include <features.h>
+ #include <sys/types.h>
+ #include <rpc/types.h>
+@@ -120,17 +112,21 @@
+ struct XDR
+ {
+ enum xdr_op x_op; /* operation; fast additional param */
++ /* not sure whether non-const-ness is a part of the spec... if it is,
++ * enclose "const" in #ifdef _LIBC / #endif
++ * to make it effective only for libc compile */
++ const
+ struct xdr_ops
+ {
+ bool_t (*x_getlong) (XDR *__xdrs, long *__lp);
+ /* get a long from underlying stream */
+- bool_t (*x_putlong) (XDR *__xdrs, __const long *__lp);
++ bool_t (*x_putlong) (XDR *__xdrs, const long *__lp);
+ /* put a long to " */
+ bool_t (*x_getbytes) (XDR *__xdrs, caddr_t __addr, u_int __len);
+ /* get some bytes from " */
+- bool_t (*x_putbytes) (XDR *__xdrs, __const char *__addr, u_int __len);
++ bool_t (*x_putbytes) (XDR *__xdrs, const char *__addr, u_int __len);
+ /* put some bytes to " */
+- u_int (*x_getpostn) (__const XDR *__xdrs);
++ u_int (*x_getpostn) (const XDR *__xdrs);
+ /* returns bytes off from beginning */
+ bool_t (*x_setpostn) (XDR *__xdrs, u_int __pos);
+ /* lets you reposition the stream */
+@@ -140,7 +136,7 @@
+ /* free privates of this xdr_stream */
+ bool_t (*x_getint32) (XDR *__xdrs, int32_t *__ip);
+ /* get a int from underlying stream */
+- bool_t (*x_putint32) (XDR *__xdrs, __const int32_t *__ip);
++ bool_t (*x_putint32) (XDR *__xdrs, const int32_t *__ip);
+ /* put a int to " */
+ }
+ *x_ops;
+@@ -320,6 +316,8 @@
+ extern bool_t xdr_uint32_t (XDR *__xdrs, uint32_t *__up) __THROW;
+ extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
+ extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
++extern bool_t xdr_quad_t (XDR *__xdrs, quad_t *__ip) __THROW;
++extern bool_t xdr_u_quad_t (XDR *__xdrs, u_quad_t *__up) __THROW;
+ extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
+ libc_hidden_proto(xdr_bool)
+ extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
+@@ -336,7 +334,7 @@
+ extern bool_t xdr_string (XDR *__xdrs, char **__cpp, u_int __maxsize) __THROW;
+ libc_hidden_proto(xdr_string)
+ extern bool_t xdr_union (XDR *__xdrs, enum_t *__dscmp, char *__unp,
+- __const struct xdr_discrim *__choices,
++ const struct xdr_discrim *__choices,
+ xdrproc_t dfault) __THROW;
+ libc_hidden_proto(xdr_union)
+ extern bool_t xdr_char (XDR *__xdrs, char *__cp) __THROW;
+@@ -372,7 +370,7 @@
+ */
+
+ /* XDR using memory buffers */
+-extern void xdrmem_create (XDR *__xdrs, __const caddr_t __addr,
++extern void xdrmem_create (XDR *__xdrs, const caddr_t __addr,
+ u_int __size, enum xdr_op __xop) __THROW;
+ libc_hidden_proto(xdrmem_create)
+
+diff -Nur uClibc-0.9.33.2/include/sched.h uClibc-git/include/sched.h
+--- uClibc-0.9.33.2/include/sched.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sched.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SCHED_H
+ #define _SCHED_H 1
+@@ -40,7 +39,7 @@
+ __BEGIN_DECLS
+
+ /* Set scheduling parameters for a process. */
+-extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
++extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
+ __THROW;
+
+ /* Retrieve scheduling parameters for a particular process. */
+@@ -48,7 +47,7 @@
+
+ /* Set scheduling algorithm and/or parameters for a process. */
+ extern int sched_setscheduler (__pid_t __pid, int __policy,
+- __const struct sched_param *__param) __THROW;
++ const struct sched_param *__param) __THROW;
+
+ /* Retrieve scheduling algorithm for a particular purpose. */
+ extern int sched_getscheduler (__pid_t __pid) __THROW;
+@@ -108,11 +107,19 @@
+
+ /* Set the CPU affinity for a task */
+ extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
+- __const cpu_set_t *__cpuset) __THROW;
++ const cpu_set_t *__cpuset) __THROW;
+
+ /* Get the CPU affinity for a task */
+ extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
+ cpu_set_t *__cpuset) __THROW;
++
++# ifdef _LIBC
++extern int __clone (int (*__fn) (void *__arg), void *__child_stack,
++ int __flags, void *__arg, ...);
++extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base,
++ size_t __child_stack_size, int __flags, void *__arg, ...);
++# endif
++
+ #endif
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/scsi/scsi.h uClibc-git/include/scsi/scsi.h
+--- uClibc-0.9.33.2/include/scsi/scsi.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/scsi/scsi.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * This header file contains public constants and structures used by
+diff -Nur uClibc-0.9.33.2/include/scsi/scsi_ioctl.h uClibc-git/include/scsi/scsi_ioctl.h
+--- uClibc-0.9.33.2/include/scsi/scsi_ioctl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/scsi/scsi_ioctl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SCSI_IOCTL_H
+ #define _SCSI_IOCTL_H
+diff -Nur uClibc-0.9.33.2/include/scsi/sg.h uClibc-git/include/scsi/sg.h
+--- uClibc-0.9.33.2/include/scsi/sg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/scsi/sg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ History:
+diff -Nur uClibc-0.9.33.2/include/search.h uClibc-git/include/search.h
+--- uClibc-0.9.33.2/include/search.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/search.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEARCH_H
+ #define _SEARCH_H 1
+@@ -52,7 +51,7 @@
+ /* For use with hsearch(3). */
+ #ifndef __COMPAR_FN_T
+ # define __COMPAR_FN_T
+-typedef int (*__compar_fn_t) (__const void *, __const void *);
++typedef int (*__compar_fn_t) (const void *, const void *);
+
+ # ifdef __USE_GNU
+ typedef __compar_fn_t comparison_fn_t;
+@@ -130,30 +129,30 @@
+
+ /* Search for an entry matching the given KEY in the tree pointed to
+ by *ROOTP and insert a new element if not found. */
+-extern void *tsearch (__const void *__key, void **__rootp,
++extern void *tsearch (const void *__key, void **__rootp,
+ __compar_fn_t __compar);
+ libc_hidden_proto(tsearch)
+
+ /* Search for an entry matching the given KEY in the tree pointed to
+ by *ROOTP. If no matching entry is available return NULL. */
+-extern void *tfind (__const void *__key, void *__const *__rootp,
++extern void *tfind (const void *__key, void *const *__rootp,
+ __compar_fn_t __compar);
+ libc_hidden_proto(tfind)
+
+ /* Remove the element matching KEY from the tree pointed to by *ROOTP. */
+-extern void *tdelete (__const void *__restrict __key,
++extern void *tdelete (const void *__restrict __key,
+ void **__restrict __rootp,
+ __compar_fn_t __compar);
+
+ #ifndef __ACTION_FN_T
+ # define __ACTION_FN_T
+-typedef void (*__action_fn_t) (__const void *__nodep, VISIT __value,
++typedef void (*__action_fn_t) (const void *__nodep, VISIT __value,
+ int __level);
+ #endif
+
+ /* Walk through the whole tree and call the ACTION callback for every node
+ or leaf. */
+-extern void twalk (__const void *__root, __action_fn_t __action);
++extern void twalk (const void *__root, __action_fn_t __action);
+
+ #ifdef __USE_GNU
+ /* Callback type for function to free a tree node. If the keys are atomic
+@@ -168,13 +167,13 @@
+
+ /* Perform linear search for KEY by comparing by COMPAR in an array
+ [BASE,BASE+NMEMB*SIZE). */
+-extern void *lfind (__const void *__key, __const void *__base,
++extern void *lfind (const void *__key, const void *__base,
+ size_t *__nmemb, size_t __size, __compar_fn_t __compar);
+ libc_hidden_proto(lfind)
+
+ /* Perform linear search for KEY by comparing by COMPAR function in
+ array [BASE,BASE+NMEMB*SIZE) and insert entry if not found. */
+-extern void *lsearch (__const void *__key, void *__base,
++extern void *lsearch (const void *__key, void *__base,
+ size_t *__nmemb, size_t __size, __compar_fn_t __compar);
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/setjmp.h uClibc-git/include/setjmp.h
+--- uClibc-0.9.33.2/include/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-1999, 2001 Free Software Foundation, Inc.
++/* Copyright (C) 1991-1999,2001,2002,2007,2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.13 Nonlocal jumps <setjmp.h>
+@@ -30,8 +29,9 @@
+ #include <bits/setjmp.h> /* Get `__jmp_buf'. */
+ #include <bits/sigset.h> /* Get `__sigset_t'. */
+
++
+ /* Calling environment, plus possibly a saved signal mask. */
+-typedef struct __jmp_buf_tag /* C++ doesn't like tagless structs. */
++struct __jmp_buf_tag
+ {
+ /* NOTE: The machine-dependent definitions of `__sigsetjmp'
+ assume that a `jmp_buf' begins with a `__jmp_buf' and that
+@@ -40,23 +40,29 @@
+ __jmp_buf __jmpbuf; /* Calling environment. */
+ int __mask_was_saved; /* Saved the signal mask? */
+ __sigset_t __saved_mask; /* Saved signal mask. */
+- } jmp_buf[1];
++ };
++
+
++__BEGIN_NAMESPACE_STD
++
++typedef struct __jmp_buf_tag jmp_buf[1];
+
+ /* Store the calling environment in ENV, also saving the signal mask.
+ Return 0. */
+ extern int setjmp (jmp_buf __env) __THROW;
+
+-/* Store the calling environment in ENV, not saving the signal mask.
+- Return 0. */
+-extern int _setjmp (jmp_buf __env) __THROW;
++__END_NAMESPACE_STD
+
+ /* Store the calling environment in ENV, also saving the
+ signal mask if SAVEMASK is nonzero. Return 0.
+ This is the internal name for `sigsetjmp'. */
+-extern int __sigsetjmp (jmp_buf __env, int __savemask) __THROW;
++extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) __THROW;
+
+ #ifndef __FAVOR_BSD
++/* Store the calling environment in ENV, not saving the signal mask.
++ Return 0. */
++extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROW;
++
+ /* Do not save the signal mask. This is equivalent to the `_setjmp'
+ BSD function. */
+ # define setjmp(env) _setjmp (env)
+@@ -68,15 +74,20 @@
+ #endif /* Favor BSD. */
+
+
++__BEGIN_NAMESPACE_STD
++
+ /* Jump to the environment saved in ENV, making the
+ `setjmp' call there return VAL, or 1 if VAL is 0. */
+-extern void longjmp (jmp_buf __env, int __val)
++extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
+ __THROW __attribute__ ((__noreturn__));
++
++__END_NAMESPACE_STD
++
+ #if defined __USE_BSD || defined __USE_XOPEN
+ /* Same. Usually `_longjmp' is used with `_setjmp', which does not save
+ the signal mask. But it is how ENV was saved that determines whether
+ `longjmp' restores the mask; `_longjmp' is just an alias. */
+-extern void _longjmp (jmp_buf __env, int __val)
++extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
+ __THROW __attribute__ ((__noreturn__));
+ #endif
+
+@@ -85,7 +96,7 @@
+ /* Use the same type for `jmp_buf' and `sigjmp_buf'.
+ The `__mask_was_saved' flag determines whether
+ or not `longjmp' will restore the signal mask. */
+-typedef jmp_buf sigjmp_buf;
++typedef struct __jmp_buf_tag sigjmp_buf[1];
+
+ /* Store the calling environment in ENV, also saving the
+ signal mask if SAVEMASK is nonzero. Return 0. */
+@@ -101,4 +112,16 @@
+
+ __END_DECLS
+
++#ifdef _LIBC
++extern void __longjmp(__jmp_buf __env, int __val) attribute_noreturn;
++libc_hidden_proto(__longjmp)
++extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
++extern __typeof(siglongjmp) __libc_siglongjmp attribute_noreturn;
++extern void _longjmp_unwind(jmp_buf __env, int __val);
++libc_hidden_proto(_longjmp_unwind)
++extern int __sigjmp_save(sigjmp_buf __env, int __savemask) attribute_hidden;
++/* We use the normal longjmp for unwinding */
++# define __libc_unwind_longjmp(buf, val) __libc_longjmp(buf, val)
++#endif
++
+ #endif /* setjmp.h */
+diff -Nur uClibc-0.9.33.2/include/sgtty.h uClibc-git/include/sgtty.h
+--- uClibc-0.9.33.2/include/sgtty.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sgtty.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SGTTY_H
+ #define _SGTTY_H 1
+@@ -38,7 +37,7 @@
+ extern int gtty (int __fd, struct sgttyb *__params) __THROW;
+
+ /* Set the terminal parameters associated with FD to *PARAMS. */
+-extern int stty (int __fd, __const struct sgttyb *__params) __THROW;
++extern int stty (int __fd, const struct sgttyb *__params) __THROW;
+ #endif
+
+
+diff -Nur uClibc-0.9.33.2/include/shadow.h uClibc-git/include/shadow.h
+--- uClibc-0.9.33.2/include/shadow.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/shadow.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Declaration of types and functions for shadow password suite. */
+
+@@ -84,7 +83,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern struct spwd *getspnam (__const char *__name);
++extern struct spwd *getspnam (const char *__name);
+
+ /* Read shadow entry from STRING.
+
+@@ -92,7 +91,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern struct spwd *sgetspent (__const char *__string);
++extern struct spwd *sgetspent (const char *__string);
+
+ /* Read next shadow entry from STREAM.
+
+@@ -108,7 +107,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int putspent (__const struct spwd *__p, FILE *__stream);
++extern int putspent (const struct spwd *__p, FILE *__stream);
+
+
+ #ifdef __USE_MISC
+@@ -122,12 +121,12 @@
+ size_t __buflen, struct spwd **__result);
+ libc_hidden_proto(getspent_r)
+
+-extern int getspnam_r (__const char *__name, struct spwd *__result_buf,
++extern int getspnam_r (const char *__name, struct spwd *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct spwd **__result);
+ libc_hidden_proto(getspnam_r)
+
+-extern int sgetspent_r (__const char *__string, struct spwd *__result_buf,
++extern int sgetspent_r (const char *__string, struct spwd *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct spwd **__result);
+ libc_hidden_proto(sgetspent_r)
+diff -Nur uClibc-0.9.33.2/include/signal.h uClibc-git/include/signal.h
+--- uClibc-0.9.33.2/include/signal.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/signal.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-2003, 2004 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2003, 2004, 2007, 2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.14 Signal handling <signal.h>
+@@ -87,15 +86,27 @@
+ typedef __pid_t pid_t;
+ # define __pid_t_defined
+ # endif
++#endif
++#ifdef __USE_XOPEN
+ # ifndef __uid_t_defined
+ typedef __uid_t uid_t;
+ # define __uid_t_defined
+ # endif
+ #endif /* Unix98 */
+
++#if defined __USE_POSIX199309 && defined __UCLIBC_HAS_REALTIME__
++/* We need `struct timespec' later on. */
++# define __need_timespec
++# include <time.h>
++
++/* Get the `siginfo_t' type plus the needed symbols. */
++# include <bits/siginfo.h>
++#endif
++
+
+ /* Type of a signal handler. */
+ typedef void (*__sighandler_t) (int);
++
+ #if defined __UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL__
+ /* The X/Open definition of `signal' specifies the SVID semantic. Use
+ the additional function `sysv_signal' when X/Open compatibility is
+@@ -156,17 +167,23 @@
+ libc_hidden_proto(raise)
+ __END_NAMESPACE_STD
+
+-#ifdef __USE_SVID
++#if 0 /*def __USE_SVID*/
+ /* SVID names for the same things. */
+ extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
+ __THROW;
+ extern int gsignal (int __sig) __THROW;
+ #endif /* Use SVID. */
+
+-#ifdef __USE_MISC
++/* glibc guards the next two wrong with __USE_XOPEN2K */
++#if defined __USE_MISC || defined __USE_XOPEN2K8
+ /* Print a message describing the meaning of the given signal number. */
+-extern void psignal (int __sig, __const char *__s);
+-#endif /* Use misc. */
++extern void psignal (int __sig, const char *__s);
++#endif /* Use misc or POSIX 2008. */
++
++#if 0 /*def __USE_XOPEN2K8*/
++/* Print a message describing the meaning of the given signal information. */
++extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
++#endif /* POSIX 2008. */
+
+ #ifdef __UCLIBC_SUSV4_LEGACY__
+ /* The `sigpause' function has two different interfaces. The original
+@@ -177,23 +194,25 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int __sigpause (int __sig_or_mask, int __is_sig);
+-libc_hidden_proto(__sigpause)
++/*extern int __sigpause (int __sig_or_mask, int __is_sig);*/
+
+ #ifdef __FAVOR_BSD
+ /* Set the mask of blocked signals to MASK,
+ wait for a signal to arrive, and then restore the mask. */
+-extern int sigpause (int __mask) __THROW __attribute_deprecated__;
+-# define sigpause(mask) __sigpause ((mask), 0)
++/*extern int sigpause (int __mask) __THROW __attribute_deprecated__;
++# define sigpause(mask) __sigpause ((mask), 0)*/
++/* uClibc note: BSD sigpause is available as __bsd_sigpause.
++ * It is intentionally not prototyped */
+ #else
+ # ifdef __USE_XOPEN
+ /* Remove a signal from the signal mask and suspend the process. */
+-# define sigpause(sig) __sigpause ((sig), 1)
++extern int sigpause(int __sig);
++/*# define sigpause(sig) __sigpause ((sig), 1)*/
+ # endif
+ #endif
+ #endif /* __UCLIBC_SUSV4_LEGACY__ */
+
+-#ifdef __USE_BSD
++#if 0 /*def __USE_BSD*/
+ /* None of the following functions should be used anymore. They are here
+ only for compatibility. A single word (`int') is not guaranteed to be
+ enough to hold a complete signal mask and therefore these functions
+@@ -203,14 +222,10 @@
+ # define sigmask(sig) __sigmask(sig)
+
+ /* Block signals in MASK, returning the old mask. */
+-extern int sigblock (int __mask) __THROW;
+-/* collides with libc_hidden_proto: __attribute_deprecated__; */
+-libc_hidden_proto(sigblock)
++extern int sigblock (int __mask) __THROW __attribute_deprecated__;
+
+ /* Set the mask of blocked signals to MASK, returning the old mask. */
+-extern int sigsetmask (int __mask) __THROW;
+-/* collides with libc_hidden_proto: __attribute_deprecated__; */
+-libc_hidden_proto(sigsetmask)
++extern int sigsetmask (int __mask) __THROW __attribute_deprecated__;
+
+ /* Return currently selected signal mask. */
+ extern int siggetmask (void) __THROW __attribute_deprecated__;
+@@ -228,22 +243,11 @@
+
+ #ifdef __USE_POSIX
+
+-# ifdef __USE_POSIX199309
+-/* We need `struct timespec' later on. */
+-# define __need_timespec
+-# include <time.h>
+-
+-/* Get the `siginfo_t' type plus the needed symbols. */
+-# include <bits/siginfo.h>
+-# endif
+-
+ /* Clear all signals from SET. */
+ extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));
+-libc_hidden_proto(sigemptyset)
+
+ /* Set all signals in SET. */
+ extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));
+-libc_hidden_proto(sigfillset)
+
+ /* Add SIGNO to SET. */
+ extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
+@@ -254,20 +258,20 @@
+ libc_hidden_proto(sigdelset)
+
+ /* Return 1 if SIGNO is in SET, 0 if not. */
+-extern int sigismember (__const sigset_t *__set, int __signo)
++extern int sigismember (const sigset_t *__set, int __signo)
+ __THROW __nonnull ((1));
+
+ # ifdef __USE_GNU
+ /* Return non-empty value is SET is not empty. */
+-extern int sigisemptyset (__const sigset_t *__set) __THROW __nonnull ((1));
++extern int sigisemptyset (const sigset_t *__set) __THROW __nonnull ((1));
+
+ /* Build new signal set by combining the two inputs set using logical AND. */
+-extern int sigandset (sigset_t *__set, __const sigset_t *__left,
+- __const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
++extern int sigandset (sigset_t *__set, const sigset_t *__left,
++ const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
+
+ /* Build new signal set by combining the two inputs set using logical OR. */
+-extern int sigorset (sigset_t *__set, __const sigset_t *__left,
+- __const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
++extern int sigorset (sigset_t *__set, const sigset_t *__left,
++ const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
+ # endif /* GNU */
+
+ /* Get the system-specific definitions of `struct sigaction'
+@@ -275,7 +279,7 @@
+ # include <bits/sigaction.h>
+
+ /* Get and/or change the set of blocked signals. */
+-extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
++extern int sigprocmask (int __how, const sigset_t *__restrict __set,
+ sigset_t *__restrict __oset) __THROW;
+ libc_hidden_proto(sigprocmask)
+
+@@ -284,14 +288,50 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int sigsuspend (__const sigset_t *__set) __nonnull ((1));
++extern int sigsuspend (const sigset_t *__set) __nonnull ((1));
++#ifdef _LIBC
++extern __typeof(sigsuspend) __sigsuspend_nocancel attribute_hidden;
+ libc_hidden_proto(sigsuspend)
++#endif
+
+ /* Get and/or set the action for signal SIG. */
+-extern int sigaction (int __sig, __const struct sigaction *__restrict __act,
++extern int sigaction (int __sig, const struct sigaction *__restrict __act,
+ struct sigaction *__restrict __oact) __THROW;
++#ifdef _LIBC
++# if 0 /* this is in headers */
++/* In uclibc, userspace struct sigaction is identical to
++ * "new" struct kernel_sigaction (one from the Linux 2.1.68 kernel).
++ * See sigaction.h
++ */
++struct old_kernel_sigaction;
++extern int __syscall_sigaction(int, const struct old_kernel_sigaction *,
++ struct old_kernel_sigaction *) attribute_hidden;
++# else /* this is how the function is built */
++extern __typeof(sigaction) __syscall_sigaction attribute_hidden;
++# endif
++# define __need_size_t
++# include <stddef.h>
++/* candidate for attribute_hidden, if NPTL would behave */
++extern int __syscall_rt_sigaction(int, const struct sigaction *,
++ struct sigaction *, size_t)
++# ifndef __UCLIBC_HAS_THREADS_NATIVE__
++ attribute_hidden
++# endif
++ ;
++extern __typeof(sigaction) __libc_sigaction;
+ libc_hidden_proto(sigaction)
+
++# ifdef __mips__
++# define _KERNEL_NSIG_WORDS (_NSIG / _MIPS_SZLONG)
++typedef struct {
++ unsigned long sig[_KERNEL_NSIG_WORDS];
++} kernel_sigset_t;
++# define __SYSCALL_SIGSET_T_SIZE (sizeof(kernel_sigset_t))
++# else
++# define __SYSCALL_SIGSET_T_SIZE (_NSIG / 8)
++# endif
++#endif
++
+ /* Put in SET all signals that are blocked and waiting to be delivered. */
+ extern int sigpending (sigset_t *__set) __THROW __nonnull ((1));
+
+@@ -300,7 +340,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)
++extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
+ __nonnull ((1, 2));
+
+ # if defined __USE_POSIX199309 && defined __UCLIBC_HAS_REALTIME__
+@@ -308,30 +348,29 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int sigwaitinfo (__const sigset_t *__restrict __set,
++extern int sigwaitinfo (const sigset_t *__restrict __set,
+ siginfo_t *__restrict __info) __nonnull ((1));
+ #ifdef _LIBC
+ extern __typeof(sigwaitinfo) __sigwaitinfo attribute_hidden;
+ #endif
+-libc_hidden_proto(sigwaitinfo)
+
+ /* Select any of pending signals from SET and place information in INFO.
+ Wait the time specified by TIMEOUT if no signal is pending.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int sigtimedwait (__const sigset_t *__restrict __set,
++extern int sigtimedwait (const sigset_t *__restrict __set,
+ siginfo_t *__restrict __info,
+- __const struct timespec *__restrict __timeout)
++ const struct timespec *__restrict __timeout)
+ __nonnull ((1));
+ #ifdef _LIBC
+-extern __typeof(sigtimedwait) __sigtimedwait attribute_hidden;
+-#endif
++extern __typeof(sigtimedwait) __sigtimedwait_nocancel attribute_hidden;
+ libc_hidden_proto(sigtimedwait)
++#endif
+
+ /* Send signal SIG to the process PID. Associate data in VAL with the
+ signal. */
+-extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val)
++extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
+ __THROW;
+ # endif /* Use POSIX 199306. */
+
+@@ -343,9 +382,10 @@
+ /* Names of the signals. This variable exists only for compatibility.
+ Use `strsignal' instead (see <string.h>). */
+ # define _sys_siglist sys_siglist
+-extern __const char *__const sys_siglist[_NSIG];
++extern const char *const sys_siglist[_NSIG];
+ # endif
+
++#ifndef __UCLIBC_STRICT_HEADERS__
+ /* Structure passed to `sigvec'. */
+ struct sigvec
+ {
+@@ -360,27 +400,34 @@
+ # define SV_ONSTACK (1 << 0)/* Take the signal on the signal stack. */
+ # define SV_INTERRUPT (1 << 1)/* Do not restart system calls. */
+ # define SV_RESETHAND (1 << 2)/* Reset handler to SIG_DFL on receipt. */
++#endif
+
+
++#if 0
+ /* If VEC is non-NULL, set the handler for SIG to the `sv_handler' member
+ of VEC. The signals in `sv_mask' will be blocked while the handler runs.
+ If the SV_RESETHAND bit is set in `sv_flags', the handler for SIG will be
+ reset to SIG_DFL before `sv_handler' is entered. If OVEC is non-NULL,
+ it is filled in with the old information for SIG. */
+-extern int sigvec (int __sig, __const struct sigvec *__vec,
++extern int sigvec (int __sig, const struct sigvec *__vec,
+ struct sigvec *__ovec) __THROW;
++#endif
+
+
+ /* Get machine-dependent `struct sigcontext' and signal subcodes. */
+ # include <bits/sigcontext.h>
+
++#if 0
+ /* Restore the state saved in SCP. */
+ extern int sigreturn (struct sigcontext *__scp) __THROW;
++#endif
+
+ #endif /* use BSD. */
+
+
+ #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
++# define __need_size_t
++# include <stddef.h>
+
+ # ifdef __UCLIBC_SUSV4_LEGACY__
+ /* If INTERRUPT is nonzero, make signal SIG interrupt system calls
+@@ -406,7 +453,7 @@
+
+ /* Alternate signal handler stack interface.
+ This interface should always be preferred over `sigstack'. */
+-extern int sigaltstack (__const struct sigaltstack *__restrict __ss,
++extern int sigaltstack (const struct sigaltstack *__restrict __ss,
+ struct sigaltstack *__restrict __oss) __THROW;
+
+ #endif /* use BSD or X/Open Unix. */
+@@ -442,6 +489,13 @@
+ /* Return number of available real-time signal with lowest priority. */
+ extern int __libc_current_sigrtmax (void) __THROW;
+
++#ifdef _LIBC
++extern sigset_t _sigintr attribute_hidden;
++/* simplified version without parameter checking */
++# include <string.h>
++# undef __sigemptyset
++# define __sigemptyset(ss) (memset(ss, '\0', sizeof(sigset_t)), 0)
++#endif
+ #endif /* signal.h */
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/spawn.h uClibc-git/include/spawn.h
+--- uClibc-0.9.33.2/include/spawn.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/include/spawn.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,289 @@
++/* Definitions for POSIX spawn interface.
++ Copyright (C) 2000,2003,2004,2009,2011,2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SPAWN_H
++#define _SPAWN_H 1
++
++#include <features.h>
++#include <sched.h>
++#define __need_sigset_t
++#include <signal.h>
++#include <sys/types.h>
++
++/* For the tiny inlines (errno/free/memset). */
++#include <errno.h>
++#include <string.h>
++#include <stdlib.h>
++
++
++/* Data structure to contain attributes for thread creation. */
++typedef struct
++{
++ short int __flags;
++ pid_t __pgrp;
++ sigset_t __sd;
++ sigset_t __ss;
++ struct sched_param __sp;
++ int __policy;
++ int __pad[16];
++} posix_spawnattr_t;
++
++
++/* Data structure to contain information about the actions to be
++ performed in the new process with respect to file descriptors. */
++typedef struct
++{
++ int __allocated;
++ int __used;
++ struct __spawn_action *__actions;
++ int __pad[16];
++} posix_spawn_file_actions_t;
++
++
++/* Flags to be set in the `posix_spawnattr_t'. */
++#define POSIX_SPAWN_RESETIDS 0x01
++#define POSIX_SPAWN_SETPGROUP 0x02
++#define POSIX_SPAWN_SETSIGDEF 0x04
++#define POSIX_SPAWN_SETSIGMASK 0x08
++#define POSIX_SPAWN_SETSCHEDPARAM 0x10
++#define POSIX_SPAWN_SETSCHEDULER 0x20
++#ifdef __USE_GNU
++# define POSIX_SPAWN_USEVFORK 0x40
++#endif
++
++
++#define __POSIX_SPAWN_MASK (POSIX_SPAWN_RESETIDS \
++ | POSIX_SPAWN_SETPGROUP \
++ | POSIX_SPAWN_SETSIGDEF \
++ | POSIX_SPAWN_SETSIGMASK \
++ | POSIX_SPAWN_SETSCHEDPARAM \
++ | POSIX_SPAWN_SETSCHEDULER \
++ | POSIX_SPAWN_USEVFORK)
++
++__BEGIN_DECLS
++
++/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
++ Before running the process perform the actions described in FILE-ACTIONS.
++
++ This function is a possible cancellation point and therefore not
++ marked with __THROW. */
++extern int posix_spawn (pid_t *__restrict __pid,
++ const char *__restrict __path,
++ const posix_spawn_file_actions_t *__restrict
++ __file_actions,
++ const posix_spawnattr_t *__restrict __attrp,
++ char *const __argv[__restrict_arr],
++ char *const __envp[__restrict_arr]);
++
++/* Similar to `posix_spawn' but search for FILE in the PATH.
++
++ This function is a possible cancellation point and therefore not
++ marked with __THROW. */
++extern int posix_spawnp (pid_t *__pid, const char *__file,
++ const posix_spawn_file_actions_t *__file_actions,
++ const posix_spawnattr_t *__attrp,
++ char *const __argv[], char *const __envp[]);
++
++
++/* Initialize data structure with attributes for `spawn' to default values. */
++static inline
++int posix_spawnattr_init (posix_spawnattr_t *__attr)
++{
++ memset (__attr, 0, sizeof (*__attr));
++ return 0;
++}
++
++/* Free resources associated with ATTR. */
++static inline
++int posix_spawnattr_destroy (posix_spawnattr_t *__attr)
++{
++ return 0;
++}
++
++/* Store signal mask for signals with default handling from ATTR in
++ SIGDEFAULT. */
++static inline
++int posix_spawnattr_getsigdefault (const posix_spawnattr_t *
++ __restrict __attr,
++ sigset_t *__restrict __sigdefault)
++{
++ memcpy (__sigdefault, &__attr->__sd, sizeof (sigset_t));
++ return 0;
++}
++
++/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */
++static inline
++int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr,
++ const sigset_t *__restrict
++ __sigdefault)
++{
++ memcpy (&__attr->__sd, __sigdefault, sizeof (sigset_t));
++ return 0;
++}
++
++/* Store signal mask for the new process from ATTR in SIGMASK. */
++static inline
++int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict
++ __attr,
++ sigset_t *__restrict __sigmask)
++{
++ memcpy (__sigmask, &__attr->__ss, sizeof (sigset_t));
++ return 0;
++}
++
++/* Set signal mask for the new process in ATTR to SIGMASK. */
++static inline
++int posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr,
++ const sigset_t *__restrict __sigmask)
++{
++ memcpy (&__attr->__ss, __sigmask, sizeof (sigset_t));
++ return 0;
++}
++
++/* Get flag word from the attribute structure. */
++static inline
++int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict
++ __attr,
++ short int *__restrict __flags)
++{
++ *__flags = __attr->__flags;
++ return 0;
++}
++
++/* Store flags in the attribute structure. */
++static inline
++int posix_spawnattr_setflags (posix_spawnattr_t *_attr,
++ short int __flags)
++{
++ /* Check no invalid bits are set. */
++ if (__flags & ~__POSIX_SPAWN_MASK)
++ return EINVAL;
++
++ _attr->__flags = __flags;
++ return 0;
++}
++
++/* Get process group ID from the attribute structure. */
++static inline
++int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict
++ __attr, pid_t *__restrict __pgroup)
++{
++ *__pgroup = __attr->__pgrp;
++ return 0;
++}
++
++/* Store process group ID in the attribute structure. */
++static inline
++int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
++ pid_t __pgroup)
++{
++ __attr->__pgrp = __pgroup;
++ return 0;
++}
++
++/* Get scheduling policy from the attribute structure. */
++static inline
++int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *
++ __restrict __attr,
++ int *__restrict __schedpolicy)
++{
++ *__schedpolicy = __attr->__policy;
++ return 0;
++}
++
++/* Store scheduling policy in the attribute structure. */
++static inline
++int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr,
++ int __schedpolicy)
++{
++ switch (__schedpolicy) {
++ case SCHED_OTHER:
++ case SCHED_FIFO:
++ case SCHED_RR:
++ break;
++ default:
++ return EINVAL;
++ }
++
++ __attr->__policy = __schedpolicy;
++ return 0;
++}
++
++/* Get scheduling parameters from the attribute structure. */
++static inline
++int posix_spawnattr_getschedparam (const posix_spawnattr_t *
++ __restrict __attr,
++ struct sched_param *__restrict
++ __schedparam)
++{
++ memcpy (__schedparam, &__attr->__sp, sizeof (__attr->__sp));
++ return 0;
++}
++
++/* Store scheduling parameters in the attribute structure. */
++static inline
++int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr,
++ const struct sched_param *
++ __restrict __schedparam)
++{
++ __attr->__sp = *__schedparam;
++ return 0;
++}
++
++/* Initialize data structure for file attribute for `spawn' call. */
++static inline
++int posix_spawn_file_actions_init (posix_spawn_file_actions_t *
++ __file_actions)
++{
++ memset (__file_actions, 0, sizeof (*__file_actions));
++ return 0;
++}
++
++/* Free resources associated with FILE-ACTIONS. */
++static inline
++int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *
++ __file_actions)
++{
++ free (__file_actions->__actions);
++ return 0;
++}
++
++/* Add an action to FILE-ACTIONS which tells the implementation to call
++ `open' for the given file during the `spawn' call. */
++extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *
++ __restrict __file_actions,
++ int __fd,
++ const char *__restrict __path,
++ int __oflag, mode_t __mode)
++ __THROW;
++
++/* Add an action to FILE-ACTIONS which tells the implementation to call
++ `close' for the given file descriptor during the `spawn' call. */
++extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *
++ __file_actions, int __fd)
++ __THROW;
++
++/* Add an action to FILE-ACTIONS which tells the implementation to call
++ `dup2' for the given file descriptors during the `spawn' call. */
++extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *
++ __file_actions,
++ int __fd, int __newfd) __THROW;
++
++__END_DECLS
++
++#endif /* spawn.h */
+diff -Nur uClibc-0.9.33.2/include/stdint.h uClibc-git/include/stdint.h
+--- uClibc-0.9.33.2/include/stdint.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/stdint.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99: 7.18 Integer types <stdint.h>
+diff -Nur uClibc-0.9.33.2/include/stdio_ext.h uClibc-git/include/stdio_ext.h
+--- uClibc-0.9.33.2/include/stdio_ext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/stdio_ext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This header contains the same definitions as the header of the same name
+ on Sun's Solaris OS. */
+diff -Nur uClibc-0.9.33.2/include/stdio.h uClibc-git/include/stdio.h
+--- uClibc-0.9.33.2/include/stdio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/stdio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.19 Input/output <stdio.h>
+@@ -142,16 +141,17 @@
+
+ __BEGIN_NAMESPACE_STD
+ /* Remove file FILENAME. */
+-extern int remove (__const char *__filename) __THROW;
++extern int remove (const char *__filename) __THROW;
+ libc_hidden_proto(remove)
+ /* Rename file OLD to NEW. */
+-extern int rename (__const char *__old, __const char *__new) __THROW;
++extern int rename (const char *__old, const char *__new) __THROW;
+ __END_NAMESPACE_STD
+
+ #ifdef __USE_ATFILE
+ /* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */
+-extern int renameat (int __oldfd, __const char *__old, int __newfd,
+- __const char *__new) __THROW;
++extern int renameat (int __oldfd, const char *__old, int __newfd,
++ const char *__new) __THROW;
++libc_hidden_proto(renameat)
+ #endif
+
+ __BEGIN_NAMESPACE_STD
+@@ -194,7 +194,7 @@
+ If not and if DIR is not NULL, that value is checked. If that fails,
+ P_tmpdir is tried and finally "/tmp". The storage for the filename
+ is allocated by `malloc'. */
+-extern char *tempnam (__const char *__dir, __const char *__pfx)
++extern char *tempnam (const char *__dir, const char *__pfx)
+ __THROW __attribute_malloc__ __wur;
+ #endif
+
+@@ -242,23 +242,23 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern FILE *fopen (__const char *__restrict __filename,
+- __const char *__restrict __modes) __wur;
++extern FILE *fopen (const char *__restrict __filename,
++ const char *__restrict __modes) __wur;
+ libc_hidden_proto(fopen)
+ /* Open a file, replacing an existing stream with it.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern FILE *freopen (__const char *__restrict __filename,
+- __const char *__restrict __modes,
++extern FILE *freopen (const char *__restrict __filename,
++ const char *__restrict __modes,
+ FILE *__restrict __stream) __wur;
+ #else
+ # ifdef __REDIRECT
+-extern FILE *__REDIRECT (fopen, (__const char *__restrict __filename,
+- __const char *__restrict __modes), fopen64)
++extern FILE *__REDIRECT (fopen, (const char *__restrict __filename,
++ const char *__restrict __modes), fopen64)
+ __wur;
+-extern FILE *__REDIRECT (freopen, (__const char *__restrict __filename,
+- __const char *__restrict __modes,
++extern FILE *__REDIRECT (freopen, (const char *__restrict __filename,
++ const char *__restrict __modes,
+ FILE *__restrict __stream), freopen64)
+ __wur;
+ # else
+@@ -268,38 +268,39 @@
+ #endif
+ __END_NAMESPACE_STD
+ #ifdef __USE_LARGEFILE64
+-extern FILE *fopen64 (__const char *__restrict __filename,
+- __const char *__restrict __modes) __wur;
++extern FILE *fopen64 (const char *__restrict __filename,
++ const char *__restrict __modes) __wur;
+ libc_hidden_proto(fopen64)
+-extern FILE *freopen64 (__const char *__restrict __filename,
+- __const char *__restrict __modes,
++extern FILE *freopen64 (const char *__restrict __filename,
++ const char *__restrict __modes,
+ FILE *__restrict __stream) __wur;
+ #endif
+
+ #ifdef __USE_POSIX
+ /* Create a new stream that refers to an existing system file descriptor. */
+-extern FILE *fdopen (int __fd, __const char *__modes) __THROW __wur;
++extern FILE *fdopen (int __fd, const char *__modes) __THROW __wur;
+ libc_hidden_proto(fdopen)
+ #endif
+
+-#ifdef __USE_GNU
+ #ifdef __UCLIBC_HAS_GLIBC_CUSTOM_STREAMS__
++#ifdef __USE_GNU
+ /* Create a new stream that refers to the given magic cookie,
+ and uses the given functions for input and output. */
+ extern FILE *fopencookie (void *__restrict __magic_cookie,
+- __const char *__restrict __modes,
++ const char *__restrict __modes,
+ _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
+ libc_hidden_proto(fopencookie)
++#endif
+
++#ifdef __USE_XOPEN2K8
+ /* Create a new stream that refers to a memory buffer. */
+-extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
++extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
+ __THROW __wur;
+
+ /* Open a stream that writes into a malloc'd buffer that is expanded as
+ necessary. *BUFLOC and *SIZELOC are updated with the buffer's location
+ and the number of characters written on fflush or fclose. */
+-extern FILE *open_memstream (char **__restrict __bufloc,
+- size_t *__restrict __sizeloc) __THROW __wur;
++extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
+ libc_hidden_proto(open_memstream)
+ #endif
+ #endif
+@@ -334,17 +335,17 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern int fprintf (FILE *__restrict __stream,
+- __const char *__restrict __format, ...);
++ const char *__restrict __format, ...);
+ libc_hidden_proto(fprintf)
+ /* Write formatted output to stdout.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int printf (__const char *__restrict __format, ...);
++extern int printf (const char *__restrict __format, ...);
+ libc_hidden_proto(printf)
+ /* Write formatted output to S. */
+ extern int sprintf (char *__restrict __s,
+- __const char *__restrict __format, ...)
++ const char *__restrict __format, ...)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
+ libc_hidden_proto(sprintf)
+
+@@ -352,16 +353,16 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
++extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
+ __gnuc_va_list __arg);
+ libc_hidden_proto(vfprintf)
+ /* Write formatted output to stdout from argument list ARG.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
++extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
+ /* Write formatted output to S from argument list ARG. */
+-extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
++extern int vsprintf (char *__restrict __s, const char *__restrict __format,
+ __gnuc_va_list __arg)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
+ __END_NAMESPACE_STD
+@@ -370,12 +371,12 @@
+ __BEGIN_NAMESPACE_C99
+ /* Maximum chars of output to write in MAXLEN. */
+ extern int snprintf (char *__restrict __s, size_t __maxlen,
+- __const char *__restrict __format, ...)
++ const char *__restrict __format, ...)
+ __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
+ libc_hidden_proto(snprintf)
+
+ extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+- __const char *__restrict __format, __gnuc_va_list __arg)
++ const char *__restrict __format, __gnuc_va_list __arg)
+ __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
+ libc_hidden_proto(vsnprintf)
+ __END_NAMESPACE_C99
+@@ -384,31 +385,33 @@
+ #ifdef __USE_GNU
+ /* Write formatted output to a string dynamically allocated with `malloc'.
+ Store the address of the string in *PTR. */
+-extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
++extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
+ __gnuc_va_list __arg)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
+ libc_hidden_proto(vasprintf)
+ #if 0 /* uClibc: disabled */
+ extern int __asprintf (char **__restrict __ptr,
+- __const char *__restrict __fmt, ...)
++ const char *__restrict __fmt, ...)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+ #endif
+ extern int asprintf (char **__restrict __ptr,
+- __const char *__restrict __fmt, ...)
++ const char *__restrict __fmt, ...)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+ libc_hidden_proto(asprintf)
++#endif
+
++#ifdef __USE_XOPEN2K8
+ /* Write formatted output to a file descriptor.
+
+ These functions are not part of POSIX and therefore no official
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation they are cancellation points and
+ therefore not marked with __THROW. */
+-extern int vdprintf (int __fd, __const char *__restrict __fmt,
++extern int vdprintf (int __fd, const char *__restrict __fmt,
+ __gnuc_va_list __arg)
+ __attribute__ ((__format__ (__printf__, 2, 0)));
+ libc_hidden_proto(vdprintf)
+-extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
++extern int dprintf (int __fd, const char *__restrict __fmt, ...)
+ __attribute__ ((__format__ (__printf__, 2, 3)));
+ #endif
+
+@@ -419,18 +422,18 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern int fscanf (FILE *__restrict __stream,
+- __const char *__restrict __format, ...)
++ const char *__restrict __format, ...)
+ __attribute__ ((__format__ (__scanf__, 2, 3))) __wur;
+ libc_hidden_proto(fscanf)
+ /* Read formatted input from stdin.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int scanf (__const char *__restrict __format, ...)
++extern int scanf (const char *__restrict __format, ...)
+ __attribute__ ((__format__ (__scanf__, 1, 2))) __wur;
+ /* Read formatted input from S. */
+-extern int sscanf (__const char *__restrict __s,
+- __const char *__restrict __format, ...)
++extern int sscanf (const char *__restrict __s,
++ const char *__restrict __format, ...)
+ __THROW __attribute__ ((__format__ (__scanf__, 2, 3)));
+ libc_hidden_proto(sscanf)
+ __END_NAMESPACE_STD
+@@ -441,7 +444,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
++extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
+ __gnuc_va_list __arg)
+ __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
+ libc_hidden_proto(vfscanf)
+@@ -450,12 +453,12 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
++extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
+ __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
+
+ /* Read formatted input from S into argument list ARG. */
+-extern int vsscanf (__const char *__restrict __s,
+- __const char *__restrict __format, __gnuc_va_list __arg)
++extern int vsscanf (const char *__restrict __s,
++ const char *__restrict __format, __gnuc_va_list __arg)
+ __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
+ libc_hidden_proto(vsscanf)
+ __END_NAMESPACE_C99
+@@ -491,9 +494,6 @@
+ libc_hidden_proto(getc_unlocked)
+ extern int getchar_unlocked (void);
+ libc_hidden_proto(getchar_unlocked)
+-
+-/* SUSv3 allows getc_unlocked to be a macro */
+-#define getc_unlocked(_fp) __GETC_UNLOCKED(_fp)
+ #endif /* Use POSIX or MISC. */
+
+ #ifdef __USE_MISC
+@@ -519,7 +519,6 @@
+ extern int fputc (int __c, FILE *__stream);
+ libc_hidden_proto(fputc)
+ extern int putc (int __c, FILE *__stream);
+-libc_hidden_proto(putc)
+
+ /* Write a character to stdout.
+
+@@ -540,7 +539,6 @@
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+ extern int fputc_unlocked (int __c, FILE *__stream);
+-libc_hidden_proto(fputc_unlocked)
+ #endif /* Use MISC. */
+
+ #if defined __USE_POSIX || defined __USE_MISC
+@@ -549,11 +547,7 @@
+ These functions are possible cancellation points and therefore not
+ marked with __THROW. */
+ extern int putc_unlocked (int __c, FILE *__stream);
+-libc_hidden_proto(putc_unlocked)
+ extern int putchar_unlocked (int __c);
+-
+-/* SUSv3 allows putc_unlocked to be a macro */
+-#define putc_unlocked(_ch, _fp) __PUTC_UNLOCKED(_ch, _fp)
+ #endif /* Use POSIX or MISC. */
+
+
+@@ -597,7 +591,7 @@
+ #endif
+
+
+-#ifdef __USE_GNU
++#ifdef __USE_XOPEN2K8
+ /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
+ (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
+ NULL), pointing to *N characters of space. It is realloc'd as
+@@ -636,14 +630,14 @@
+
+ This function is a possible cancellation points and therefore not
+ marked with __THROW. */
+-extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
++extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
+ libc_hidden_proto(fputs)
+
+ /* Write a string, followed by a newline, to stdout.
+
+ This function is a possible cancellation points and therefore not
+ marked with __THROW. */
+-extern int puts (__const char *__s);
++extern int puts (const char *__s);
+
+
+ /* Push a character back onto the input buffer of STREAM.
+@@ -665,7 +659,7 @@
+
+ This function is a possible cancellation points and therefore not
+ marked with __THROW. */
+-extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
++extern size_t fwrite (const void *__restrict __ptr, size_t __size,
+ size_t __n, FILE *__restrict __s) __wur;
+ libc_hidden_proto(fwrite)
+ __END_NAMESPACE_STD
+@@ -677,7 +671,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int fputs_unlocked (__const char *__restrict __s,
++extern int fputs_unlocked (const char *__restrict __s,
+ FILE *__restrict __stream);
+ libc_hidden_proto(fputs_unlocked)
+ #endif
+@@ -692,7 +686,7 @@
+ extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+ size_t __n, FILE *__restrict __stream) __wur;
+ libc_hidden_proto(fread_unlocked)
+-extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
++extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
+ size_t __n, FILE *__restrict __stream) __wur;
+ libc_hidden_proto(fwrite_unlocked)
+ #endif
+@@ -760,13 +754,13 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
++extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+ #else
+ # ifdef __REDIRECT
+ extern int __REDIRECT (fgetpos, (FILE *__restrict __stream,
+ fpos_t *__restrict __pos), fgetpos64);
+ extern int __REDIRECT (fsetpos,
+- (FILE *__stream, __const fpos_t *__pos), fsetpos64);
++ (FILE *__stream, const fpos_t *__pos), fsetpos64);
+ # else
+ # define fgetpos fgetpos64
+ # define fsetpos fsetpos64
+@@ -780,7 +774,7 @@
+ extern __off64_t ftello64 (FILE *__stream) __wur;
+ libc_hidden_proto(ftello64)
+ extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+-extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
++extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
+ #endif
+
+ __BEGIN_NAMESPACE_STD
+@@ -805,7 +799,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern void perror (__const char *__s);
++extern void perror (const char *__s);
+ libc_hidden_proto(perror)
+ __END_NAMESPACE_STD
+
+@@ -814,7 +808,7 @@
+ function provides all the needed functionality. */
+ #ifdef __USE_BSD
+ extern int sys_nerr;
+-extern __const char *__const sys_errlist[];
++extern const char *const sys_errlist[];
+ #endif
+ #endif /* __UCLIBC_HAS_SYS_ERRLIST__ */
+
+@@ -838,7 +832,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern FILE *popen (__const char *__command, __const char *__modes) __wur;
++extern FILE *popen (const char *__command, const char *__modes) __wur;
+
+ /* Close a stream opened by popen and return the status of its child.
+
+@@ -860,18 +854,19 @@
+ #endif /* Use X/Open, but not issue 6. */
+
+
+-#if 0 /* def __USE_GNU uClibc note: not supported */
++#if defined __USE_GNU && defined __UCLIBC_HAS_OBSTACK__
+ struct obstack; /* See <obstack.h>. */
+
+ /* Write formatted output to an obstack. */
+ extern int obstack_printf (struct obstack *__restrict __obstack,
+- __const char *__restrict __format, ...)
++ const char *__restrict __format, ...)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
+ extern int obstack_vprintf (struct obstack *__restrict __obstack,
+- __const char *__restrict __format,
++ const char *__restrict __format,
+ __gnuc_va_list __args)
+ __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
+-#endif /* Use GNU. */
++libc_hidden_proto(obstack_vprintf)
++#endif /* USE_GNU && UCLIBC_HAS_OBSTACK. */
+
+
+ #if defined __USE_POSIX || defined __USE_MISC
+@@ -893,27 +888,31 @@
+ declared here which do not belong into this header. But we have to
+ follow. In GNU mode we don't do this nonsense. */
+ # define __need_getopt
++/* keep this on uClibc in bits/, we need it when GNU_GETOPT is disabled */
+ # include <bits/getopt.h>
+ #endif /* X/Open, but not issue 6 and not for GNU. */
+
+ /* If we are compiling with optimizing read this file. It contains
+ several optimizing inline functions and macros. */
++
++#ifdef __UCLIBC__
++
+ #define fgetc(_fp) __FGETC(_fp)
+ #define fputc(_ch, _fp) __FPUTC(_ch, _fp)
+
++#if defined __USE_POSIX || defined __USE_MISC
++/* SUSv3 allows getc_unlocked to be a macro */
++#define getc_unlocked(_fp) __GETC_UNLOCKED(_fp)
++/* SUSv3 allows putc_unlocked to be a macro */
++#define putc_unlocked(_ch, _fp) __PUTC_UNLOCKED(_ch, _fp)
++#endif
++
+ #ifdef __USE_MISC
+ #define fgetc_unlocked(_fp) __FGETC_UNLOCKED(_fp)
+ #define fputc_unlocked(_ch, _fp) __FPUTC_UNLOCKED(_ch, _fp)
+ #endif
+
+-#ifndef __STDIO_GETC_MACRO
+-#define __stdin stdin
+-#endif
+ #define getchar() __GETC(__stdin)
+-
+-#ifndef __STDIO_PUTC_MACRO
+-#define __stdout stdout
+-#endif
+ #define putchar(_ch) __PUTC((_ch), __stdout)
+
+ #if defined __USE_POSIX || defined __USE_MISC
+@@ -932,6 +931,8 @@
+ #define ferror_unlocked(_fp) __FERROR_UNLOCKED(_fp)
+ #endif
+
++#endif
++
+ __END_DECLS
+
+ #endif /* <stdio.h> included. */
+diff -Nur uClibc-0.9.33.2/include/stdlib.h uClibc-git/include/stdlib.h
+--- uClibc-0.9.33.2/include/stdlib.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/stdlib.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.20 General utilities <stdlib.h>
+@@ -155,22 +154,22 @@
+ __BEGIN_NAMESPACE_STD
+ #ifdef __UCLIBC_HAS_FLOATS__
+ /* Convert a string to a floating-point number. */
+-extern double atof (__const char *__nptr)
++extern double atof (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+ #endif /* __UCLIBC_HAS_FLOATS__ */
+ /* Convert a string to an integer. */
+-extern int atoi (__const char *__nptr)
++extern int atoi (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+ libc_hidden_proto(atoi)
+ /* Convert a string to a long integer. */
+-extern long int atol (__const char *__nptr)
++extern long int atol (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+ __END_NAMESPACE_STD
+
+ #if defined __USE_ISOC99 || defined __USE_MISC
+ __BEGIN_NAMESPACE_C99
+ /* Convert a string to a long long integer. */
+-__extension__ extern long long int atoll (__const char *__nptr)
++__extension__ extern long long int atoll (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+ __END_NAMESPACE_C99
+ #endif
+@@ -178,7 +177,7 @@
+ #ifdef __UCLIBC_HAS_FLOATS__
+ __BEGIN_NAMESPACE_STD
+ /* Convert a string to a floating-point number. */
+-extern double strtod (__const char *__restrict __nptr,
++extern double strtod (const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(strtod)
+@@ -187,10 +186,10 @@
+ #ifdef __USE_ISOC99
+ __BEGIN_NAMESPACE_C99
+ /* Likewise for `float' and `long double' sizes of floating-point numbers. */
+-extern float strtof (__const char *__restrict __nptr,
++extern float strtof (const char *__restrict __nptr,
+ char **__restrict __endptr) __THROW __nonnull ((1)) __wur;
+
+-extern long double strtold (__const char *__restrict __nptr,
++extern long double strtold (const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __THROW __nonnull ((1)) __wur;
+ __END_NAMESPACE_C99
+@@ -199,12 +198,12 @@
+
+ __BEGIN_NAMESPACE_STD
+ /* Convert a string to a long integer. */
+-extern long int strtol (__const char *__restrict __nptr,
++extern long int strtol (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(strtol)
+ /* Convert a string to an unsigned long integer. */
+-extern unsigned long int strtoul (__const char *__restrict __nptr,
++extern unsigned long int strtoul (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(strtoul)
+@@ -215,12 +214,12 @@
+
+ /* Convert a string to a quadword integer. */
+ __extension__
+-extern quad_t strtoq (__const char *__restrict __nptr,
++extern quad_t strtoq (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ /* Convert a string to an unsigned quadword integer. */
+ __extension__
+-extern u_quad_t strtouq (__const char *__restrict __nptr,
++extern u_quad_t strtouq (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ #endif /* GCC and use BSD. */
+@@ -229,13 +228,13 @@
+ __BEGIN_NAMESPACE_C99
+ /* Convert a string to a quadword integer. */
+ __extension__
+-extern long long int strtoll (__const char *__restrict __nptr,
++extern long long int strtoll (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(strtoll)
+ /* Convert a string to an unsigned quadword integer. */
+ __extension__
+-extern unsigned long long int strtoull (__const char *__restrict __nptr,
++extern unsigned long long int strtoull (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur;
+ __END_NAMESPACE_C99
+@@ -260,39 +259,39 @@
+
+ /* Special versions of the functions above which take the locale to
+ use as an additional parameter. */
+-extern long int strtol_l (__const char *__restrict __nptr,
++extern long int strtol_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ __locale_t __loc) __THROW __nonnull ((1, 4)) __wur;
+ libc_hidden_proto(strtol_l)
+
+-extern unsigned long int strtoul_l (__const char *__restrict __nptr,
++extern unsigned long int strtoul_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW __nonnull ((1, 4)) __wur;
+ libc_hidden_proto(strtoul_l)
+
+ __extension__
+-extern long long int strtoll_l (__const char *__restrict __nptr,
++extern long long int strtoll_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ __locale_t __loc)
+ __THROW __nonnull ((1, 4)) __wur;
+
+ __extension__
+-extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
++extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW __nonnull ((1, 4)) __wur;
+
+ #ifdef __UCLIBC_HAS_FLOATS__
+-extern double strtod_l (__const char *__restrict __nptr,
++extern double strtod_l (const char *__restrict __nptr,
+ char **__restrict __endptr, __locale_t __loc)
+ __THROW __nonnull ((1, 3)) __wur;
+
+-extern float strtof_l (__const char *__restrict __nptr,
++extern float strtof_l (const char *__restrict __nptr,
+ char **__restrict __endptr, __locale_t __loc)
+ __THROW __nonnull ((1, 3)) __wur;
+
+-extern long double strtold_l (__const char *__restrict __nptr,
++extern long double strtold_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ __locale_t __loc)
+ __THROW __nonnull ((1, 3)) __wur;
+@@ -307,7 +306,7 @@
+ extern char *l64a (long int __n) __THROW __wur;
+
+ /* Read a number from a string S in base 64 as above. */
+-extern long int a64l (__const char *__s)
++extern long int a64l (const char *__s)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+ #endif /* Use SVID || extended X/Open. */
+@@ -564,14 +563,14 @@
+
+ __BEGIN_NAMESPACE_STD
+ /* Return the value of envariable NAME, or NULL if it doesn't exist. */
+-extern char *getenv (__const char *__name) __THROW __nonnull ((1)) __wur;
++extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(getenv)
+ __END_NAMESPACE_STD
+
+ #if 0
+ /* This function is similar to the above but returns NULL if the
+ programs is running with SUID or SGID enabled. */
+-extern char *__secure_getenv (__const char *__name)
++extern char *__secure_getenv (const char *__name)
+ __THROW __nonnull ((1)) __wur;
+ #endif
+
+@@ -585,12 +584,12 @@
+ #if defined __USE_BSD || defined __USE_XOPEN2K
+ /* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value. */
+-extern int setenv (__const char *__name, __const char *__value, int __replace)
++extern int setenv (const char *__name, const char *__value, int __replace)
+ __THROW __nonnull ((2));
+ libc_hidden_proto(setenv)
+
+ /* Remove the variable NAME from the environment. */
+-extern int unsetenv (__const char *__name) __THROW;
++extern int unsetenv (const char *__name) __THROW;
+ libc_hidden_proto(unsetenv)
+ #endif
+
+@@ -652,20 +651,43 @@
+ extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
+ #endif
+
++#ifdef __USE_GNU
++/* Generate a unique temporary file name from TEMPLATE similar to
++ mkstemp. But allow the caller to pass additional flags which are
++ used in the open call to create the file..
++
++ This function is a possible cancellation point and therefore not
++ marked with __THROW. */
++# ifndef __USE_FILE_OFFSET64
++extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
++# else
++# ifdef __REDIRECT
++extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
++ __nonnull ((1)) __wur;
++# else
++# define mkostemp mkostemp64
++# endif
++# endif
++# ifdef __USE_LARGEFILE64
++extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
++# endif
++
++#endif
++
+
+ __BEGIN_NAMESPACE_STD
+ /* Execute the given line as a shell command.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int system (__const char *__command) __wur;
++extern int system (const char *__command) __wur;
+ __END_NAMESPACE_STD
+
+
+ #ifdef __USE_GNU
+ /* Return a malloc'd string containing the canonical absolute name of the
+ existing named file. */
+-extern char *canonicalize_file_name (__const char *__name)
++extern char *canonicalize_file_name (const char *__name)
+ __THROW __nonnull ((1)) __wur;
+ #endif
+
+@@ -675,7 +697,7 @@
+ PATH_MAX chars or more, returns null with `errno' set to
+ ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. */
+-extern char *realpath (__const char *__restrict __name,
++extern char *realpath (const char *__restrict __name,
+ char *__restrict __resolved) __THROW __wur;
+ libc_hidden_proto(realpath)
+ #endif
+@@ -684,20 +706,20 @@
+ /* Shorthand for type of comparison functions. */
+ #ifndef __COMPAR_FN_T
+ # define __COMPAR_FN_T
+-typedef int (*__compar_fn_t) (__const void *, __const void *);
++typedef int (*__compar_fn_t) (const void *, const void *);
+
+ # ifdef __USE_GNU
+ typedef __compar_fn_t comparison_fn_t;
+ # endif
+ #endif
+ #ifdef __USE_GNU
+-typedef int (*__compar_d_fn_t) (__const void *, __const void *, void *);
++typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+ #endif
+
+ __BEGIN_NAMESPACE_STD
+ /* Do a binary search for KEY in BASE, which consists of NMEMB elements
+ of SIZE bytes each, using COMPAR to perform the comparisons. */
+-extern void *bsearch (__const void *__key, __const void *__base,
++extern void *bsearch (const void *__key, const void *__base,
+ size_t __nmemb, size_t __size, __compar_fn_t __compar)
+ __nonnull ((1, 2, 5)) __wur;
+
+@@ -807,11 +829,11 @@
+ __BEGIN_NAMESPACE_STD
+ /* Return the length of the multibyte character
+ in S, which is no longer than N. */
+-extern int mblen (__const char *__s, size_t __n) __THROW __wur;
++extern int mblen (const char *__s, size_t __n) __THROW __wur;
+ /* Return the length of the given multibyte character,
+ putting its `wchar_t' representation in *PWC. */
+ extern int mbtowc (wchar_t *__restrict __pwc,
+- __const char *__restrict __s, size_t __n) __THROW __wur;
++ const char *__restrict __s, size_t __n) __THROW __wur;
+ /* Put the multibyte character represented
+ by WCHAR in S, returning its length. */
+ extern int wctomb (char *__s, wchar_t __wchar) __THROW __wur;
+@@ -819,21 +841,21 @@
+
+ /* Convert a multibyte string to a wide char string. */
+ extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+- __const char *__restrict __s, size_t __n) __THROW;
++ const char *__restrict __s, size_t __n) __THROW;
+ /* Convert a wide char string to multibyte string. */
+ extern size_t wcstombs (char *__restrict __s,
+- __const wchar_t *__restrict __pwcs, size_t __n)
++ const wchar_t *__restrict __pwcs, size_t __n)
+ __THROW;
+ __END_NAMESPACE_STD
+ #endif /* __UCLIBC_HAS_WCHAR__ */
+
+
+-#if 0 /*def __USE_SVID*/
++#ifdef __USE_SVID
+ /* Determine whether the string value of RESPONSE matches the affirmation
+ or negative response expression as specified by the LC_MESSAGES category
+ in the program's current locale. Returns 1 if affirmative, 0 if
+ negative, and -1 if not matching. */
+-extern int rpmatch (__const char *__response) __THROW __nonnull ((1)) __wur;
++extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
+ #endif
+
+
+@@ -845,7 +867,7 @@
+ suboption. On exit *OPTIONP is set to the beginning of the next
+ token or at the terminating NUL character. */
+ extern int getsubopt (char **__restrict __optionp,
+- char *__const *__restrict __tokens,
++ char *const *__restrict __tokens,
+ char **__restrict __valuep)
+ __THROW __nonnull ((1, 2, 3)) __wur;
+ #endif
+@@ -854,7 +876,7 @@
+ #ifdef __USE_XOPEN
+ # if defined __UCLIBC_HAS_CRYPT__
+ /* Setup DES tables according KEY. */
+-extern void setkey (__const char *__key) __THROW __nonnull ((1));
++extern void setkey (const char *__key) __THROW __nonnull ((1));
+ # endif /* __UCLIBC_HAS_CRYPT__ */
+ #endif
+
+@@ -864,7 +886,6 @@
+ #ifdef __USE_XOPEN2K
+ /* Return a master pseudo-terminal handle. */
+ extern int posix_openpt (int __oflag) __wur;
+-libc_hidden_proto(posix_openpt)
+ #endif
+
+ #ifdef __USE_XOPEN
+@@ -910,8 +931,8 @@
+ #endif
+
+ #ifdef __UCLIBC_HAS_ARC4RANDOM__
+-#include <stdint.h>
+-extern uint32_t arc4random(void);
++# include <sys/types.h>
++extern u_int32_t arc4random(void);
+ extern void arc4random_stir(void);
+ extern void arc4random_addrandom(unsigned char *, int);
+ #endif
+diff -Nur uClibc-0.9.33.2/include/string.h uClibc-git/include/string.h
+--- uClibc-0.9.33.2/include/string.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/string.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-1993, 1995-2003, 2004 Free Software Foundation, Inc.
++/* Copyright (C) 1991-1993,1995-2004,2007,2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.21 String handling <string.h>
+@@ -36,12 +35,12 @@
+ __BEGIN_NAMESPACE_STD
+ /* Copy N bytes of SRC to DEST. */
+ extern void *memcpy (void *__restrict __dest,
+- __const void *__restrict __src, size_t __n)
++ const void *__restrict __src, size_t __n)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(memcpy)
+ /* Copy N bytes of SRC to DEST, guaranteeing
+ correct behavior for overlapping strings. */
+-extern void *memmove (void *__dest, __const void *__src, size_t __n)
++extern void *memmove (void *__dest, const void *__src, size_t __n)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(memmove)
+ __END_NAMESPACE_STD
+@@ -50,7 +49,7 @@
+ Return the position in DEST one byte past where C was copied,
+ or NULL if C was not found in the first N bytes of SRC. */
+ #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN
+-extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
++extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
+ int __c, size_t __n)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(memccpy)
+@@ -63,12 +62,12 @@
+ libc_hidden_proto(memset)
+
+ /* Compare N bytes of S1 and S2. */
+-extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
++extern int memcmp (const void *__s1, const void *__s2, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(memcmp)
+
+ /* Search N bytes of S for C. */
+-extern void *memchr (__const void *__s, int __c, size_t __n)
++extern void *memchr (const void *__s, int __c, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(memchr)
+ __END_NAMESPACE_STD
+@@ -76,12 +75,12 @@
+ #ifdef __USE_GNU
+ /* Search in S for C. This is similar to `memchr' but there is no
+ length limit. */
+-extern void *rawmemchr (__const void *__s, int __c)
++extern void *rawmemchr (const void *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(rawmemchr)
+
+ /* Search N bytes of S for the final occurrence of C. */
+-extern void *memrchr (__const void *__s, int __c, size_t __n)
++extern void *memrchr (const void *__s, int __c, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(memrchr)
+ #endif
+@@ -89,62 +88,62 @@
+
+ __BEGIN_NAMESPACE_STD
+ /* Copy SRC to DEST. */
+-extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
++extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(strcpy)
+ /* Copy no more than N characters of SRC to DEST. */
+ extern char *strncpy (char *__restrict __dest,
+- __const char *__restrict __src, size_t __n)
++ const char *__restrict __src, size_t __n)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(strncpy)
+
+ /* Append SRC onto DEST. */
+-extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
++extern char *strcat (char *__restrict __dest, const char *__restrict __src)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(strcat)
+ /* Append no more than N characters from SRC onto DEST. */
+-extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
++extern char *strncat (char *__restrict __dest, const char *__restrict __src,
+ size_t __n) __THROW __nonnull ((1, 2));
+ libc_hidden_proto(strncat)
+
+ /* Compare S1 and S2. */
+-extern int strcmp (__const char *__s1, __const char *__s2)
++extern int strcmp (const char *__s1, const char *__s2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strcmp)
+ /* Compare N characters of S1 and S2. */
+-extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
++extern int strncmp (const char *__s1, const char *__s2, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strncmp)
+
+ /* Compare the collated forms of S1 and S2. */
+-extern int strcoll (__const char *__s1, __const char *__s2)
++extern int strcoll (const char *__s1, const char *__s2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strcoll)
+ /* Put a transformation of SRC into no more than N bytes of DEST. */
+ extern size_t strxfrm (char *__restrict __dest,
+- __const char *__restrict __src, size_t __n)
++ const char *__restrict __src, size_t __n)
+ __THROW __nonnull ((2));
+ __END_NAMESPACE_STD
+
+-#if defined __USE_GNU && defined __UCLIBC_HAS_XLOCALE__
++#if defined __USE_XOPEN2K8 && defined __UCLIBC_HAS_XLOCALE__
+ /* The following functions are equivalent to the both above but they
+ take the locale they use for the collation as an extra argument.
+ This is not standardsized but something like will come. */
+ # include <xlocale.h>
+
+ /* Compare the collated forms of S1 and S2 using rules from L. */
+-extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
++extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
+ __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+ libc_hidden_proto(strcoll_l)
+ /* Put a transformation of SRC into no more than N bytes of DEST. */
+-extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
++extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
+ __locale_t __l) __THROW __nonnull ((2, 4));
+ libc_hidden_proto(strxfrm_l)
+ #endif
+
+ #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+ /* Duplicate S, returning an identical malloc'd string. */
+-extern char *strdup (__const char *__s)
++extern char *strdup (const char *__s)
+ __THROW __attribute_malloc__ __nonnull ((1));
+ libc_hidden_proto(strdup)
+ #endif
+@@ -152,8 +151,8 @@
+ /* Return a malloc'd copy of at most N bytes of STRING. The
+ resultant string is terminated even if no null terminator
+ appears before STRING[N]. */
+-#if defined __USE_GNU
+-extern char *strndup (__const char *__string, size_t __n)
++#if defined __USE_XOPEN2K8
++extern char *strndup (const char *__string, size_t __n)
+ __THROW __attribute_malloc__ __nonnull ((1));
+ libc_hidden_proto(strndup)
+ #endif
+@@ -163,7 +162,7 @@
+ # define strdupa(s) \
+ (__extension__ \
+ ({ \
+- __const char *__old = (s); \
++ const char *__old = (s); \
+ size_t __len = strlen (__old) + 1; \
+ char *__new = (char *) __builtin_alloca (__len); \
+ (char *) memcpy (__new, __old, __len); \
+@@ -173,7 +172,7 @@
+ # define strndupa(s, n) \
+ (__extension__ \
+ ({ \
+- __const char *__old = (s); \
++ const char *__old = (s); \
+ size_t __len = strnlen (__old, (n)); \
+ char *__new = (char *) __builtin_alloca (__len + 1); \
+ __new[__len] = '\0'; \
+@@ -183,11 +182,11 @@
+
+ __BEGIN_NAMESPACE_STD
+ /* Find the first occurrence of C in S. */
+-extern char *strchr (__const char *__s, int __c)
++extern char *strchr (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(strchr)
+ /* Find the last occurrence of C in S. */
+-extern char *strrchr (__const char *__s, int __c)
++extern char *strrchr (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(strrchr)
+ __END_NAMESPACE_STD
+@@ -195,7 +194,7 @@
+ #ifdef __USE_GNU
+ /* This function is similar to `strchr'. But it returns a pointer to
+ the closing NUL byte in case C is not found in S. */
+-extern char *strchrnul (__const char *__s, int __c)
++extern char *strchrnul (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(strchrnul)
+ #endif
+@@ -203,26 +202,26 @@
+ __BEGIN_NAMESPACE_STD
+ /* Return the length of the initial segment of S which
+ consists entirely of characters not in REJECT. */
+-extern size_t strcspn (__const char *__s, __const char *__reject)
++extern size_t strcspn (const char *__s, const char *__reject)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strcspn)
+ /* Return the length of the initial segment of S which
+ consists entirely of characters in ACCEPT. */
+-extern size_t strspn (__const char *__s, __const char *__accept)
++extern size_t strspn (const char *__s, const char *__accept)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strspn)
+ /* Find the first occurrence in S of any character in ACCEPT. */
+-extern char *strpbrk (__const char *__s, __const char *__accept)
++extern char *strpbrk (const char *__s, const char *__accept)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strpbrk)
+ /* Find the first occurrence of NEEDLE in HAYSTACK. */
+-extern char *strstr (__const char *__haystack, __const char *__needle)
++extern char *strstr (const char *__haystack, const char *__needle)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strstr)
+
+
+ /* Divide S into tokens separated by characters in DELIM. */
+-extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
++extern char *strtok (char *__restrict __s, const char *__restrict __delim)
+ __THROW __nonnull ((2));
+ libc_hidden_proto(strtok)
+ __END_NAMESPACE_STD
+@@ -231,12 +230,12 @@
+ passed between calls are stored in SAVE_PTR. */
+ #if 0 /* uClibc: disabled */
+ extern char *__strtok_r (char *__restrict __s,
+- __const char *__restrict __delim,
++ const char *__restrict __delim,
+ char **__restrict __save_ptr)
+ __THROW __nonnull ((2, 3));
+ #endif
+ #if defined __USE_POSIX || defined __USE_MISC
+-extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
++extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
+ char **__restrict __save_ptr)
+ __THROW __nonnull ((2, 3));
+ libc_hidden_proto(strtok_r)
+@@ -244,7 +243,7 @@
+
+ #ifdef __USE_GNU
+ /* Similar to `strstr' but this function ignores the case of both strings. */
+-extern char *strcasestr (__const char *__haystack, __const char *__needle)
++extern char *strcasestr (const char *__haystack, const char *__needle)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strcasestr)
+ #endif
+@@ -253,19 +252,19 @@
+ /* Find the first occurrence of NEEDLE in HAYSTACK.
+ NEEDLE is NEEDLELEN bytes long;
+ HAYSTACK is HAYSTACKLEN bytes long. */
+-extern void *memmem (__const void *__haystack, size_t __haystacklen,
+- __const void *__needle, size_t __needlelen)
++extern void *memmem (const void *__haystack, size_t __haystacklen,
++ const void *__needle, size_t __needlelen)
+ __THROW __attribute_pure__ __nonnull ((1, 3));
+
+ /* Copy N bytes of SRC to DEST, return pointer to bytes after the
+ last written byte. */
+ #if 0 /* uClibc: disabled */
+ extern void *__mempcpy (void *__restrict __dest,
+- __const void *__restrict __src, size_t __n)
++ const void *__restrict __src, size_t __n)
+ __THROW __nonnull ((1, 2));
+ #endif
+ extern void *mempcpy (void *__restrict __dest,
+- __const void *__restrict __src, size_t __n)
++ const void *__restrict __src, size_t __n)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(mempcpy)
+ #endif
+@@ -273,15 +272,15 @@
+
+ __BEGIN_NAMESPACE_STD
+ /* Return the length of S. */
+-extern size_t strlen (__const char *__s)
++extern size_t strlen (const char *__s)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(strlen)
+ __END_NAMESPACE_STD
+
+-#ifdef __USE_GNU
++#ifdef __USE_XOPEN2K8
+ /* Find the length of STRING, but scan at most MAXLEN characters.
+ If no '\0' terminator is found in that many characters, return MAXLEN. */
+-extern size_t strnlen (__const char *__string, size_t __maxlen)
++extern size_t strnlen (const char *__string, size_t __maxlen)
+ __THROW __attribute_pure__ __nonnull ((1));
+ libc_hidden_proto(strnlen)
+ #endif
+@@ -329,6 +328,12 @@
+ # endif
+ #endif
+
++#if 0 /*defined __USE_XOPEN2K8 && defined __UCLIBC_HAS_XLOCALE__*/
++/* Translate error number to string according to the locale L. */
++extern char *strerror_l (int __errnum, __locale_t __l) __THROW;
++#endif
++
++
+ /* We define this function always since `bzero' is sometimes needed when
+ the namespace rules does not allow this. */
+ #if 0 /* uClibc: disabled */
+@@ -338,22 +343,22 @@
+ #ifdef __USE_BSD
+ # ifdef __UCLIBC_SUSV3_LEGACY__
+ /* Copy N bytes of SRC to DEST (like memmove, but args reversed). */
+-extern void bcopy (__const void *__src, void *__dest, size_t __n)
++extern void bcopy (const void *__src, void *__dest, size_t __n)
+ __THROW __nonnull ((1, 2));
+
+ /* Set N bytes of S to 0. */
+ extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
+
+ /* Compare N bytes of S1 and S2 (same as memcmp). */
+-extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
++extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+
+ /* Find the first occurrence of C in S (same as strchr). */
+-extern char *index (__const char *__s, int __c)
++extern char *index (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+
+ /* Find the last occurrence of C in S (same as strrchr). */
+-extern char *rindex (__const char *__s, int __c)
++extern char *rindex (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+ # else
+ # ifdef __UCLIBC_SUSV3_LEGACY_MACROS__
+@@ -385,25 +390,25 @@
+ # endif
+
+ /* Compare S1 and S2, ignoring case. */
+-extern int strcasecmp (__const char *__s1, __const char *__s2)
++extern int strcasecmp (const char *__s1, const char *__s2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strcasecmp)
+
+ /* Compare no more than N chars of S1 and S2, ignoring case. */
+-extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
++extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+ libc_hidden_proto(strncasecmp)
+ #endif /* Use BSD. */
+
+-#if defined __USE_GNU && defined __UCLIBC_HAS_XLOCALE__
++#if defined __USE_XOPEN2K8 && defined __UCLIBC_HAS_XLOCALE__
+ /* Again versions of a few functions which use the given locale instead
+ of the global one. */
+-extern int strcasecmp_l (__const char *__s1, __const char *__s2,
++extern int strcasecmp_l (const char *__s1, const char *__s2,
+ __locale_t __loc)
+ __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+ libc_hidden_proto(strcasecmp_l)
+
+-extern int strncasecmp_l (__const char *__s1, __const char *__s2,
++extern int strncasecmp_l (const char *__s1, const char *__s2,
+ size_t __n, __locale_t __loc)
+ __THROW __attribute_pure__ __nonnull ((1, 2, 4));
+ libc_hidden_proto(strncasecmp_l)
+@@ -413,27 +418,22 @@
+ /* Return the next DELIM-delimited token from *STRINGP,
+ terminating it with a '\0', and update *STRINGP to point past it. */
+ extern char *strsep (char **__restrict __stringp,
+- __const char *__restrict __delim)
++ const char *__restrict __delim)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(strsep)
+ #endif
+
+-#ifdef __USE_GNU
+-/* Compare S1 and S2 as strings holding name & indices/version numbers. */
+-extern int strverscmp (__const char *__s1, __const char *__s2)
+- __THROW __attribute_pure__ __nonnull ((1, 2));
+-libc_hidden_proto(strverscmp)
+-
++#ifdef __USE_XOPEN2K8
+ /* Return a string describing the meaning of the signal number in SIG. */
+ extern char *strsignal (int __sig) __THROW;
+ libc_hidden_proto(strsignal)
+
+ /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
+ # if 0 /* uClibc: disabled */
+-extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
++extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
+ __THROW __nonnull ((1, 2));
+ # endif
+-extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
++extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(stpcpy)
+
+@@ -441,12 +441,19 @@
+ the last character written into DEST. */
+ # if 0 /* uClibc: disabled */
+ extern char *__stpncpy (char *__restrict __dest,
+- __const char *__restrict __src, size_t __n)
++ const char *__restrict __src, size_t __n)
+ __THROW __nonnull ((1, 2));
+ # endif
+ extern char *stpncpy (char *__restrict __dest,
+- __const char *__restrict __src, size_t __n)
++ const char *__restrict __src, size_t __n)
+ __THROW __nonnull ((1, 2));
++#endif
++
++#ifdef __USE_GNU
++/* Compare S1 and S2 as strings holding name & indices/version numbers. */
++extern int strverscmp (const char *__s1, const char *__s2)
++ __THROW __attribute_pure__ __nonnull ((1, 2));
++libc_hidden_proto(strverscmp)
+
+ # if 0 /* uClibc does not support strfry or memfrob. */
+ /* Sautee STRING briskly. */
+@@ -461,8 +468,7 @@
+ declare the function if the `basename' macro is available (defined
+ in <libgen.h>) which makes the XPG version of this function
+ available. */
+-extern char *basename (__const char *__filename) __THROW __nonnull ((1));
+-libc_hidden_proto(basename)
++extern char *basename (const char *__filename) __THROW __nonnull ((1));
+ # endif
+ #endif /* __USE_GNU */
+
+diff -Nur uClibc-0.9.33.2/include/strings.h uClibc-git/include/strings.h
+--- uClibc-0.9.33.2/include/strings.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/strings.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991,92,96,97,99,2000,2001 Free Software Foundation, Inc.
++/* Copyright (C) 1991,92,96,97,99,2000,2001,2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _STRINGS_H
+ #define _STRINGS_H 1
+@@ -35,22 +34,22 @@
+
+ # ifdef __UCLIBC_SUSV3_LEGACY__
+ /* Copy N bytes of SRC to DEST (like memmove, but args reversed). */
+-extern void bcopy (__const void *__src, void *__dest, size_t __n)
++extern void bcopy (const void *__src, void *__dest, size_t __n)
+ __THROW __nonnull ((1, 2));
+
+ /* Set N bytes of S to 0. */
+ extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
+
+ /* Compare N bytes of S1 and S2 (same as memcmp). */
+-extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
++extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
+
+ /* Find the first occurrence of C in S (same as strchr). */
+-extern char *index (__const char *__s, int __c)
++extern char *index (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+
+ /* Find the last occurrence of C in S (same as strrchr). */
+-extern char *rindex (__const char *__s, int __c)
++extern char *rindex (const char *__s, int __c)
+ __THROW __attribute_pure__ __nonnull ((1));
+ # else
+ # ifdef __UCLIBC_SUSV3_LEGACY_MACROS__
+@@ -69,10 +68,11 @@
+ /* Return the position of the first bit set in I, or 0 if none are set.
+ The least-significant bit is position 1, the most-significant 32. */
+ extern int ffs (int __i) __THROW __attribute__ ((__const__));
++libc_hidden_proto(ffs)
+
+ /* The following two functions are non-standard but necessary for non-32 bit
+ platforms. */
+-#if 0 /*def __USE_GNU*/
++# ifdef __USE_GNU
+ extern int ffsl (long int __l) __THROW __attribute__ ((__const__));
+ # ifdef __GNUC__
+ __extension__ extern int ffsll (long long int __ll)
+@@ -81,17 +81,39 @@
+ # endif
+
+ /* Compare S1 and S2, ignoring case. */
+-extern int strcasecmp (__const char *__s1, __const char *__s2)
++extern int strcasecmp (const char *__s1, const char *__s2)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
++libc_hidden_proto(strcasecmp)
+
+ /* Compare no more than N chars of S1 and S2, ignoring case. */
+-extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
++extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+ __THROW __attribute_pure__ __nonnull ((1, 2));
++libc_hidden_proto(strncasecmp)
+
++#if defined __USE_XOPEN2K8 && defined __UCLIBC_HAS_XLOCALE__
++/* The following functions are equivalent to the both above but they
++ take the locale they use for the collation as an extra argument.
++ This is not standardsized but something like will come. */
++# include <xlocale.h>
++
++/* Again versions of a few functions which use the given locale instead
++ of the global one. */
++extern int strcasecmp_l (const char *__s1, const char *__s2,
++ __locale_t __loc)
++ __THROW __attribute_pure__ __nonnull ((1, 2, 3));
++libc_hidden_proto(strcasecmp_l)
++
++extern int strncasecmp_l (const char *__s1, const char *__s2,
++ size_t __n, __locale_t __loc)
++ __THROW __attribute_pure__ __nonnull ((1, 2, 4));
++libc_hidden_proto(strncasecmp_l)
++#endif
+ __END_DECLS
+
+
+ #ifdef _LIBC
++/* comment is wrong and will face this, when HAS_GNU option will be added
++ * header is SuSv standard */
+ #error "<strings.h> should not be included from libc."
+ #endif
+
+diff -Nur uClibc-0.9.33.2/include/sys/cdefs.h uClibc-git/include/sys/cdefs.h
+--- uClibc-0.9.33.2/include/sys/cdefs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/cdefs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_CDEFS_H
+ #define _SYS_CDEFS_H 1
+@@ -63,10 +62,6 @@
+ # define __THROW
+ # define __NTH(fct) fct
+
+-# define __const const
+-# define __signed signed
+-# define __volatile volatile
+-
+ #endif /* GCC. */
+
+ /* These two macros are not used in glibc anymore. They are kept here
+diff -Nur uClibc-0.9.33.2/include/sys/dir.h uClibc-git/include/sys/dir.h
+--- uClibc-0.9.33.2/include/sys/dir.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/dir.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_DIR_H
+ #define _SYS_DIR_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/file.h uClibc-git/include/sys/file.h
+--- uClibc-0.9.33.2/include/sys/file.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/file.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_FILE_H
+ #define _SYS_FILE_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/fsuid.h uClibc-git/include/sys/fsuid.h
+--- uClibc-0.9.33.2/include/sys/fsuid.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/fsuid.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_FSUID_H
+ #define _SYS_FSUID_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/ioctl.h uClibc-git/include/sys/ioctl.h
+--- uClibc-0.9.33.2/include/sys/ioctl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/ioctl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IOCTL_H
+ #define _SYS_IOCTL_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/ipc.h uClibc-git/include/sys/ipc.h
+--- uClibc-0.9.33.2/include/sys/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ #define _SYS_IPC_H 1
+@@ -51,7 +50,7 @@
+ __BEGIN_DECLS
+
+ /* Generates key for System V style IPC. */
+-extern key_t ftok (__const char *__pathname, int __proj_id) __THROW;
++extern key_t ftok (const char *__pathname, int __proj_id) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/kdaemon.h uClibc-git/include/sys/kdaemon.h
+--- uClibc-0.9.33.2/include/sys/kdaemon.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/kdaemon.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Interfaces to control the various kernel daemons. */
+
+diff -Nur uClibc-0.9.33.2/include/sys/kd.h uClibc-git/include/sys/kd.h
+--- uClibc-0.9.33.2/include/sys/kd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/kd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_KD_H
+ #define _SYS_KD_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/klog.h uClibc-git/include/sys/klog.h
+--- uClibc-0.9.33.2/include/sys/klog.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/klog.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_KLOG_H
+
+diff -Nur uClibc-0.9.33.2/include/sys/mman.h uClibc-git/include/sys/mman.h
+--- uClibc-0.9.33.2/include/sys/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ #define _SYS_MMAN_H 1
+@@ -115,10 +114,10 @@
+
+ /* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to
+ be memory resident. */
+-extern int mlock (__const void *__addr, size_t __len) __THROW;
++extern int mlock (const void *__addr, size_t __len) __THROW;
+
+ /* Unlock whole pages previously mapped by the range [ADDR,ADDR+LEN). */
+-extern int munlock (__const void *__addr, size_t __len) __THROW;
++extern int munlock (const void *__addr, size_t __len) __THROW;
+
+ /* Cause all currently mapped pages of the process to be memory resident
+ until unlocked by a call to the `munlockall', until the process exits,
+@@ -133,8 +132,8 @@
+
+ /* On no-mmu systems, memory cannot be swapped out, so
+ * these functions will always succeed. */
+-static __inline__ int mlock (__const void *__addr, size_t __len) { return 0; }
+-static __inline__ int munlock (__const void *__addr, size_t __len) { return 0; }
++static __inline__ int mlock (const void *__addr, size_t __len) { return 0; }
++static __inline__ int munlock (const void *__addr, size_t __len) { return 0; }
+ static __inline__ int mlockall (int __flags) { return 0; }
+ static __inline__ int munlockall (void) { return 0; }
+ #endif
+@@ -170,10 +169,10 @@
+
+
+ /* Open shared memory segment. */
+-extern int shm_open (__const char *__name, int __oflag, mode_t __mode);
++extern int shm_open (const char *__name, int __oflag, mode_t __mode);
+
+ /* Remove shared memory segment. */
+-extern int shm_unlink (__const char *__name);
++extern int shm_unlink (const char *__name);
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/mount.h uClibc-git/include/sys/mount.h
+--- uClibc-0.9.33.2/include/sys/mount.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/mount.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Header file for mounting/unmount Linux filesystems.
+- Copyright (C) 1996,1997,1998,1999,2000,2004 Free Software Foundation, Inc.
++ Copyright (C) 1996-2000, 2004, 2010, 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This is taken from /usr/include/linux/fs.h. */
+
+@@ -47,23 +46,46 @@
+ #define MS_REMOUNT MS_REMOUNT
+ MS_MANDLOCK = 64, /* Allow mandatory locks on an FS. */
+ #define MS_MANDLOCK MS_MANDLOCK
+- S_WRITE = 128, /* Write on file/directory/symlink. */
+-#define S_WRITE S_WRITE
+- S_APPEND = 256, /* Append-only file. */
+-#define S_APPEND S_APPEND
+- S_IMMUTABLE = 512, /* Immutable file. */
+-#define S_IMMUTABLE S_IMMUTABLE
++ MS_DIRSYNC = 128, /* Directory modifications are synchronous. */
++#define MS_DIRSYNC MS_DIRSYNC
+ MS_NOATIME = 1024, /* Do not update access times. */
+ #define MS_NOATIME MS_NOATIME
+ MS_NODIRATIME = 2048, /* Do not update directory access times. */
+ #define MS_NODIRATIME MS_NODIRATIME
+ MS_BIND = 4096, /* Bind directory at different place. */
+ #define MS_BIND MS_BIND
++ MS_MOVE = 8192,
++#define MS_MOVE MS_MOVE
++ MS_REC = 16384,
++#define MS_REC MS_REC
++ MS_SILENT = 32768,
++#define MS_SILENT MS_SILENT
++ MS_POSIXACL = 1 << 16, /* VFS does not apply the umask. */
++#define MS_POSIXACL MS_POSIXACL
++ MS_UNBINDABLE = 1 << 17, /* Change to unbindable. */
++#define MS_UNBINDABLE MS_UNBINDABLE
++ MS_PRIVATE = 1 << 18, /* Change to private. */
++#define MS_PRIVATE MS_PRIVATE
++ MS_SLAVE = 1 << 19, /* Change to slave. */
++#define MS_SLAVE MS_SLAVE
++ MS_SHARED = 1 << 20, /* Change to shared. */
++#define MS_SHARED MS_SHARED
++ MS_RELATIME = 1 << 21, /* Update atime relative to mtime/ctime. */
++#define MS_RELATIME MS_RELATIME
++ MS_KERNMOUNT = 1 << 22, /* This is a kern_mount call. */
++#define MS_KERNMOUNT MS_KERNMOUNT
++ MS_I_VERSION = 1 << 23, /* Update inode I_version field. */
++#define MS_I_VERSION MS_I_VERSION
++ MS_STRICTATIME = 1 << 24, /* Always perform atime updates. */
++#define MS_STRICTATIME MS_STRICTATIME
++ MS_ACTIVE = 1 << 30,
++#define MS_ACTIVE MS_ACTIVE
++ MS_NOUSER = 1 << 31
++#define MS_NOUSER MS_NOUSER
+ };
+
+ /* Flags that can be altered by MS_REMOUNT */
+-#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_NOATIME \
+- |MS_NODIRATIME)
++#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION)
+
+
+ /* Magic mount flag number. Has to be or-ed to the flag values. */
+@@ -100,23 +122,28 @@
+ #define MNT_FORCE MNT_FORCE
+ MNT_DETACH = 2, /* Just detach from the tree. */
+ #define MNT_DETACH MNT_DETACH
+- MNT_EXPIRE = 4 /* Mark for expiry. */
++ MNT_EXPIRE = 4, /* Mark for expiry. */
+ #define MNT_EXPIRE MNT_EXPIRE
++ UMOUNT_NOFOLLOW = 8 /* Don't follow symlink on umount. */
++#define UMOUNT_NOFOLLOW UMOUNT_NOFOLLOW
+ };
+
+
+ __BEGIN_DECLS
+
+ /* Mount a filesystem. */
+-extern int mount (__const char *__special_file, __const char *__dir,
+- __const char *__fstype, unsigned long int __rwflag,
+- __const void *__data) __THROW;
++extern int mount (const char *__special_file, const char *__dir,
++ const char *__fstype, unsigned long int __rwflag,
++ const void *__data) __THROW;
+
+ /* Unmount a filesystem. */
+-extern int umount (__const char *__special_file) __THROW;
++extern int umount (const char *__special_file) __THROW;
+
++#ifdef __UCLIBC_LINUX_SPECIFIC__
+ /* Unmount a filesystem. Force unmounting if FLAGS is set to MNT_FORCE. */
+-extern int umount2 (__const char *__special_file, int __flags) __THROW;
++extern int umount2 (const char *__special_file, int __flags) __THROW;
++libc_hidden_proto(umount2)
++#endif
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/msg.h uClibc-git/include/sys/msg.h
+--- uClibc-0.9.33.2/include/sys/msg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/msg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ #define _SYS_MSG_H
+@@ -77,7 +76,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int msgsnd (int __msqid, __const void *__msgp, size_t __msgsz,
++extern int msgsnd (int __msqid, const void *__msgp, size_t __msgsz,
+ int __msgflg);
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/sys/mtio.h uClibc-git/include/sys/mtio.h
+--- uClibc-0.9.33.2/include/sys/mtio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/mtio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Written by H. Bergman <hennus@cybercomm.nl>. */
+
+diff -Nur uClibc-0.9.33.2/include/sys/param.h uClibc-git/include/sys/param.h
+--- uClibc-0.9.33.2/include/sys/param.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/param.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PARAM_H
+ #define _SYS_PARAM_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/personality.h uClibc-git/include/sys/personality.h
+--- uClibc-0.9.33.2/include/sys/personality.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/personality.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Taken verbatim from Linux 2.4 (include/linux/personality.h). */
+
+diff -Nur uClibc-0.9.33.2/include/sys/poll.h uClibc-git/include/sys/poll.h
+--- uClibc-0.9.33.2/include/sys/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ #define _SYS_POLL_H 1
+@@ -66,9 +65,8 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
+- __const struct timespec *__timeout,
+- __const __sigset_t *__ss);
+-libc_hidden_proto(ppoll)
++ const struct timespec *__timeout,
++ const __sigset_t *__ss);
+ #endif
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/sys/quota.h uClibc-git/include/sys/quota.h
+--- uClibc-0.9.33.2/include/sys/quota.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/quota.h 2014-02-03 12:32:56.000000000 +0100
+@@ -30,8 +30,6 @@
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+- *
+- * Version: $Id: quota.h,v 1.1 2002/01/03 04:00:09 andersen Exp $
+ */
+
+ #ifndef _SYS_QUOTA_H
+@@ -40,6 +38,19 @@
+ #include <features.h>
+ #include <sys/types.h>
+
++#ifdef __UCLIBC__
++# undef _LINUX_QUOTA_VERSION
++# define _LINUX_QUOTA_VERSION 1
++#endif
++
++/*
++ * Select between different incompatible quota versions.
++ * Default to the version used by Linux kernel version 2.4.22
++ * or later. */
++#ifndef _LINUX_QUOTA_VERSION
++# define _LINUX_QUOTA_VERSION 2
++#endif
++
+ /*
+ * Convert diskblocks to blocks and the other way around.
+ * currently only to fool the BSD source. :-)
+@@ -94,21 +105,33 @@
+ #define SUBCMDSHIFT 8
+ #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
+
+-#define Q_QUOTAON 0x0100 /* enable quotas */
+-#define Q_QUOTAOFF 0x0200 /* disable quotas */
+-#define Q_GETQUOTA 0x0300 /* get limits and usage */
+-#define Q_SETQUOTA 0x0400 /* set limits and usage */
+-#define Q_SETUSE 0x0500 /* set usage */
+-#define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */
+-#define Q_SETQLIM 0x0700 /* set limits */
+-#define Q_GETSTATS 0x0800 /* get collected stats */
+-#define Q_RSQUASH 0x1000 /* set root_squash option */
++#if _LINUX_QUOTA_VERSION < 2
++# define Q_QUOTAON 0x0100 /* enable quotas */
++# define Q_QUOTAOFF 0x0200 /* disable quotas */
++# define Q_GETQUOTA 0x0300 /* get limits and usage */
++# define Q_SETQUOTA 0x0400 /* set limits and usage */
++# define Q_SETUSE 0x0500 /* set usage */
++# define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */
++# define Q_SETQLIM 0x0700 /* set limits */
++# define Q_GETSTATS 0x0800 /* get collected stats */
++# define Q_RSQUASH 0x1000 /* set root_squash option */
++#else
++# define Q_SYNC 0x800001 /* sync disk copy of a filesystems quotas */
++# define Q_QUOTAON 0x800002 /* turn quotas on */
++# define Q_QUOTAOFF 0x800003 /* turn quotas off */
++# define Q_GETFMT 0x800004 /* get quota format used on given filesystem */
++# define Q_GETINFO 0x800005 /* get information about quota files */
++# define Q_SETINFO 0x800006 /* set information about quota files */
++# define Q_GETQUOTA 0x800007 /* get user quota structure */
++# define Q_SETQUOTA 0x800008 /* set user quota structure */
++#endif
+
+ /*
+ * The following structure defines the format of the disk quota file
+ * (as it appears on disk) - the file is an array of these structures
+ * indexed by user or group number.
+ */
++#if _LINUX_QUOTA_VERSION < 2
+ struct dqblk
+ {
+ u_int32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */
+@@ -120,13 +143,45 @@
+ time_t dqb_btime; /* time limit for excessive disk use */
+ time_t dqb_itime; /* time limit for excessive files */
+ };
++#else
++
++/* Flags that indicate which fields in dqblk structure are valid. */
++#define QIF_BLIMITS 1
++#define QIF_SPACE 2
++#define QIF_ILIMITS 4
++#define QIF_INODES 8
++#define QIF_BTIME 16
++#define QIF_ITIME 32
++#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS)
++#define QIF_USAGE (QIF_SPACE | QIF_INODES)
++#define QIF_TIMES (QIF_BTIME | QIF_ITIME)
++#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
++
++struct dqblk
++ {
++ u_int64_t dqb_bhardlimit; /* absolute limit on disk quota blocks alloc */
++ u_int64_t dqb_bsoftlimit; /* preferred limit on disk quota blocks */
++ u_int64_t dqb_curspace; /* current quota block count */
++ u_int64_t dqb_ihardlimit; /* maximum # allocated inodes */
++ u_int64_t dqb_isoftlimit; /* preferred inode limit */
++ u_int64_t dqb_curinodes; /* current # allocated inodes */
++ u_int64_t dqb_btime; /* time limit for excessive disk use */
++ u_int64_t dqb_itime; /* time limit for excessive files */
++ u_int32_t dqb_valid; /* bitmask of QIF_* constants */
++ };
++#endif
+
+ /*
+ * Shorthand notation.
+ */
+ #define dq_bhardlimit dq_dqb.dqb_bhardlimit
+ #define dq_bsoftlimit dq_dqb.dqb_bsoftlimit
+-#define dq_curblocks dq_dqb.dqb_curblocks
++#if _LINUX_QUOTA_VERSION < 2
++# define dq_curblocks dq_dqb.dqb_curblocks
++#else
++# define dq_curspace dq_dqb.dqb_curspace
++# define dq_valid dq_dqb.dqb_valid
++#endif
+ #define dq_ihardlimit dq_dqb.dqb_ihardlimit
+ #define dq_isoftlimit dq_dqb.dqb_isoftlimit
+ #define dq_curinodes dq_dqb.dqb_curinodes
+@@ -135,6 +190,7 @@
+
+ #define dqoff(UID) ((loff_t)((UID) * sizeof (struct dqblk)))
+
++#if _LINUX_QUOTA_VERSION < 2
+ struct dqstats
+ {
+ u_int32_t lookups;
+@@ -147,6 +203,22 @@
+ u_int32_t free_dquots;
+ u_int32_t syncs;
+ };
++#else
++
++/* Flags that indicate which fields in dqinfo structure are valid. */
++# define IIF_BGRACE 1
++# define IIF_IGRACE 2
++# define IIF_FLAGS 4
++# define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
++
++struct dqinfo
++ {
++ u_int64_t dqi_bgrace;
++ u_int64_t dqi_igrace;
++ u_int32_t dqi_flags;
++ u_int32_t dqi_valid;
++ };
++#endif
+
+ __BEGIN_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/reboot.h uClibc-git/include/sys/reboot.h
+--- uClibc-0.9.33.2/include/sys/reboot.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/reboot.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file should define RB_* macros to be used as flag
+ bits in the argument to the `reboot' system call. */
+diff -Nur uClibc-0.9.33.2/include/sys/resource.h uClibc-git/include/sys/resource.h
+--- uClibc-0.9.33.2/include/sys/resource.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/resource.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_RESOURCE_H
+ #define _SYS_RESOURCE_H 1
+@@ -69,12 +68,12 @@
+ Return 0 if successful, -1 if not (and sets errno). */
+ #ifndef __USE_FILE_OFFSET64
+ extern int setrlimit (__rlimit_resource_t __resource,
+- __const struct rlimit *__rlimits) __THROW;
++ const struct rlimit *__rlimits) __THROW;
+ libc_hidden_proto(setrlimit)
+ #else
+ # ifdef __REDIRECT_NTH
+ extern int __REDIRECT_NTH (setrlimit, (__rlimit_resource_t __resource,
+- __const struct rlimit *__rlimits),
++ const struct rlimit *__rlimits),
+ setrlimit64);
+ # else
+ # define setrlimit setrlimit64
+@@ -82,7 +81,7 @@
+ #endif
+ #ifdef __USE_LARGEFILE64
+ extern int setrlimit64 (__rlimit_resource_t __resource,
+- __const struct rlimit64 *__rlimits) __THROW;
++ const struct rlimit64 *__rlimits) __THROW;
+ #endif
+
+ /* Return resource usage information on process indicated by WHO
+diff -Nur uClibc-0.9.33.2/include/sys/select.h uClibc-git/include/sys/select.h
+--- uClibc-0.9.33.2/include/sys/select.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/select.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* POSIX 1003.1g: 6.2 Select from File Descriptor Sets <sys/select.h> */
+
+@@ -110,7 +109,10 @@
+ fd_set *__restrict __writefds,
+ fd_set *__restrict __exceptfds,
+ struct timeval *__restrict __timeout);
++#ifdef _LIBC
++extern __typeof(select) __select_nocancel attribute_hidden;
+ libc_hidden_proto(select)
++#endif
+
+ #ifdef __USE_XOPEN2K
+ /* Same as above only that the TIMEOUT value is given with higher
+diff -Nur uClibc-0.9.33.2/include/sys/sem.h uClibc-git/include/sys/sem.h
+--- uClibc-0.9.33.2/include/sys/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ #define _SYS_SEM_H 1
+@@ -61,7 +60,7 @@
+ #ifdef __USE_GNU
+ /* Operate on semaphore with timeout. */
+ extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
+- __const struct timespec *__timeout) __THROW;
++ const struct timespec *__timeout) __THROW;
+ #endif
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/sys/sendfile.h uClibc-git/include/sys/sendfile.h
+--- uClibc-0.9.33.2/include/sys/sendfile.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/sendfile.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SENDFILE_H
+ #define _SYS_SENDFILE_H 1
+@@ -45,6 +44,7 @@
+ #ifdef __USE_LARGEFILE64
+ extern ssize_t sendfile64 (int __out_fd, int __in_fd, __off64_t *__offset,
+ size_t __count) __THROW;
++libc_hidden_proto(sendfile64)
+ #endif
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/sys/shm.h uClibc-git/include/sys/shm.h
+--- uClibc-0.9.33.2/include/sys/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ #define _SYS_SHM_H 1
+@@ -54,11 +53,11 @@
+ extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW;
+
+ /* Attach shared memory segment. */
+-extern void *shmat (int __shmid, __const void *__shmaddr, int __shmflg)
++extern void *shmat (int __shmid, const void *__shmaddr, int __shmflg)
+ __THROW;
+
+ /* Detach shared memory segment. */
+-extern int shmdt (__const void *__shmaddr) __THROW;
++extern int shmdt (const void *__shmaddr) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/socket.h uClibc-git/include/sys/socket.h
+--- uClibc-0.9.33.2/include/sys/socket.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/socket.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SOCKET_H
+ #define _SYS_SOCKET_H 1
+@@ -69,7 +68,7 @@
+ old-style declaration, too. */
+ #if defined __cplusplus || !__GNUC_PREREQ (2, 7) || !defined __USE_GNU
+ # define __SOCKADDR_ARG struct sockaddr *__restrict
+-# define __CONST_SOCKADDR_ARG __const struct sockaddr *
++# define __CONST_SOCKADDR_ARG const struct sockaddr *
+ #else
+ /* Add more `struct sockaddr_AF' types here as necessary.
+ These are all the ones I found on NetBSD and Linux. */
+@@ -92,7 +91,7 @@
+ typedef union { __SOCKADDR_ALLTYPES
+ } __SOCKADDR_ARG __attribute__ ((__transparent_union__));
+ # undef __SOCKADDR_ONETYPE
+-# define __SOCKADDR_ONETYPE(type) __const struct type *__restrict __##type##__;
++# define __SOCKADDR_ONETYPE(type) const struct type *__restrict __##type##__;
+ typedef union { __SOCKADDR_ALLTYPES
+ } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));
+ # undef __SOCKADDR_ONETYPE
+@@ -142,7 +141,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t send (int __fd, __const void *__buf, size_t __n, int __flags);
++extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);
+ libc_hidden_proto(send)
+
+ /* Read N bytes into BUF from socket FD.
+@@ -158,10 +157,13 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t sendto (int __fd, __const void *__buf, size_t __n,
++extern ssize_t sendto (int __fd, const void *__buf, size_t __n,
+ int __flags, __CONST_SOCKADDR_ARG __addr,
+ socklen_t __addr_len);
++#ifdef _LIBC
++extern __typeof(sendto) __sendto_nocancel attribute_hidden;
+ libc_hidden_proto(sendto)
++#endif
+
+ /* Read N bytes into BUF through socket FD.
+ If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of
+@@ -173,7 +175,10 @@
+ extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
+ int __flags, __SOCKADDR_ARG __addr,
+ socklen_t *__restrict __addr_len);
++#ifdef _LIBC
++extern __typeof(recvfrom) __recvfrom_nocancel attribute_hidden;
+ libc_hidden_proto(recvfrom)
++#endif
+
+
+ /* Send a message described MESSAGE on socket FD.
+@@ -181,7 +186,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t sendmsg (int __fd, __const struct msghdr *__message,
++extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
+ int __flags);
+ libc_hidden_proto(sendmsg)
+
+@@ -205,7 +210,7 @@
+ to *OPTVAL (which is OPTLEN bytes long).
+ Returns 0 on success, -1 for errors. */
+ extern int setsockopt (int __fd, int __level, int __optname,
+- __const void *__optval, socklen_t __optlen) __THROW;
++ const void *__optval, socklen_t __optlen) __THROW;
+ libc_hidden_proto(setsockopt)
+
+
+@@ -260,4 +265,8 @@
+
+ __END_DECLS
+
++#ifdef _LIBC
++extern int __socketcall(int, unsigned long *) attribute_hidden;
++#endif
++
+ #endif /* sys/socket.h */
+diff -Nur uClibc-0.9.33.2/include/sys/statfs.h uClibc-git/include/sys/statfs.h
+--- uClibc-0.9.33.2/include/sys/statfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/statfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STATFS_H
+ #define _SYS_STATFS_H 1
+@@ -29,19 +28,20 @@
+
+ /* Return information about the filesystem on which FILE resides. */
+ #ifndef __USE_FILE_OFFSET64
+-extern int statfs (__const char *__file, struct statfs *__buf)
++extern int statfs (const char *__file, struct statfs *__buf)
+ __THROW __nonnull ((1, 2));
++libc_hidden_proto(statfs)
+ #else
+ # ifdef __REDIRECT_NTH
+ extern int __REDIRECT_NTH (statfs,
+- (__const char *__file, struct statfs *__buf),
++ (const char *__file, struct statfs *__buf),
+ statfs64) __nonnull ((1, 2));
+ # else
+ # define statfs statfs64
+ # endif
+ #endif
+ #ifdef __USE_LARGEFILE64
+-extern int statfs64 (__const char *__file, struct statfs64 *__buf)
++extern int statfs64 (const char *__file, struct statfs64 *__buf)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(statfs64)
+ #endif
+diff -Nur uClibc-0.9.33.2/include/sys/stat.h uClibc-git/include/sys/stat.h
+--- uClibc-0.9.33.2/include/sys/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 5.6 File Characteristics <sys/stat.h>
+@@ -206,7 +205,7 @@
+
+ #ifndef __USE_FILE_OFFSET64
+ /* Get file attributes for FILE and put them in BUF. */
+-extern int stat (__const char *__restrict __file,
++extern int stat (const char *__restrict __file,
+ struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
+ libc_hidden_proto(stat)
+
+@@ -216,7 +215,7 @@
+ libc_hidden_proto(fstat)
+ #else
+ # ifdef __REDIRECT_NTH
+-extern int __REDIRECT_NTH (stat, (__const char *__restrict __file,
++extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
+ struct stat *__restrict __buf), stat64)
+ __nonnull ((1, 2));
+ extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
+@@ -227,7 +226,7 @@
+ # endif
+ #endif
+ #ifdef __USE_LARGEFILE64
+-extern int stat64 (__const char *__restrict __file,
++extern int stat64 (const char *__restrict __file,
+ struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
+ extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
+ libc_hidden_proto(stat64)
+@@ -239,12 +238,13 @@
+ Relative path names are interpreted relative to FD unless FD is
+ AT_FDCWD. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int fstatat (int __fd, __const char *__restrict __file,
++extern int fstatat (int __fd, const char *__restrict __file,
+ struct stat *__restrict __buf, int __flag)
+ __THROW __nonnull ((2, 3));
++libc_hidden_proto(fstatat)
+ # else
+ # ifdef __REDIRECT_NTH
+-extern int __REDIRECT_NTH (fstatat, (int __fd, __const char *__restrict __file,
++extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
+ struct stat *__restrict __buf,
+ int __flag),
+ fstatat64) __nonnull ((2, 3));
+@@ -254,9 +254,10 @@
+ # endif
+
+ # ifdef __USE_LARGEFILE64
+-extern int fstatat64 (int __fd, __const char *__restrict __file,
++extern int fstatat64 (int __fd, const char *__restrict __file,
+ struct stat64 *__restrict __buf, int __flag)
+ __THROW __nonnull ((2, 3));
++libc_hidden_proto(fstatat64)
+ # endif
+ #endif
+
+@@ -264,13 +265,13 @@
+ # ifndef __USE_FILE_OFFSET64
+ /* Get file attributes about FILE and put them in BUF.
+ If FILE is a symbolic link, do not follow it. */
+-extern int lstat (__const char *__restrict __file,
++extern int lstat (const char *__restrict __file,
+ struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
+ libc_hidden_proto(lstat)
+ # else
+ # ifdef __REDIRECT_NTH
+ extern int __REDIRECT_NTH (lstat,
+- (__const char *__restrict __file,
++ (const char *__restrict __file,
+ struct stat *__restrict __buf), lstat64)
+ __nonnull ((1, 2));
+ # else
+@@ -278,7 +279,7 @@
+ # endif
+ # endif
+ # ifdef __USE_LARGEFILE64
+-extern int lstat64 (__const char *__restrict __file,
++extern int lstat64 (const char *__restrict __file,
+ struct stat64 *__restrict __buf)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(lstat64)
+@@ -287,7 +288,7 @@
+
+ /* Set file access permissions for FILE to MODE.
+ If FILE is a symbolic link, this affects its target instead. */
+-extern int chmod (__const char *__file, __mode_t __mode)
++extern int chmod (const char *__file, __mode_t __mode)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(chmod)
+
+@@ -295,7 +296,7 @@
+ /* Set file access permissions for FILE to MODE.
+ If FILE is a symbolic link, this affects the link itself
+ rather than its target. */
+-extern int lchmod (__const char *__file, __mode_t __mode)
++extern int lchmod (const char *__file, __mode_t __mode)
+ __THROW __nonnull ((1));
+ #endif
+
+@@ -307,9 +308,10 @@
+ #ifdef __USE_ATFILE
+ /* Set file access permissions of FILE relative to
+ the directory FD is open on. */
+-extern int fchmodat (int __fd, __const char *__file, __mode_t __mode,
++extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
+ int __flag)
+ __THROW __nonnull ((2)) __wur;
++libc_hidden_proto(fchmodat)
+ #endif /* Use ATFILE. */
+
+
+@@ -325,7 +327,7 @@
+ #endif
+
+ /* Create a new directory named PATH, with permission bits MODE. */
+-extern int mkdir (__const char *__path, __mode_t __mode)
++extern int mkdir (const char *__path, __mode_t __mode)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(mkdir)
+
+@@ -333,15 +335,16 @@
+ /* Like mkdir, create a new directory with permission bits MODE. But
+ interpret relative PATH names relative to the directory associated
+ with FD. */
+-extern int mkdirat (int __fd, __const char *__path, __mode_t __mode)
++extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
+ __THROW __nonnull ((2));
++libc_hidden_proto(mkdirat)
+ #endif
+
+ /* Create a device file named PATH, with permission and special bits MODE
+ and device number DEV (which can be constructed from major and minor
+ device numbers with the `makedev' macro above). */
+ #if defined __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+-extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
++extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(mknod)
+
+@@ -349,7 +352,7 @@
+ /* Like mknod, create a new device file with permission bits MODE and
+ device number DEV. But interpret relative PATH names relative to
+ the directory associated with FD. */
+-extern int mknodat (int __fd, __const char *__path, __mode_t __mode,
++extern int mknodat (int __fd, const char *__path, __mode_t __mode,
+ __dev_t __dev) __THROW __nonnull ((2));
+ libc_hidden_proto(mknodat)
+ # endif
+@@ -357,22 +360,22 @@
+
+
+ /* Create a new FIFO named PATH, with permission bits MODE. */
+-extern int mkfifo (__const char *__path, __mode_t __mode)
++extern int mkfifo (const char *__path, __mode_t __mode)
+ __THROW __nonnull ((1));
+
+ #ifdef __USE_ATFILE
+ /* Like mkfifo, create a new FIFO with permission bits MODE. But
+ interpret relative PATH names relative to the directory associated
+ with FD. */
+-extern int mkfifoat (int __fd, __const char *__path, __mode_t __mode)
++extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
+ __THROW __nonnull ((2));
+ #endif
+
+ #ifdef __USE_ATFILE
+ /* Set file access and modification times relative to directory file
+ descriptor. */
+-extern int utimensat (int __fd, __const char *__path,
+- __const struct timespec __times[2],
++extern int utimensat (int __fd, const char *__path,
++ const struct timespec __times[2],
+ int __flags)
+ __THROW __nonnull ((2));
+ libc_hidden_proto(utimensat)
+@@ -380,7 +383,7 @@
+
+ #ifdef __USE_XOPEN2K8
+ /* Set file access and modification times of the file associated with FD. */
+-extern int futimens (int __fd, __const struct timespec __times[2]) __THROW;
++extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
+ #endif
+
+ /* on uClibc we have unversioned struct stat and mknod.
+diff -Nur uClibc-0.9.33.2/include/sys/statvfs.h uClibc-git/include/sys/statvfs.h
+--- uClibc-0.9.33.2/include/sys/statvfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/statvfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STATVFS_H
+ #define _SYS_STATVFS_H 1
+@@ -49,14 +48,14 @@
+
+ /* Return information about the filesystem on which FILE resides. */
+ #ifndef __USE_FILE_OFFSET64
+-extern int statvfs (__const char *__restrict __file,
++extern int statvfs (const char *__restrict __file,
+ struct statvfs *__restrict __buf)
+ __THROW __nonnull ((1, 2));
+ libc_hidden_proto(statvfs)
+ #else
+ # ifdef __REDIRECT_NTH
+ extern int __REDIRECT_NTH (statvfs,
+- (__const char *__restrict __file,
++ (const char *__restrict __file,
+ struct statvfs *__restrict __buf), statvfs64)
+ __nonnull ((1, 2));
+ # else
+@@ -64,7 +63,7 @@
+ # endif
+ #endif
+ #ifdef __USE_LARGEFILE64
+-extern int statvfs64 (__const char *__restrict __file,
++extern int statvfs64 (const char *__restrict __file,
+ struct statvfs64 *__restrict __buf)
+ __THROW __nonnull ((1, 2));
+ #endif
+diff -Nur uClibc-0.9.33.2/include/sys/swap.h uClibc-git/include/sys/swap.h
+--- uClibc-0.9.33.2/include/sys/swap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/swap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SWAP_H
+
+@@ -33,10 +32,10 @@
+
+ /* Make the block special device PATH available to the system for swapping.
+ This call is restricted to the super-user. */
+-extern int swapon (__const char *__path, int __flags) __THROW;
++extern int swapon (const char *__path, int __flags) __THROW;
+
+ /* Stop using block special device PATH for swapping. */
+-extern int swapoff (__const char *__path) __THROW;
++extern int swapoff (const char *__path) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/syscall.h uClibc-git/include/sys/syscall.h
+--- uClibc-0.9.33.2/include/sys/syscall.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/syscall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYSCALL_H
+ #define _SYSCALL_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/sysctl.h uClibc-git/include/sys/sysctl.h
+--- uClibc-0.9.33.2/include/sys/sysctl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/sysctl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SYSCTL_H
+ #define _SYS_SYSCTL_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/sysinfo.h uClibc-git/include/sys/sysinfo.h
+--- uClibc-0.9.33.2/include/sys/sysinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/sysinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SYSINFO_H
+ #define _SYS_SYSINFO_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/syslog.h uClibc-git/include/sys/syslog.h
+--- uClibc-0.9.33.2/include/sys/syslog.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/syslog.h 2014-02-03 12:32:56.000000000 +0100
+@@ -179,14 +179,12 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern void closelog (void);
+-libc_hidden_proto(closelog)
+
+ /* Open connection to system logger.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern void openlog (__const char *__ident, int __option, int __facility);
+-libc_hidden_proto(openlog)
++extern void openlog (const char *__ident, int __option, int __facility);
+
+ /* Set the log mask level. */
+ extern int setlogmask (int __mask) __THROW;
+@@ -195,7 +193,7 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern void syslog (int __pri, __const char *__fmt, ...)
++extern void syslog (int __pri, const char *__fmt, ...)
+ __attribute__ ((__format__ (__printf__, 2, 3)));
+ libc_hidden_proto(syslog)
+
+@@ -206,9 +204,8 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern void vsyslog (int __pri, __const char *__fmt, __gnuc_va_list __ap)
++extern void vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap)
+ __attribute__ ((__format__ (__printf__, 2, 0)));
+-libc_hidden_proto(vsyslog)
+ #endif
+
+ __END_DECLS
+diff -Nur uClibc-0.9.33.2/include/sys/sysmacros.h uClibc-git/include/sys/sysmacros.h
+--- uClibc-0.9.33.2/include/sys/sysmacros.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/sysmacros.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SYSMACROS_H
+ #define _SYS_SYSMACROS_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/timeb.h uClibc-git/include/sys/timeb.h
+--- uClibc-0.9.33.2/include/sys/timeb.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/timeb.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_TIMEB_H
+ #define _SYS_TIMEB_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/time.h uClibc-git/include/sys/time.h
+--- uClibc-0.9.33.2/include/sys/time.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/time.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_TIME_H
+ #define _SYS_TIME_H 1
+@@ -77,8 +76,8 @@
+ #ifdef __USE_BSD
+ /* Set the current time of day and timezone information.
+ This call is restricted to the super-user. */
+-extern int settimeofday (__const struct timeval *__tv,
+- __const struct timezone *__tz)
++extern int settimeofday (const struct timeval *__tv,
++ const struct timezone *__tz)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(settimeofday)
+
+@@ -86,7 +85,7 @@
+ If OLDDELTA is not NULL, it is filled in with the amount
+ of time adjustment remaining to be done from the last `adjtime' call.
+ This call is restricted to the super-user. */
+-extern int adjtime (__const struct timeval *__delta,
++extern int adjtime (const struct timeval *__delta,
+ struct timeval *__olddelta) __THROW;
+ #endif
+
+@@ -133,25 +132,25 @@
+ set *OLD to the old value of timer WHICH.
+ Returns 0 on success, -1 on errors. */
+ extern int setitimer (__itimer_which_t __which,
+- __const struct itimerval *__restrict __new,
++ const struct itimerval *__restrict __new,
+ struct itimerval *__restrict __old) __THROW;
+ libc_hidden_proto(setitimer)
+
+ /* Change the access time of FILE to TVP[0] and the modification time of
+ FILE to TVP[1]. If TVP is a null pointer, use the current time instead.
+ Returns 0 on success, -1 on errors. */
+-extern int utimes (__const char *__file, __const struct timeval __tvp[2])
++extern int utimes (const char *__file, const struct timeval __tvp[2])
+ __THROW __nonnull ((1));
+ libc_hidden_proto(utimes)
+
+ #ifdef __USE_BSD
+ /* Same as `utimes', but does not follow symbolic links. */
+-extern int lutimes (__const char *__file, __const struct timeval __tvp[2])
++extern int lutimes (const char *__file, const struct timeval __tvp[2])
+ __THROW __nonnull ((1));
+
+ #if 0
+ /* Same as `utimes', but takes an open file descriptor instead of a name. */
+-extern int futimes (int __fd, __const struct timeval __tvp[2]) __THROW;
++extern int futimes (int __fd, const struct timeval __tvp[2]) __THROW;
+ #endif
+ #endif
+
+@@ -159,8 +158,8 @@
+ /* Change the access time of FILE relative to FD to TVP[0] and the
+ modification time of FILE to TVP[1]. If TVP is a null pointer, use
+ the current time instead. Returns 0 on success, -1 on errors. */
+-extern int futimesat (int __fd, __const char *__file,
+- __const struct timeval __tvp[2]) __THROW;
++extern int futimesat (int __fd, const char *__file,
++ const struct timeval __tvp[2]) __THROW;
+ #endif
+
+
+diff -Nur uClibc-0.9.33.2/include/sys/times.h uClibc-git/include/sys/times.h
+--- uClibc-0.9.33.2/include/sys/times.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/times.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 4.5.2 Process Times <sys/times.h>
+diff -Nur uClibc-0.9.33.2/include/sys/timex.h uClibc-git/include/sys/timex.h
+--- uClibc-0.9.33.2/include/sys/timex.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/timex.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_TIMEX_H
+ #define _SYS_TIMEX_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/types.h uClibc-git/include/sys/types.h
+--- uClibc-0.9.33.2/include/sys/types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 2.6 Primitive System Data Types <sys/types.h>
+@@ -165,7 +164,7 @@
+ typedef int int32_t;
+ # if __WORDSIZE == 64
+ typedef long int int64_t;
+-# elif defined __GNUC__ || defined __ICC
++# elif defined __GNUC__ || defined __ICC || defined __TenDRA__
+ __extension__ typedef long long int int64_t;
+ # endif
+ # endif
+@@ -176,7 +175,7 @@
+ typedef unsigned int u_int32_t;
+ # if __WORDSIZE == 64
+ typedef unsigned long int u_int64_t;
+-# elif defined __GNUC__ || defined __ICC
++# elif defined __GNUC__ || defined __ICC || defined __TenDRA__
+ __extension__ typedef unsigned long long int u_int64_t;
+ # endif
+
+diff -Nur uClibc-0.9.33.2/include/sys/uio.h uClibc-git/include/sys/uio.h
+--- uClibc-0.9.33.2/include/sys/uio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/uio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UIO_H
+ #define _SYS_UIO_H 1
+@@ -37,7 +36,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t readv (int __fd, __const struct iovec *__iovec, int __count);
++extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count);
+
+ /* Write data pointed by the buffers described by IOVEC, which
+ is a vector of COUNT `struct iovec's, to file descriptor FD.
+@@ -47,7 +46,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t writev (int __fd, __const struct iovec *__iovec, int __count);
++extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count);
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/un.h uClibc-git/include/sys/un.h
+--- uClibc-0.9.33.2/include/sys/un.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/un.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UN_H
+ #define _SYS_UN_H 1
+diff -Nur uClibc-0.9.33.2/include/sys/ustat.h uClibc-git/include/sys/ustat.h
+--- uClibc-0.9.33.2/include/sys/ustat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/ustat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * This interface is obsolete. Use <sys/statfs.h> instead.
+diff -Nur uClibc-0.9.33.2/include/sys/utsname.h uClibc-git/include/sys/utsname.h
+--- uClibc-0.9.33.2/include/sys/utsname.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/utsname.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 4.4 System Identification <sys/utsname.h>
+diff -Nur uClibc-0.9.33.2/include/sys/wait.h uClibc-git/include/sys/wait.h
+--- uClibc-0.9.33.2/include/sys/wait.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/wait.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 3.2.1 Wait for Process Termination <sys/wait.h>
+@@ -47,7 +46,7 @@
+ (__extension__ (((union { __typeof(status) __in; int __i; }) \
+ { .__in = (status) }).__i))
+ # else
+-# define __WAIT_INT(status) (*(__const int *) &(status))
++# define __WAIT_INT(status) (*(const int *) &(status))
+ # endif
+
+ /* This is the type of the argument to `wait'. The funky union
+@@ -137,7 +136,10 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options);
++#ifdef _LIBC
++extern __typeof(waitpid) __waitpid_nocancel attribute_hidden;
+ libc_hidden_proto(waitpid)
++#endif
+
+ #if defined __USE_SVID || defined __USE_XOPEN
+ # define __need_siginfo_t
+@@ -158,10 +160,6 @@
+ #endif
+
+ #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+-/* This being here makes the prototypes valid whether or not
+- we have already included <sys/resource.h> to define `struct rusage'. */
+-struct rusage;
+-
+ /* Wait for a child to exit. When one does, put its status in *STAT_LOC and
+ return its process ID. For errors return (pid_t) -1. If USAGE is not
+ nil, store information about the child's resource usage there. If the
+@@ -175,9 +173,12 @@
+ /* PID is like waitpid. Other args are like wait3. */
+ extern __pid_t wait4 (__pid_t __pid, __WAIT_STATUS __stat_loc, int __options,
+ struct rusage *__usage) __THROW;
+-libc_hidden_proto(wait4)
+ #endif /* Use BSD. */
+
++#ifdef _LIBC
++extern __pid_t __wait4_nocancel(__pid_t, __WAIT_STATUS, int, struct rusage *) attribute_hidden;
++#endif
++
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/sys/xattr.h uClibc-git/include/sys/xattr.h
+--- uClibc-0.9.33.2/include/sys/xattr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/sys/xattr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_XATTR_H
+ #define _SYS_XATTR_H 1
+@@ -37,48 +36,48 @@
+
+ /* Set the attribute NAME of the file pointed to by PATH to VALUE (which
+ is SIZE bytes long). Return 0 on success, -1 for errors. */
+-extern int setxattr (__const char *__path, __const char *__name,
+- __const void *__value, size_t __size, int __flags)
++extern int setxattr (const char *__path, const char *__name,
++ const void *__value, size_t __size, int __flags)
+ __THROW;
+
+ /* Set the attribute NAME of the file pointed to by PATH to VALUE (which is
+ SIZE bytes long), not following symlinks for the last pathname component.
+ Return 0 on success, -1 for errors. */
+-extern int lsetxattr (__const char *__path, __const char *__name,
+- __const void *__value, size_t __size, int __flags)
++extern int lsetxattr (const char *__path, const char *__name,
++ const void *__value, size_t __size, int __flags)
+ __THROW;
+
+ /* Set the attribute NAME of the file descriptor FD to VALUE (which is SIZE
+ bytes long). Return 0 on success, -1 for errors. */
+-extern int fsetxattr (int __fd, __const char *__name, __const void *__value,
++extern int fsetxattr (int __fd, const char *__name, const void *__value,
+ size_t __size, int __flags) __THROW;
+
+ /* Get the attribute NAME of the file pointed to by PATH to VALUE (which is
+ SIZE bytes long). Return 0 on success, -1 for errors. */
+-extern ssize_t getxattr (__const char *__path, __const char *__name,
++extern ssize_t getxattr (const char *__path, const char *__name,
+ void *__value, size_t __size) __THROW;
+
+ /* Get the attribute NAME of the file pointed to by PATH to VALUE (which is
+ SIZE bytes long), not following symlinks for the last pathname component.
+ Return 0 on success, -1 for errors. */
+-extern ssize_t lgetxattr (__const char *__path, __const char *__name,
++extern ssize_t lgetxattr (const char *__path, const char *__name,
+ void *__value, size_t __size) __THROW;
+
+ /* Get the attribute NAME of the file descriptor FD to VALUE (which is SIZE
+ bytes long). Return 0 on success, -1 for errors. */
+-extern ssize_t fgetxattr (int __fd, __const char *__name, void *__value,
++extern ssize_t fgetxattr (int __fd, const char *__name, void *__value,
+ size_t __size) __THROW;
+
+ /* List attributes of the file pointed to by PATH into the user-supplied
+ buffer LIST (which is SIZE bytes big). Return 0 on success, -1 for
+ errors. */
+-extern ssize_t listxattr (__const char *__path, char *__list, size_t __size)
++extern ssize_t listxattr (const char *__path, char *__list, size_t __size)
+ __THROW;
+
+ /* List attributes of the file pointed to by PATH into the user-supplied
+ buffer LIST (which is SIZE bytes big), not following symlinks for the
+ last pathname component. Return 0 on success, -1 for errors. */
+-extern ssize_t llistxattr (__const char *__path, char *__list, size_t __size)
++extern ssize_t llistxattr (const char *__path, char *__list, size_t __size)
+ __THROW;
+
+ /* List attributes of the file descriptor FD into the user-supplied buffer
+@@ -88,16 +87,16 @@
+
+ /* Remove the attribute NAME from the file pointed to by PATH. Return 0
+ on success, -1 for errors. */
+-extern int removexattr (__const char *__path, __const char *__name) __THROW;
++extern int removexattr (const char *__path, const char *__name) __THROW;
+
+ /* Remove the attribute NAME from the file pointed to by PATH, not
+ following symlinks for the last pathname component. Return 0 on
+ success, -1 for errors. */
+-extern int lremovexattr (__const char *__path, __const char *__name) __THROW;
++extern int lremovexattr (const char *__path, const char *__name) __THROW;
+
+ /* Remove the attribute NAME from the file descriptor FD. Return 0 on
+ success, -1 for errors. */
+-extern int fremovexattr (int __fd, __const char *__name) __THROW;
++extern int fremovexattr (int __fd, const char *__name) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/include/tar.h uClibc-git/include/tar.h
+--- uClibc-0.9.33.2/include/tar.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/tar.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TAR_H
+ #define _TAR_H 1
+diff -Nur uClibc-0.9.33.2/include/termios.h uClibc-git/include/termios.h
+--- uClibc-0.9.33.2/include/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 7.1-2 General Terminal Interface <termios.h>
+@@ -46,10 +45,10 @@
+ #endif
+
+ /* Return the output baud rate stored in *TERMIOS_P. */
+-extern speed_t cfgetospeed (__const struct termios *__termios_p) __THROW;
++extern speed_t cfgetospeed (const struct termios *__termios_p) __THROW;
+
+ /* Return the input baud rate stored in *TERMIOS_P. */
+-extern speed_t cfgetispeed (__const struct termios *__termios_p) __THROW;
++extern speed_t cfgetispeed (const struct termios *__termios_p) __THROW;
+
+ /* Set the output baud rate stored in *TERMIOS_P to SPEED. */
+ extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __THROW;
+@@ -72,7 +71,7 @@
+ /* Set the state of FD to *TERMIOS_P.
+ Values for OPTIONAL_ACTIONS (TCSA*) are in <bits/termios.h>. */
+ extern int tcsetattr (int __fd, int __optional_actions,
+- __const struct termios *__termios_p) __THROW;
++ const struct termios *__termios_p) __THROW;
+ libc_hidden_proto(tcsetattr)
+
+
+diff -Nur uClibc-0.9.33.2/include/tgmath.h uClibc-git/include/tgmath.h
+--- uClibc-0.9.33.2/include/tgmath.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/tgmath.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
++/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007
++ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.22 Type-generic math <tgmath.h>
+@@ -47,174 +47,199 @@
+
+ /* 1 if 'type' is a floating type, 0 if 'type' is an integer type.
+ Allows for _Bool. Expands to an integer constant expression. */
+-# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
++# if 0 /* __GNUC_PREREQ (3, 1) */
++# define __floating_type(type) \
++ (__builtin_classify_type ((type) 0) == 8 \
++ || (__builtin_classify_type ((type) 0) == 9 \
++ && __builtin_classify_type (__real__ ((type) 0)) == 8))
++# else
++# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
++# endif
+
+ /* The tgmath real type for T, where E is 0 if T is an integer type and
+ 1 for a floating type. */
+ # define __tgmath_real_type_sub(T, E) \
+- __typeof__(*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0 \
+- : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0))
++ __typeof__ (*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0 \
++ : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0))
+
+ /* The tgmath real type of EXPR. */
+ # define __tgmath_real_type(expr) \
+- __tgmath_real_type_sub(__typeof__(expr), __floating_type(__typeof__(expr)))
++ __tgmath_real_type_sub (__typeof__ ((__typeof__ (expr)) 0), \
++ __floating_type (__typeof__ (expr)))
+
+
+ /* We have two kinds of generic macros: to support functions which are
+ only defined on real valued parameters and those which are defined
+ for complex functions as well. */
+ # define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
+- (__extension__ ({ __tgmath_real_type (Val) __tgmres; \
+- if (sizeof (Val) == sizeof (double) \
+- || __builtin_classify_type (Val) != 8) \
+- __tgmres = Fct (Val); \
+- else if (sizeof (Val) == sizeof (float)) \
+- __tgmres = Fct##f (Val); \
+- else \
+- __tgmres = __tgml(Fct) (Val); \
+- __tgmres; }))
++ (__extension__ ((sizeof (Val) == sizeof (double) \
++ || __builtin_classify_type (Val) != 8) \
++ ? (__tgmath_real_type (Val)) Fct (Val) \
++ : (sizeof (Val) == sizeof (float)) \
++ ? (__tgmath_real_type (Val)) Fct##f (Val) \
++ : (__tgmath_real_type (Val)) __tgml(Fct) (Val)))
++
++# define __TGMATH_UNARY_REAL_RET_ONLY(Val, RetType, Fct) \
++ (__extension__ ((sizeof (Val) == sizeof (double) \
++ || __builtin_classify_type (Val) != 8) \
++ ? (RetType) Fct (Val) \
++ : (sizeof (Val) == sizeof (float)) \
++ ? (RetType) Fct##f (Val) \
++ : (RetType) __tgml(Fct) (Val)))
+
+ # define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
+- (__extension__ ({ __tgmath_real_type (Val1) __tgmres; \
+- if (sizeof (Val1) == sizeof (double) \
+- || __builtin_classify_type (Val1) != 8) \
+- __tgmres = Fct (Val1, Val2); \
+- else if (sizeof (Val1) == sizeof (float)) \
+- __tgmres = Fct##f (Val1, Val2); \
+- else \
+- __tgmres = __tgml(Fct) (Val1, Val2); \
+- __tgmres; }))
++ (__extension__ ((sizeof (Val1) == sizeof (double) \
++ || __builtin_classify_type (Val1) != 8) \
++ ? (__tgmath_real_type (Val1)) Fct (Val1, Val2) \
++ : (sizeof (Val1) == sizeof (float)) \
++ ? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2) \
++ : (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2)))
+
+ # define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
+- (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
+- if ((sizeof (Val1) > sizeof (double) \
+- || sizeof (Val2) > sizeof (double)) \
+- && __builtin_classify_type ((Val1) + (Val2)) == 8) \
+- __tgmres = __tgml(Fct) (Val1, Val2); \
+- else if (sizeof (Val1) == sizeof (double) \
+- || sizeof (Val2) == sizeof (double) \
+- || __builtin_classify_type (Val1) != 8 \
+- || __builtin_classify_type (Val2) != 8) \
+- __tgmres = Fct (Val1, Val2); \
+- else \
+- __tgmres = Fct##f (Val1, Val2); \
+- __tgmres; }))
++ (__extension__ (((sizeof (Val1) > sizeof (double) \
++ || sizeof (Val2) > sizeof (double)) \
++ && __builtin_classify_type ((Val1) + (Val2)) == 8) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ __tgml(Fct) (Val1, Val2) \
++ : (sizeof (Val1) == sizeof (double) \
++ || sizeof (Val2) == sizeof (double) \
++ || __builtin_classify_type (Val1) != 8 \
++ || __builtin_classify_type (Val2) != 8) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Fct (Val1, Val2) \
++ : (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Fct##f (Val1, Val2)))
+
+ # define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
+- (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
+- if ((sizeof (Val1) > sizeof (double) \
+- || sizeof (Val2) > sizeof (double)) \
+- && __builtin_classify_type ((Val1) + (Val2)) == 8) \
+- __tgmres = __tgml(Fct) (Val1, Val2, Val3); \
+- else if (sizeof (Val1) == sizeof (double) \
+- || sizeof (Val2) == sizeof (double) \
+- || __builtin_classify_type (Val1) != 8 \
+- || __builtin_classify_type (Val2) != 8) \
+- __tgmres = Fct (Val1, Val2, Val3); \
+- else \
+- __tgmres = Fct##f (Val1, Val2, Val3); \
+- __tgmres; }))
++ (__extension__ (((sizeof (Val1) > sizeof (double) \
++ || sizeof (Val2) > sizeof (double)) \
++ && __builtin_classify_type ((Val1) + (Val2)) == 8) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ __tgml(Fct) (Val1, Val2, Val3) \
++ : (sizeof (Val1) == sizeof (double) \
++ || sizeof (Val2) == sizeof (double) \
++ || __builtin_classify_type (Val1) != 8 \
++ || __builtin_classify_type (Val2) != 8) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Fct (Val1, Val2, Val3) \
++ : (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Fct##f (Val1, Val2, Val3)))
+
+ # define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
+- (__extension__ ({ __tgmath_real_type ((Val1) + (Val2) + (Val3)) __tgmres;\
+- if ((sizeof (Val1) > sizeof (double) \
+- || sizeof (Val2) > sizeof (double) \
+- || sizeof (Val3) > sizeof (double)) \
+- && __builtin_classify_type ((Val1) + (Val2) \
+- + (Val3)) == 8) \
+- __tgmres = __tgml(Fct) (Val1, Val2, Val3); \
+- else if (sizeof (Val1) == sizeof (double) \
+- || sizeof (Val2) == sizeof (double) \
+- || sizeof (Val3) == sizeof (double) \
+- || __builtin_classify_type (Val1) != 8 \
+- || __builtin_classify_type (Val2) != 8 \
+- || __builtin_classify_type (Val3) != 8) \
+- __tgmres = Fct (Val1, Val2, Val3); \
+- else \
+- __tgmres = Fct##f (Val1, Val2, Val3); \
+- __tgmres; }))
++ (__extension__ (((sizeof (Val1) > sizeof (double) \
++ || sizeof (Val2) > sizeof (double) \
++ || sizeof (Val3) > sizeof (double)) \
++ && __builtin_classify_type ((Val1) + (Val2) + (Val3)) \
++ == 8) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0 \
++ + (__tgmath_real_type (Val3)) 0)) \
++ __tgml(Fct) (Val1, Val2, Val3) \
++ : (sizeof (Val1) == sizeof (double) \
++ || sizeof (Val2) == sizeof (double) \
++ || sizeof (Val3) == sizeof (double) \
++ || __builtin_classify_type (Val1) != 8 \
++ || __builtin_classify_type (Val2) != 8 \
++ || __builtin_classify_type (Val3) != 8) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0 \
++ + (__tgmath_real_type (Val3)) 0)) \
++ Fct (Val1, Val2, Val3) \
++ : (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0 \
++ + (__tgmath_real_type (Val3)) 0)) \
++ Fct##f (Val1, Val2, Val3)))
+
+ /* XXX This definition has to be changed as soon as the compiler understands
+ the imaginary keyword. */
+ # define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
+- (__extension__ ({ __tgmath_real_type (Val) __tgmres; \
+- if (sizeof (__real__ (Val)) > sizeof (double) \
+- && __builtin_classify_type (__real__ (Val)) == 8) \
+- { \
+- if (sizeof (__real__ (Val)) == sizeof (Val)) \
+- __tgmres = __tgml(Fct) (Val); \
+- else \
+- __tgmres = __tgml(Cfct) (Val); \
+- } \
+- else if (sizeof (__real__ (Val)) == sizeof (double) \
+- || __builtin_classify_type (__real__ (Val)) \
+- != 8) \
+- { \
+- if (sizeof (__real__ (Val)) == sizeof (Val)) \
+- __tgmres = Fct (Val); \
+- else \
+- __tgmres = Cfct (Val); \
+- } \
+- else \
+- { \
+- if (sizeof (__real__ (Val)) == sizeof (Val)) \
+- __tgmres = Fct##f (Val); \
+- else \
+- __tgmres = Cfct##f (Val); \
+- } \
+- __tgmres; }))
++ (__extension__ ((sizeof (__real__ (Val)) == sizeof (double) \
++ || __builtin_classify_type (__real__ (Val)) != 8) \
++ ? ((sizeof (__real__ (Val)) == sizeof (Val)) \
++ ? (__tgmath_real_type (Val)) Fct (Val) \
++ : (__tgmath_real_type (Val)) Cfct (Val)) \
++ : (sizeof (__real__ (Val)) == sizeof (float)) \
++ ? ((sizeof (__real__ (Val)) == sizeof (Val)) \
++ ? (__tgmath_real_type (Val)) Fct##f (Val) \
++ : (__tgmath_real_type (Val)) Cfct##f (Val)) \
++ : ((sizeof (__real__ (Val)) == sizeof (Val)) \
++ ? (__tgmath_real_type (Val)) __tgml(Fct) (Val) \
++ : (__tgmath_real_type (Val)) __tgml(Cfct) (Val))))
++
++# define __TGMATH_UNARY_IMAG(Val, Cfct) \
++ (__extension__ ((sizeof (__real__ (Val)) == sizeof (double) \
++ || __builtin_classify_type (__real__ (Val)) != 8) \
++ ? (__typeof__ ((__tgmath_real_type (Val)) 0 \
++ + _Complex_I)) Cfct (Val) \
++ : (sizeof (__real__ (Val)) == sizeof (float)) \
++ ? (__typeof__ ((__tgmath_real_type (Val)) 0 \
++ + _Complex_I)) Cfct##f (Val) \
++ : (__typeof__ ((__tgmath_real_type (Val)) 0 \
++ + _Complex_I)) __tgml(Cfct) (Val)))
+
+ /* XXX This definition has to be changed as soon as the compiler understands
+ the imaginary keyword. */
+-# define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \
+- (__extension__ ({ __tgmath_real_type (Val) __tgmres; \
+- if (sizeof (Val) == sizeof (__complex__ double) \
+- || __builtin_classify_type (__real__ (Val)) != 8) \
+- __tgmres = Fct (Val); \
+- else if (sizeof (Val) == sizeof (__complex__ float)) \
+- __tgmres = Fct##f (Val); \
+- else \
+- __tgmres = __tgml(Fct) (Val); \
+- __tgmres; }))
++# define __TGMATH_UNARY_REAL_IMAG_RET_REAL(Val, Fct, Cfct) \
++ (__extension__ ((sizeof (__real__ (Val)) == sizeof (double) \
++ || __builtin_classify_type (__real__ (Val)) != 8) \
++ ? ((sizeof (__real__ (Val)) == sizeof (Val)) \
++ ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
++ Fct (Val) \
++ : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
++ Cfct (Val)) \
++ : (sizeof (__real__ (Val)) == sizeof (float)) \
++ ? ((sizeof (__real__ (Val)) == sizeof (Val)) \
++ ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
++ Fct##f (Val) \
++ : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
++ Cfct##f (Val)) \
++ : ((sizeof (__real__ (Val)) == sizeof (Val)) \
++ ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
++ __tgml(Fct) (Val) \
++ : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
++ __tgml(Cfct) (Val))))
+
+ /* XXX This definition has to be changed as soon as the compiler understands
+ the imaginary keyword. */
+ # define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
+- (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
+- if ((sizeof (__real__ (Val1)) > sizeof (double) \
+- || sizeof (__real__ (Val2)) > sizeof (double)) \
+- && __builtin_classify_type (__real__ (Val1) \
+- + __real__ (Val2)) \
+- == 8) \
+- { \
+- if (sizeof (__real__ (Val1)) == sizeof (Val1) \
+- && sizeof (__real__ (Val2)) == sizeof (Val2)) \
+- __tgmres = __tgml(Fct) (Val1, Val2); \
+- else \
+- __tgmres = __tgml(Cfct) (Val1, Val2); \
+- } \
+- else if (sizeof (__real__ (Val1)) == sizeof (double) \
+- || sizeof (__real__ (Val2)) == sizeof(double) \
+- || (__builtin_classify_type (__real__ (Val1)) \
+- != 8) \
+- || (__builtin_classify_type (__real__ (Val2)) \
+- != 8)) \
+- { \
+- if (sizeof (__real__ (Val1)) == sizeof (Val1) \
+- && sizeof (__real__ (Val2)) == sizeof (Val2)) \
+- __tgmres = Fct (Val1, Val2); \
+- else \
+- __tgmres = Cfct (Val1, Val2); \
+- } \
+- else \
+- { \
+- if (sizeof (__real__ (Val1)) == sizeof (Val1) \
+- && sizeof (__real__ (Val2)) == sizeof (Val2)) \
+- __tgmres = Fct##f (Val1, Val2); \
+- else \
+- __tgmres = Cfct##f (Val1, Val2); \
+- } \
+- __tgmres; }))
++ (__extension__ (((sizeof (__real__ (Val1)) > sizeof (double) \
++ || sizeof (__real__ (Val2)) > sizeof (double)) \
++ && __builtin_classify_type (__real__ (Val1) \
++ + __real__ (Val2)) == 8) \
++ ? ((sizeof (__real__ (Val1)) == sizeof (Val1) \
++ && sizeof (__real__ (Val2)) == sizeof (Val2)) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ __tgml(Fct) (Val1, Val2) \
++ : (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ __tgml(Cfct) (Val1, Val2)) \
++ : (sizeof (__real__ (Val1)) == sizeof (double) \
++ || sizeof (__real__ (Val2)) == sizeof (double) \
++ || __builtin_classify_type (__real__ (Val1)) != 8 \
++ || __builtin_classify_type (__real__ (Val2)) != 8) \
++ ? ((sizeof (__real__ (Val1)) == sizeof (Val1) \
++ && sizeof (__real__ (Val2)) == sizeof (Val2)) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Fct (Val1, Val2) \
++ : (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Cfct (Val1, Val2)) \
++ : ((sizeof (__real__ (Val1)) == sizeof (Val1) \
++ && sizeof (__real__ (Val2)) == sizeof (Val2)) \
++ ? (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Fct##f (Val1, Val2) \
++ : (__typeof ((__tgmath_real_type (Val1)) 0 \
++ + (__tgmath_real_type (Val2)) 0)) \
++ Cfct##f (Val1, Val2))))
+ #else
+ # error "Unsupported compiler; you cannot use <tgmath.h>"
+ #endif
+@@ -317,7 +342,7 @@
+ #define ceil(Val) __TGMATH_UNARY_REAL_ONLY (Val, ceil)
+
+ /* Absolute value of X. */
+-#define fabs(Val) __TGMATH_UNARY_REAL_IMAG (Val, fabs, cabs)
++#define fabs(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, fabs, cabs)
+
+ /* Largest integer not greater than X. */
+ #define floor(Val) __TGMATH_UNARY_REAL_ONLY (Val, floor)
+@@ -345,13 +370,13 @@
+
+ /* Round X to nearest integral value according to current rounding
+ direction. */
+-#define lrint(Val) __TGMATH_UNARY_REAL_ONLY (Val, lrint)
+-#define llrint(Val) __TGMATH_UNARY_REAL_ONLY (Val, llrint)
++#define lrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lrint)
++#define llrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llrint)
+
+ /* Round X to nearest integral value, rounding halfway cases away from
+ zero. */
+-#define lround(Val) __TGMATH_UNARY_REAL_ONLY (Val, lround)
+-#define llround(Val) __TGMATH_UNARY_REAL_ONLY (Val, llround)
++#define lround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lround)
++#define llround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llround)
+
+
+ /* Return X with its signed changed to Y's. */
+@@ -376,7 +401,7 @@
+ /* Return the remainder of integer divison X / Y with infinite precision. */
+ #define remainder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, remainder)
+
+-#if defined __UCLIBC_SUSV3_LEGACY__
++#ifdef __UCLIBC_SUSV3_LEGACY__
+ /* Return X times (2 to the Nth power). */
+ #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+ # define scalb(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, scalb)
+@@ -388,10 +413,10 @@
+ /* Return X times (2 to the Nth power). */
+ #define scalbln(Val1, Val2) \
+ __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln)
+-#endif /* UCLIBC_SUSV3_LEGACY */
++#endif /* __UCLIBC_SUSV3_LEGACY__ */
+
+ /* Return the binary exponent of X, which must be nonzero. */
+-#define ilogb(Val) __TGMATH_UNARY_REAL_ONLY (Val, ilogb)
++#define ilogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, int, ilogb)
+
+
+ /* Return positive difference between X and Y. */
+@@ -412,21 +437,21 @@
+ /* Absolute value, conjugates, and projection. */
+
+ /* Argument value of Z. */
+-#define carg(Val) __TGMATH_UNARY_IMAG_ONLY (Val, carg)
++#define carg(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, carg, carg)
+
+ /* Complex conjugate of Z. */
+-#define conj(Val) __TGMATH_UNARY_IMAG_ONLY (Val, conj)
++#define conj(Val) __TGMATH_UNARY_IMAG (Val, conj)
+
+ /* Projection of Z onto the Riemann sphere. */
+-#define cproj(Val) __TGMATH_UNARY_IMAG_ONLY (Val, cproj)
++#define cproj(Val) __TGMATH_UNARY_IMAG (Val, cproj)
+
+
+ /* Decomposing complex values. */
+
+ /* Imaginary part of Z. */
+-#define cimag(Val) __TGMATH_UNARY_IMAG_ONLY (Val, cimag)
++#define cimag(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, cimag, cimag)
+
+ /* Real part of Z. */
+-#define creal(Val) __TGMATH_UNARY_IMAG_ONLY (Val, creal)
++#define creal(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, creal, creal)
+
+ #endif /* tgmath.h */
+diff -Nur uClibc-0.9.33.2/include/time.h uClibc-git/include/time.h
+--- uClibc-0.9.33.2/include/time.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/time.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,4 @@
+-/* Copyright (C) 1991-1999,2000,2001,2002,2003,2006
+- Free Software Foundation, Inc.
++/* Copyright (C) 1991-2003,2006,2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.23 Date and time <time.h>
+@@ -146,10 +144,10 @@
+ #ifdef __UCLIBC_HAS_TM_EXTENSIONS__
+ #ifdef __USE_BSD
+ long int tm_gmtoff; /* Seconds east of UTC. */
+- __const char *tm_zone; /* Timezone abbreviation. */
++ const char *tm_zone; /* Timezone abbreviation. */
+ #else
+ long int __tm_gmtoff; /* Seconds east of UTC. */
+- __const char *__tm_zone; /* Timezone abbreviation. */
++ const char *__tm_zone; /* Timezone abbreviation. */
+ #endif
+ #endif /* __UCLIBC_HAS_TM_EXTENSIONS__ */
+ };
+@@ -195,7 +193,9 @@
+ __THROW __attribute__ ((__const__));
+ #endif /* __UCLIBC_HAS_FLOATS__ */
+
+-#define CLOCK_IDFIELD_SIZE 3
++#ifdef _LIBC
++# define CLOCK_IDFIELD_SIZE 3
++#endif
+
+ /* Return the `time_t' representation of TP and normalize TP. */
+ extern time_t mktime (struct tm *__tp) __THROW;
+@@ -205,32 +205,34 @@
+ Write no more than MAXSIZE characters and return the number
+ of characters written, or 0 if it would exceed MAXSIZE. */
+ extern size_t strftime (char *__restrict __s, size_t __maxsize,
+- __const char *__restrict __format,
+- __const struct tm *__restrict __tp) __THROW;
++ const char *__restrict __format,
++ const struct tm *__restrict __tp) __THROW;
+ __END_NAMESPACE_STD
+
+ # ifdef __USE_XOPEN
+ /* Parse S according to FORMAT and store binary time information in TP.
+ The return value is a pointer to the first unparsed character in S. */
+-extern char *strptime (__const char *__restrict __s,
+- __const char *__restrict __fmt, struct tm *__tp)
++extern char *strptime (const char *__restrict __s,
++ const char *__restrict __fmt, struct tm *__tp)
+ __THROW;
+ # endif
+
+ #ifdef __UCLIBC_HAS_XLOCALE__
+-# ifdef __USE_GNU
++# ifdef __USE_XOPEN2K8
+ /* Similar to the two functions above but take the information from
+ the provided locale and not the global locale. */
+ # include <xlocale.h>
+
+ extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
+- __const char *__restrict __format,
+- __const struct tm *__restrict __tp,
++ const char *__restrict __format,
++ const struct tm *__restrict __tp,
+ __locale_t __loc) __THROW;
+ libc_hidden_proto(strftime_l)
++# endif
+
+-extern char *strptime_l (__const char *__restrict __s,
+- __const char *__restrict __fmt, struct tm *__tp,
++# ifdef __USE_GNU
++extern char *strptime_l (const char *__restrict __s,
++ const char *__restrict __fmt, struct tm *__tp,
+ __locale_t __loc) __THROW;
+ libc_hidden_proto(strptime_l)
+ # endif
+@@ -240,23 +242,23 @@
+ __BEGIN_NAMESPACE_STD
+ /* Return the `struct tm' representation of *TIMER
+ in Universal Coordinated Time (aka Greenwich Mean Time). */
+-extern struct tm *gmtime (__const time_t *__timer) __THROW;
++extern struct tm *gmtime (const time_t *__timer) __THROW;
+
+ /* Return the `struct tm' representation
+ of *TIMER in the local timezone. */
+-extern struct tm *localtime (__const time_t *__timer) __THROW;
++extern struct tm *localtime (const time_t *__timer) __THROW;
+ libc_hidden_proto(localtime)
+ __END_NAMESPACE_STD
+
+ # if defined __USE_POSIX || defined __USE_MISC
+ /* Return the `struct tm' representation of *TIMER in UTC,
+ using *TP to store the result. */
+-extern struct tm *gmtime_r (__const time_t *__restrict __timer,
++extern struct tm *gmtime_r (const time_t *__restrict __timer,
+ struct tm *__restrict __tp) __THROW;
+
+ /* Return the `struct tm' representation of *TIMER in local time,
+ using *TP to store the result. */
+-extern struct tm *localtime_r (__const time_t *__restrict __timer,
++extern struct tm *localtime_r (const time_t *__restrict __timer,
+ struct tm *__restrict __tp) __THROW;
+ libc_hidden_proto(localtime_r)
+ # endif /* POSIX or misc */
+@@ -264,11 +266,11 @@
+ __BEGIN_NAMESPACE_STD
+ /* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n"
+ that is the representation of TP in this format. */
+-extern char *asctime (__const struct tm *__tp) __THROW;
++extern char *asctime (const struct tm *__tp) __THROW;
+ libc_hidden_proto(asctime)
+
+ /* Equivalent to `asctime (localtime (timer))'. */
+-extern char *ctime (__const time_t *__timer) __THROW;
++extern char *ctime (const time_t *__timer) __THROW;
+ libc_hidden_proto(ctime)
+ __END_NAMESPACE_STD
+
+@@ -277,12 +279,12 @@
+
+ /* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
+ that is the representation of TP in this format. */
+-extern char *asctime_r (__const struct tm *__restrict __tp,
++extern char *asctime_r (const struct tm *__restrict __tp,
+ char *__restrict __buf) __THROW;
+ libc_hidden_proto(asctime_r)
+
+ /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'. */
+-extern char *ctime_r (__const time_t *__restrict __timer,
++extern char *ctime_r (const time_t *__restrict __timer,
+ char *__restrict __buf) __THROW;
+ # endif /* POSIX or misc */
+
+@@ -314,7 +316,8 @@
+ # ifdef __USE_SVID
+ /* Set the system time to *WHEN.
+ This call is restricted to the superuser. */
+-extern int stime (__const time_t *__when) __THROW;
++extern int stime (const time_t *__when) __THROW;
++libc_hidden_proto(stime)
+ # endif
+
+
+@@ -345,7 +348,7 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern int nanosleep (__const struct timespec *__requested_time,
++extern int nanosleep (const struct timespec *__requested_time,
+ struct timespec *__remaining);
+ libc_hidden_proto(nanosleep)
+
+@@ -358,23 +361,24 @@
+ extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
+
+ /* Set clock CLOCK_ID to value TP. */
+-extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
++extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
+ __THROW;
+ # endif /* __UCLIBC_HAS_REALTIME__ */
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
++
++# if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
++# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+ /* High-resolution sleep with the specified clock.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int clock_nanosleep (clockid_t __clock_id, int __flags,
+- __const struct timespec *__req,
++ const struct timespec *__req,
+ struct timespec *__rem);
+
+ /* Return clock ID for CPU-time clock. */
+ extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW;
+-# endif
+-# endif /* __UCLIBC_HAS_THREADS_NATIVE__ */
++# endif /* __UCLIBC_HAS_THREADS_NATIVE__ */
++# endif
+
+ # if defined __UCLIBC_HAS_REALTIME__
+ /* Create new per-process timer using CLOCK_ID. */
+@@ -387,7 +391,7 @@
+
+ /* Set timer TIMERID to VALUE, returning old value in OVLAUE. */
+ extern int timer_settime (timer_t __timerid, int __flags,
+- __const struct itimerspec *__restrict __value,
++ const struct itimerspec *__restrict __value,
+ struct itimerspec *__restrict __ovalue) __THROW;
+
+ /* Get current value of timer TIMERID and store it in VLAUE. */
+@@ -423,7 +427,7 @@
+
+ This function is a possible cancellation points and therefore not
+ marked with __THROW. */
+-extern struct tm *getdate (__const char *__string);
++extern struct tm *getdate (const char *__string);
+ # endif
+
+ # ifdef __USE_GNU
+@@ -437,7 +441,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int getdate_r (__const char *__restrict __string,
++extern int getdate_r (const char *__restrict __string,
+ struct tm *__restrict __resbufp);
+ # endif
+ #endif /* __UCLIBC_MJN3_ONLY__ */
+diff -Nur uClibc-0.9.33.2/include/ttyent.h uClibc-git/include/ttyent.h
+--- uClibc-0.9.33.2/include/ttyent.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ttyent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -57,7 +57,7 @@
+
+ extern struct ttyent *getttyent (void) __THROW;
+ libc_hidden_proto(getttyent)
+-extern struct ttyent *getttynam (__const char *__tty) __THROW;
++extern struct ttyent *getttynam (const char *__tty) __THROW;
+ extern int setttyent (void) __THROW;
+ libc_hidden_proto(setttyent)
+ extern int endttyent (void) __THROW;
+diff -Nur uClibc-0.9.33.2/include/ucontext.h uClibc-git/include/ucontext.h
+--- uClibc-0.9.33.2/include/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,21 +12,46 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++/* The System V ABI user-level context switching support functions
++ are marked obsolescent by SuSv3. */
+
+ #ifndef _UCONTEXT_H
+ #define _UCONTEXT_H 1
+
+ #include <features.h>
+
++#ifdef __UCLIBC_HAS_CONTEXT_FUNCS__
++
+ /* Get machine dependent definition of data structures. */
+ #include <sys/ucontext.h>
+
+-/* The System V ABI user-level context switching support functions
+- * are marked obsolescent by SuSv3, and are not implemented by
+- * uClibc. This header is therefore empty. */
++__BEGIN_DECLS
++
++/* Get user context and store it in variable pointed to by UCP. */
++extern int getcontext (ucontext_t *__ucp) __THROW;
++
++/* Set user context from information of variable pointed to by UCP. */
++extern int setcontext (const ucontext_t *__ucp) __THROW;
++
++/* Save current context in context variable pointed to by OUCP and set
++ context from variable pointed to by UCP. */
++extern int swapcontext (ucontext_t *__restrict __oucp,
++ const ucontext_t *__restrict __ucp) __THROW;
++
++/* Manipulate user context UCP to continue with calling functions FUNC
++ and the ARGC-1 parameters following ARGC when the context is used
++ the next time in `setcontext' or `swapcontext'.
++
++ We cannot say anything about the parameters FUNC takes; `void'
++ is as good as any other choice. */
++extern void makecontext (ucontext_t *__ucp, void (*__func) (void),
++ int __argc, ...) __THROW;
++
++__END_DECLS
+
++#endif
+
+ #endif /* ucontext.h */
+diff -Nur uClibc-0.9.33.2/include/ulimit.h uClibc-git/include/ulimit.h
+--- uClibc-0.9.33.2/include/ulimit.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/ulimit.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ULIMIT_H
+ #define _ULIMIT_H 1
+diff -Nur uClibc-0.9.33.2/include/unistd.h uClibc-git/include/unistd.h
+--- uClibc-0.9.33.2/include/unistd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/unistd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 2.10 Symbolic Constants <unistd.h>
+@@ -30,35 +29,67 @@
+ /* These may be used to determine what facilities are present at compile time.
+ Their values can be obtained at run time from `sysconf'. */
+
++#ifdef __USE_XOPEN2K8
++/* POSIX Standard approved as ISO/IEC 9945-1 as of September 2008. */
++# define _POSIX_VERSION 200809L
++#elif defined __USE_XOPEN2K
+ /* POSIX Standard approved as ISO/IEC 9945-1 as of December 2001. */
+-#define _POSIX_VERSION 200112L
++# define _POSIX_VERSION 200112L
++#elif defined __USE_POSIX199506
++/* POSIX Standard approved as ISO/IEC 9945-1 as of June 1995. */
++# define _POSIX_VERSION 199506L
++#elif defined __USE_POSIX199309
++/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1993. */
++# define _POSIX_VERSION 199309L
++#else
++/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1990. */
++# define _POSIX_VERSION 199009L
++#endif
+
+ /* These are not #ifdef __USE_POSIX2 because they are
+ in the theoretically application-owned namespace. */
+
++#ifdef __USE_XOPEN2K8
++# define __POSIX2_THIS_VERSION 200809L
++/* The utilities on GNU systems also correspond to this version. */
++#elif defined __USE_XOPEN2K
++/* The utilities on GNU systems also correspond to this version. */
++# define __POSIX2_THIS_VERSION 200112L
++#elif defined __USE_POSIX199506
++/* The utilities on GNU systems also correspond to this version. */
++# define __POSIX2_THIS_VERSION 199506L
++#else
++/* The utilities on GNU systems also correspond to this version. */
++# define __POSIX2_THIS_VERSION 199209L
++#endif
++
+ /* The utilities on GNU systems also correspond to this version. */
+-#define _POSIX2_VERSION 200112L
++#define _POSIX2_VERSION __POSIX2_THIS_VERSION
+
+ /* If defined, the implementation supports the
+ C Language Bindings Option. */
+-#define _POSIX2_C_BIND 200112L
++#define _POSIX2_C_BIND __POSIX2_THIS_VERSION
+
+ /* If defined, the implementation supports the
+ C Language Development Utilities Option. */
+-#define _POSIX2_C_DEV 200112L
++#define _POSIX2_C_DEV __POSIX2_THIS_VERSION
+
+ /* If defined, the implementation supports the
+ Software Development Utilities Option. */
+-#define _POSIX2_SW_DEV 200112L
++#define _POSIX2_SW_DEV __POSIX2_THIS_VERSION
+
+ #if 0 /* uClibc does not provide the utility */
+ /* If defined, the implementation supports the
+ creation of locales with the localedef utility. */
+-#define _POSIX2_LOCALEDEF 200112L
++#define _POSIX2_LOCALEDEF __POSIX2_THIS_VERSION
+ #endif
+
+ /* X/Open version number to which the library conforms. It is selectable. */
+-#ifdef __USE_UNIX98
++#ifdef __USE_XOPEN2K8
++# define _XOPEN_VERSION 700
++#elif defined __USE_XOPEN2K
++# define _XOPEN_VERSION 600
++#elif defined __USE_UNIX98
+ # define _XOPEN_VERSION 500
+ #else
+ # define _XOPEN_VERSION 4
+@@ -171,6 +202,8 @@
+ */
+
+ #include <bits/posix_opt.h>
++/* keep it after posix_opt.h, it overwrites based on uClibc's config options */
++#include <bits/uClibc_posix_opt.h>
+
+ /* Get the environment definitions from Unix98. */
+ #ifdef __USE_UNIX98
+@@ -255,16 +288,16 @@
+ #define F_OK 0 /* Test for existence. */
+
+ /* Test for access to NAME using the real UID and real GID. */
+-extern int access (__const char *__name, int __type) __THROW __nonnull ((1));
++extern int access (const char *__name, int __type) __THROW __nonnull ((1));
+
+ #if 0 /*def __USE_GNU*/
+ /* Test for access to NAME using the effective UID and GID
+ (as normal file operations use). */
+-extern int euidaccess (__const char *__name, int __type)
++extern int euidaccess (const char *__name, int __type)
+ __THROW __nonnull ((1));
+
+ /* An alias for `euidaccess', used by some other systems. */
+-extern int eaccess (__const char *__name, int __type)
++extern int eaccess (const char *__name, int __type)
+ __THROW __nonnull ((1));
+ #endif
+
+@@ -272,8 +305,9 @@
+ /* Test for access to FILE relative to the directory FD is open on.
+ If AT_EACCESS is set in FLAG, then use effective IDs like `eaccess',
+ otherwise use real IDs like `access'. */
+-extern int faccessat (int __fd, __const char *__file, int __type, int __flag)
++extern int faccessat (int __fd, const char *__file, int __type, int __flag)
+ __THROW __nonnull ((2)) __wur;
++libc_hidden_proto(faccessat)
+ #endif /* Use GNU. */
+
+
+@@ -299,7 +333,10 @@
+ Return the new file position. */
+ #ifndef __USE_FILE_OFFSET64
+ extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
++# ifdef _LIBC
++extern __typeof(lseek) __lseek_nocancel attribute_hidden;
+ libc_hidden_proto(lseek)
++# endif
+ #else
+ # ifdef __REDIRECT_NTH
+ extern __off64_t __REDIRECT_NTH (lseek,
+@@ -312,7 +349,10 @@
+ #ifdef __USE_LARGEFILE64
+ extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
+ __THROW;
++# ifdef _LIBC
++extern __typeof(lseek64) __lseek64_nocancel attribute_hidden;
+ libc_hidden_proto(lseek64)
++# endif
+ #endif
+
+ /* Close the file descriptor FD.
+@@ -320,7 +360,11 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int close (int __fd);
++#ifdef _LIBC
++extern __typeof(close) __close_nocancel attribute_hidden;
++extern void __close_nocancel_no_status(int) attribute_hidden;
+ libc_hidden_proto(close)
++#endif
+
+ /* Read NBYTES into BUF from FD. Return the
+ number read, -1 for errors or 0 for EOF.
+@@ -328,14 +372,20 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur;
++#ifdef _LIBC
++extern __typeof(read) __read_nocancel attribute_hidden;
+ libc_hidden_proto(read)
++#endif
+
+ /* Write N bytes of BUF to FD. Return the number written, or -1.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t write (int __fd, __const void *__buf, size_t __n) __wur;
++extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur;
++#ifdef _LIBC
++extern __typeof(write) __write_nocancel attribute_hidden;
+ libc_hidden_proto(write)
++#endif
+
+ #ifdef __USE_UNIX98
+ # ifndef __USE_FILE_OFFSET64
+@@ -353,14 +403,14 @@
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+-extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n,
++extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
+ __off_t __offset) __wur;
+ # else
+ # ifdef __REDIRECT
+ extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes,
+ __off64_t __offset),
+ pread64) __wur;
+-extern ssize_t __REDIRECT (pwrite, (int __fd, __const void *__buf,
++extern ssize_t __REDIRECT (pwrite, (int __fd, const void *__buf,
+ size_t __nbytes, __off64_t __offset),
+ pwrite64) __wur;
+ # else
+@@ -377,7 +427,7 @@
+ __off64_t __offset) __wur;
+ /* Write N bytes of BUF to FD at the given position OFFSET without
+ changing the file pointer. Return the number written, or -1. */
+-extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
++extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
+ __off64_t __offset) __wur;
+ # endif
+ #endif
+@@ -446,7 +496,7 @@
+
+
+ /* Change the owner and group of FILE. */
+-extern int chown (__const char *__file, __uid_t __owner, __gid_t __group)
++extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
+ __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(chown)
+
+@@ -457,7 +507,7 @@
+
+ /* Change owner and group of FILE, if it is a symbolic
+ link the ownership of the symbolic link is changed. */
+-extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group)
++extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
+ __THROW __nonnull ((1)) __wur;
+
+ #endif /* Use BSD || X/Open Unix. */
+@@ -465,13 +515,14 @@
+ #ifdef __USE_ATFILE
+ /* Change the owner and group of FILE relative to the directory FD is open
+ on. */
+-extern int fchownat (int __fd, __const char *__file, __uid_t __owner,
++extern int fchownat (int __fd, const char *__file, __uid_t __owner,
+ __gid_t __group, int __flag)
+ __THROW __nonnull ((2)) __wur;
++libc_hidden_proto(fchownat)
+ #endif /* Use GNU. */
+
+ /* Change the process's working directory to PATH. */
+-extern int chdir (__const char *__path) __THROW __nonnull ((1)) __wur;
++extern int chdir (const char *__path) __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(chdir)
+
+ #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+@@ -513,6 +564,13 @@
+ extern int dup2 (int __fd, int __fd2) __THROW;
+ libc_hidden_proto(dup2)
+
++#ifdef __USE_GNU
++/* Duplicate FD to FD2, closing FD2 and making it open on the same
++ file while setting flags according to FLAGS. */
++extern int dup3 (int __fd, int __fd2, int __flags) __THROW;
++libc_hidden_proto(dup3)
++#endif
++
+ /* NULL-terminated array of "NAME=VALUE" environment variables. */
+ extern char **__environ;
+ #ifdef __USE_GNU
+@@ -522,48 +580,56 @@
+
+ /* Replace the current process, executing PATH with arguments ARGV and
+ environment ENVP. ARGV and ENVP are terminated by NULL pointers. */
+-extern int execve (__const char *__path, char *__const __argv[],
+- char *__const __envp[]) __THROW __nonnull ((1));
++extern int execve (const char *__path, char *const __argv[],
++ char *const __envp[]) __THROW __nonnull ((1));
+ libc_hidden_proto(execve)
+
+-#if 0 /*def __USE_GNU*/
++#if 0 /*def __USE_XOPEN2K8*/
+ /* Execute the file FD refers to, overlaying the running program image.
+ ARGV and ENVP are passed to the new program, as for `execve'. */
+-extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[])
++extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
+ __THROW;
+ #endif
+
+
+ /* Execute PATH with arguments ARGV and environment from `environ'. */
+-extern int execv (__const char *__path, char *__const __argv[])
++extern int execv (const char *__path, char *const __argv[])
+ __THROW __nonnull ((1));
+ libc_hidden_proto(execv)
+
+ /* Execute PATH with all arguments after PATH until a NULL pointer,
+ and the argument after that for environment. */
+-extern int execle (__const char *__path, __const char *__arg, ...)
++extern int execle (const char *__path, const char *__arg, ...)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(execle)
+
+ /* Execute PATH with all arguments after PATH until
+ a NULL pointer and environment from `environ'. */
+-extern int execl (__const char *__path, __const char *__arg, ...)
++extern int execl (const char *__path, const char *__arg, ...)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(execl)
+
+ /* Execute FILE, searching in the `PATH' environment variable if it contains
+ no slashes, with arguments ARGV and environment from `environ'. */
+-extern int execvp (__const char *__file, char *__const __argv[])
++extern int execvp (const char *__file, char *const __argv[])
+ __THROW __nonnull ((1));
+ libc_hidden_proto(execvp)
+
+ /* Execute FILE, searching in the `PATH' environment variable if
+ it contains no slashes, with all arguments after FILE until a
+ NULL pointer and environment from `environ'. */
+-extern int execlp (__const char *__file, __const char *__arg, ...)
++extern int execlp (const char *__file, const char *__arg, ...)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(execlp)
+
++#ifdef __USE_GNU
++/* Execute FILE, searching in the `PATH' environment variable if it contains
++ no slashes, with arguments ARGV and environment from a pointer */
++extern int execvpe (__const char *__file, char *__const __argv[], char *__const __envp[])
++ __THROW __nonnull ((1));
++libc_hidden_proto(execvpe)
++#endif
++
+
+ #if defined __USE_MISC || defined __USE_XOPEN
+ /* Add INC to priority of the current process. */
+@@ -582,7 +648,7 @@
+ #include <bits/confname.h>
+
+ /* Get file-specific configuration information about PATH. */
+-extern long int pathconf (__const char *__path, int __name)
++extern long int pathconf (const char *__path, int __name)
+ __THROW __nonnull ((1));
+
+ /* Get file-specific configuration about descriptor FD. */
+@@ -767,7 +833,12 @@
+ Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+ extern __pid_t fork (void) __THROW;
++# ifdef _LIBC
++# ifdef __UCLIBC_HAS_THREADS__
++extern __typeof(fork) __libc_fork;
++# endif
+ libc_hidden_proto(fork)
++# endif
+ #endif
+
+ #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+@@ -779,8 +850,10 @@
+ libc_hidden_proto(vfork)
+ #endif /* Use BSD. */
+
++#if 0 /* psm: seems unused , exit-thread.S is not compiled */
+ /* Special exit function which only terminates the current thread. */
+ extern void __exit_thread (int val) __attribute__ ((__noreturn__));
++#endif
+
+ /* Return the pathname of the terminal FD is open on, or NULL on errors.
+ The returned storage is good only until the next call to this function. */
+@@ -797,7 +870,6 @@
+ extern int isatty (int __fd) __THROW;
+ libc_hidden_proto(isatty)
+
+-
+ #if 0 /*defined __USE_BSD \
+ || (defined __USE_XOPEN_EXTENDED && !defined __USE_UNIX98)*/
+ /* Return the index into the active-logins file (utmp) for
+@@ -807,26 +879,27 @@
+
+
+ /* Make a link to FROM named TO. */
+-extern int link (__const char *__from, __const char *__to)
++extern int link (const char *__from, const char *__to)
+ __THROW __nonnull ((1, 2)) __wur;
+
+ #ifdef __USE_ATFILE
+ /* Like link but relative paths in TO and FROM are interpreted relative
+ to FROMFD and TOFD respectively. */
+-extern int linkat (int __fromfd, __const char *__from, int __tofd,
+- __const char *__to, int __flags)
++extern int linkat (int __fromfd, const char *__from, int __tofd,
++ const char *__to, int __flags)
+ __THROW __nonnull ((2, 4)) __wur;
++libc_hidden_proto(linkat)
+ #endif
+
+ #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+ /* Make a symbolic link to FROM named TO. */
+-extern int symlink (__const char *__from, __const char *__to)
++extern int symlink (const char *__from, const char *__to)
+ __THROW __nonnull ((1, 2)) __wur;
+
+ /* Read the contents of the symbolic link PATH into no more than
+ LEN bytes of BUF. The contents are not null-terminated.
+ Returns the number of characters read, or -1 for errors. */
+-extern ssize_t readlink (__const char *__restrict __path,
++extern ssize_t readlink (const char *__restrict __path,
+ char *__restrict __buf, size_t __len)
+ __THROW __nonnull ((1, 2)) __wur;
+ libc_hidden_proto(readlink)
+@@ -834,27 +907,30 @@
+
+ #ifdef __USE_ATFILE
+ /* Like symlink but a relative path in TO is interpreted relative to TOFD. */
+-extern int symlinkat (__const char *__from, int __tofd,
+- __const char *__to) __THROW __nonnull ((1, 3)) __wur;
++extern int symlinkat (const char *__from, int __tofd,
++ const char *__to) __THROW __nonnull ((1, 3)) __wur;
++libc_hidden_proto(symlinkat)
+
+ /* Like readlink but a relative PATH is interpreted relative to FD. */
+-extern ssize_t readlinkat (int __fd, __const char *__restrict __path,
++extern ssize_t readlinkat (int __fd, const char *__restrict __path,
+ char *__restrict __buf, size_t __len)
+ __THROW __nonnull ((2, 3)) __wur;
++libc_hidden_proto(readlinkat)
+ #endif
+
+ /* Remove the link NAME. */
+-extern int unlink (__const char *__name) __THROW __nonnull ((1));
++extern int unlink (const char *__name) __THROW __nonnull ((1));
+ libc_hidden_proto(unlink)
+
+ #ifdef __USE_ATFILE
+ /* Remove the link NAME relative to FD. */
+-extern int unlinkat (int __fd, __const char *__name, int __flag)
++extern int unlinkat (int __fd, const char *__name, int __flag)
+ __THROW __nonnull ((2));
++libc_hidden_proto(unlinkat)
+ #endif
+
+ /* Remove the directory PATH. */
+-extern int rmdir (__const char *__path) __THROW __nonnull ((1));
++extern int rmdir (const char *__path) __THROW __nonnull ((1));
+ libc_hidden_proto(rmdir)
+
+
+@@ -884,7 +960,7 @@
+
+ #if 0 /*def __USE_BSD*/
+ /* Set the login name returned by `getlogin'. */
+-extern int setlogin (__const char *__name) __THROW __nonnull ((1));
++extern int setlogin (const char *__name) __THROW __nonnull ((1));
+ #endif
+
+
+@@ -910,13 +986,14 @@
+ #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98)
+ /* Set the name of the current host to NAME, which is LEN bytes long.
+ This call is restricted to the super-user. */
+-extern int sethostname (__const char *__name, size_t __len)
++extern int sethostname (const char *__name, size_t __len)
+ __THROW __nonnull ((1)) __wur;
+
+ /* Set the current machine's Internet number to ID.
+ This call is restricted to the super-user. */
+ extern int sethostid (long int __id) __THROW __wur;
+
++
+ #if defined __UCLIBC_BSD_SPECIFIC__ || defined _LIBC
+ /* Get and set the NIS (aka YP) domain name, if any.
+ Called just like `gethostname' and `sethostname'.
+@@ -926,10 +1003,11 @@
+ libc_hidden_proto(getdomainname)
+ #endif
+ #if defined __UCLIBC_BSD_SPECIFIC__
+-extern int setdomainname (__const char *__name, size_t __len)
++extern int setdomainname (const char *__name, size_t __len)
+ __THROW __nonnull ((1)) __wur;
+ #endif
+
++
+ #if defined __UCLIBC_LINUX_SPECIFIC__
+ /* Revoke access permissions to all processes currently communicating
+ with the control terminal, and then send a SIGHUP signal to the process
+@@ -939,7 +1017,7 @@
+
+ #if 0
+ /* Revoke the access of all descriptors currently open on FILE. */
+-extern int revoke (__const char *__file) __THROW __nonnull ((1)) __wur;
++extern int revoke (const char *__file) __THROW __nonnull ((1)) __wur;
+
+
+ /* Enable statistical profiling, writing samples of the PC into at most
+@@ -956,7 +1034,7 @@
+ /* Turn accounting on if NAME is an existing file. The system will then write
+ a record for each process as it terminates, to this file. If NAME is NULL,
+ turn accounting off. This call is restricted to the super-user. */
+-extern int acct (__const char *__name) __THROW;
++extern int acct (const char *__name) __THROW;
+
+
+ /* Successive calls return the shells listed in `/etc/shells'. */
+@@ -977,21 +1055,21 @@
+ #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+ /* Make PATH be the root directory (the starting point for absolute paths).
+ This call is restricted to the super-user. */
+-extern int chroot (__const char *__path) __THROW __nonnull ((1)) __wur;
++extern int chroot (const char *__path) __THROW __nonnull ((1)) __wur;
+
+ /* Prompt with PROMPT and read a string from the terminal without echoing.
+ Uses /dev/tty if possible; otherwise stderr and stdin. */
+-extern char *getpass (__const char *__prompt) __nonnull ((1));
++extern char *getpass (const char *__prompt) __nonnull ((1));
+ #endif /* Use BSD || X/Open. */
+
+
+-#if defined __USE_BSD || defined __USE_XOPEN
++#if defined __USE_BSD || defined __USE_XOPEN || defined __USE_XOPEN2K
+ /* Make all changes done to FD actually appear on disk.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int fsync (int __fd);
+-#endif /* Use BSD || X/Open. */
++#endif /* Use BSD || X/Open || Unix98. */
+
+
+ #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+@@ -1017,21 +1095,22 @@
+
+ /* Truncate FILE to LENGTH bytes. */
+ # ifndef __USE_FILE_OFFSET64
+-extern int truncate (__const char *__file, __off_t __length)
++extern int truncate (const char *__file, __off_t __length)
+ __THROW __nonnull ((1)) __wur;
+ libc_hidden_proto(truncate)
+ # else
+ # ifdef __REDIRECT_NTH
+ extern int __REDIRECT_NTH (truncate,
+- (__const char *__file, __off64_t __length),
++ (const char *__file, __off64_t __length),
+ truncate64) __nonnull ((1)) __wur;
+ # else
+ # define truncate truncate64
+ # endif
+ # endif
+ # ifdef __USE_LARGEFILE64
+-extern int truncate64 (__const char *__file, __off64_t __length)
++extern int truncate64 (const char *__file, __off64_t __length)
+ __THROW __nonnull ((1)) __wur;
++libc_hidden_proto(truncate64)
+ # endif
+
+ #endif /* Use BSD || X/Open Unix. */
+@@ -1120,7 +1199,6 @@
+ # endif
+ # ifdef __USE_LARGEFILE64
+ extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur;
+-libc_hidden_proto(lockf64)
+ # endif
+ #endif /* Use misc and F_LOCK not already defined. */
+
+@@ -1142,7 +1220,7 @@
+ && defined __UCLIBC_HAS_REALTIME__
+ /* Synchronize at least the data part of a file with the underlying
+ media. */
+-extern int fdatasync (int __fildes) __THROW;
++extern int fdatasync (int __fildes);
+ #endif /* Use POSIX199309 */
+
+
+@@ -1151,7 +1229,7 @@
+ #ifdef __USE_XOPEN
+ # if defined __UCLIBC_HAS_CRYPT__
+ /* Encrypt at most 8 characters from KEY using salt to perturb DES. */
+-extern char *crypt (__const char *__key, __const char *__salt)
++extern char *crypt (const char *__key, const char *__salt)
+ __THROW __nonnull ((1, 2));
+
+ /* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
+@@ -1164,7 +1242,7 @@
+ FROM and copy the result to TO. The value of TO must not be in the
+ range [FROM - N + 1, FROM - 1]. If N is odd the first byte in FROM
+ is without partner. */
+-extern void swab (__const void *__restrict __from, void *__restrict __to,
++extern void swab (const void *__restrict __from, void *__restrict __to,
+ ssize_t __n) __THROW __nonnull ((1, 2));
+ #endif
+
+@@ -1178,7 +1256,7 @@
+
+
+ /* Define some macros helping to catch buffer overflows. */
+-#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
++#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
+ # include <bits/unistd.h>
+ #endif
+
+@@ -1191,6 +1269,7 @@
+ #endif
+ typedef signed smallint_type smallint;
+ typedef unsigned smallint_type smalluint;
++extern size_t __pagesize attribute_hidden;
+ #endif
+
+
+diff -Nur uClibc-0.9.33.2/include/utime.h uClibc-git/include/utime.h
+--- uClibc-0.9.33.2/include/utime.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/utime.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 5.6.6 Set File Access and Modification Times <utime.h>
+@@ -43,8 +42,8 @@
+
+ /* Set the access and modification times of FILE to those given in
+ *FILE_TIMES. If FILE_TIMES is NULL, set them to the current time. */
+-extern int utime (__const char *__file,
+- __const struct utimbuf *__file_times)
++extern int utime (const char *__file,
++ const struct utimbuf *__file_times)
+ __THROW __nonnull ((1));
+ libc_hidden_proto(utime)
+
+diff -Nur uClibc-0.9.33.2/include/utmp.h uClibc-git/include/utmp.h
+--- uClibc-0.9.33.2/include/utmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/utmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UTMP_H
+ #define _UTMP_H 1
+@@ -44,60 +43,52 @@
+
+
+ /* Write the given entry into utmp and wtmp. */
+-extern void login (__const struct utmp *__entry) __THROW;
++extern void login (const struct utmp *__entry) __THROW;
+
+ /* Write the utmp entry to say the user on UT_LINE has logged out. */
+-extern int logout (__const char *__ut_line) __THROW;
++extern int logout (const char *__ut_line) __THROW;
+
+ /* Append to wtmp an entry for the current time and the given info. */
+-extern void logwtmp (__const char *__ut_line, __const char *__ut_name,
+- __const char *__ut_host) __THROW;
++extern void logwtmp (const char *__ut_line, const char *__ut_name,
++ const char *__ut_host) __THROW;
+ #endif
+
+ /* Append entry UTMP to the wtmp-like file WTMP_FILE. */
+-extern void updwtmp (__const char *__wtmp_file, __const struct utmp *__utmp)
++extern void updwtmp (const char *__wtmp_file, const struct utmp *__utmp)
+ __THROW;
+-libc_hidden_proto(updwtmp)
+
+ /* Change name of the utmp file to be examined. */
+-extern int utmpname (__const char *__file) __THROW;
+-libc_hidden_proto(utmpname)
++extern int utmpname (const char *__file) __THROW;
+
+ /* Read next entry from a utmp-like file. */
+ extern struct utmp *getutent (void) __THROW;
+-libc_hidden_proto(getutent)
+
+ /* Reset the input stream to the beginning of the file. */
+ extern void setutent (void) __THROW;
+-libc_hidden_proto(setutent)
+
+ /* Close the current open file. */
+ extern void endutent (void) __THROW;
+-libc_hidden_proto(endutent)
+
+ /* Search forward from the current point in the utmp file until the
+ next entry with a ut_type matching ID->ut_type. */
+-extern struct utmp *getutid (__const struct utmp *__id) __THROW;
+-libc_hidden_proto(getutid)
++extern struct utmp *getutid (const struct utmp *__id) __THROW;
+
+ /* Search forward from the current point in the utmp file until the
+ next entry with a ut_line matching LINE->ut_line. */
+-extern struct utmp *getutline (__const struct utmp *__line) __THROW;
+-libc_hidden_proto(getutline)
++extern struct utmp *getutline (const struct utmp *__line) __THROW;
+
+ /* Write out entry pointed to by UTMP_PTR into the utmp file. */
+-extern struct utmp *pututline (__const struct utmp *__utmp_ptr) __THROW;
+-libc_hidden_proto(pututline)
++extern struct utmp *pututline (const struct utmp *__utmp_ptr) __THROW;
+
+
+ #if 0 /* def __USE_MISC */
+ /* Reentrant versions of the file for handling utmp files. */
+ extern int getutent_r (struct utmp *__buffer, struct utmp **__result) __THROW;
+
+-extern int getutid_r (__const struct utmp *__id, struct utmp *__buffer,
++extern int getutid_r (const struct utmp *__id, struct utmp *__buffer,
+ struct utmp **__result) __THROW;
+
+-extern int getutline_r (__const struct utmp *__line,
++extern int getutline_r (const struct utmp *__line,
+ struct utmp *__buffer, struct utmp **__result) __THROW;
+
+ #endif /* Use misc. */
+diff -Nur uClibc-0.9.33.2/include/utmpx.h uClibc-git/include/utmpx.h
+--- uClibc-0.9.33.2/include/utmpx.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/utmpx.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UTMPX_H
+ #define _UTMPX_H 1
+@@ -69,19 +68,19 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct utmpx *getutxid (__const struct utmpx *__id);
++extern struct utmpx *getutxid (const struct utmpx *__id);
+
+ /* Get the user accounting database entry corresponding to LINE.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct utmpx *getutxline (__const struct utmpx *__line);
++extern struct utmpx *getutxline (const struct utmpx *__line);
+
+ /* Write the entry UTMPX into the user accounting database.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern struct utmpx *pututxline (__const struct utmpx *__utmpx);
++extern struct utmpx *pututxline (const struct utmpx *__utmpx);
+
+
+ #ifdef __USE_GNU
+@@ -91,7 +90,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int utmpxname (__const char *__file);
++extern int utmpxname (const char *__file);
+
+ /* Append entry UTMP to the wtmpx-like file WTMPX_FILE.
+
+@@ -99,8 +98,8 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern void updwtmpx (__const char *__wtmpx_file,
+- __const struct utmpx *__utmpx);
++extern void updwtmpx (const char *__wtmpx_file,
++ const struct utmpx *__utmpx);
+
+
+ /* Copy the information in UTMPX to UTMP.
+@@ -109,7 +108,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern void getutmp (__const struct utmpx *__utmpx,
++extern void getutmp (const struct utmpx *__utmpx,
+ struct utmp *__utmp);
+
+ /* Copy the information in UTMP to UTMPX.
+@@ -118,7 +117,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern void getutmpx (__const struct utmp *__utmp,
++extern void getutmpx (const struct utmp *__utmp,
+ struct utmpx *__utmpx);
+ #endif
+
+diff -Nur uClibc-0.9.33.2/include/values.h uClibc-git/include/values.h
+--- uClibc-0.9.33.2/include/values.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/values.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This interface is obsolete. New programs should use
+ <limits.h> and/or <float.h> instead of <values.h>. */
+diff -Nur uClibc-0.9.33.2/include/wchar.h uClibc-git/include/wchar.h
+--- uClibc-0.9.33.2/include/wchar.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/wchar.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.24
+@@ -133,46 +132,46 @@
+ /* This incomplete type is defined in <time.h> but needed here because
+ of `wcsftime'. */
+ struct tm;
++__END_NAMESPACE_STD
+ /* XXX We have to clean this up at some point. Since tm is in the std
+ namespace but wcsftime is in __c99 the type wouldn't be found
+ without inserting it in the global namespace. */
+ __USING_NAMESPACE_STD(tm)
+-__END_NAMESPACE_STD
+
+
+ __BEGIN_NAMESPACE_C99
+ /* Copy SRC to DEST. */
+ extern wchar_t *wcscpy (wchar_t *__restrict __dest,
+- __const wchar_t *__restrict __src) __THROW;
++ const wchar_t *__restrict __src) __THROW;
+ /* Copy no more than N wide-characters of SRC to DEST. */
+ extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
+- __const wchar_t *__restrict __src, size_t __n)
++ const wchar_t *__restrict __src, size_t __n)
+ __THROW;
+
+ /* Append SRC onto DEST. */
+ extern wchar_t *wcscat (wchar_t *__restrict __dest,
+- __const wchar_t *__restrict __src) __THROW;
++ const wchar_t *__restrict __src) __THROW;
+ libc_hidden_proto(wcscat)
+ /* Append no more than N wide-characters of SRC onto DEST. */
+ extern wchar_t *wcsncat (wchar_t *__restrict __dest,
+- __const wchar_t *__restrict __src, size_t __n)
++ const wchar_t *__restrict __src, size_t __n)
+ __THROW;
+
+ /* Compare S1 and S2. */
+-extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
++extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
+ __THROW __attribute_pure__;
+ libc_hidden_proto(wcscmp)
+ /* Compare N wide-characters of S1 and S2. */
+-extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
++extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+ __THROW __attribute_pure__;
+ __END_NAMESPACE_C99
+
+ #ifdef __USE_GNU
+ /* Compare S1 and S2, ignoring case. */
+-extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
++extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) __THROW;
+
+ /* Compare no more than N chars of S1 and S2, ignoring case. */
+-extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
++extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
+ size_t __n) __THROW;
+
+ #ifdef __UCLIBC_HAS_XLOCALE__
+@@ -180,11 +179,11 @@
+ the provided locale and not the global locale. */
+ # include <xlocale.h>
+
+-extern int wcscasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
++extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+ __locale_t __loc) __THROW;
+ libc_hidden_proto(wcscasecmp_l)
+
+-extern int wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
++extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+ size_t __n, __locale_t __loc) __THROW;
+ libc_hidden_proto(wcsncasecmp_l)
+ #endif /* __UCLIBC_HAS_XLOCALE__ */
+@@ -193,13 +192,13 @@
+ __BEGIN_NAMESPACE_C99
+ /* Compare S1 and S2, both interpreted as appropriate to the
+ LC_COLLATE category of the current locale. */
+-extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
++extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW;
+ libc_hidden_proto(wcscoll)
+ /* Transform S2 into array pointed to by S1 such that if wcscmp is
+ applied to two transformed strings the result is the as applying
+ `wcscoll' to the original strings. */
+ extern size_t wcsxfrm (wchar_t *__restrict __s1,
+- __const wchar_t *__restrict __s2, size_t __n) __THROW;
++ const wchar_t *__restrict __s2, size_t __n) __THROW;
+ __END_NAMESPACE_C99
+
+ #ifdef __USE_GNU
+@@ -209,76 +208,79 @@
+
+ /* Compare S1 and S2, both interpreted as appropriate to the
+ LC_COLLATE category of the given locale. */
+-extern int wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
++extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
+ __locale_t __loc) __THROW;
+ libc_hidden_proto(wcscoll_l)
+
+ /* Transform S2 into array pointed to by S1 such that if wcscmp is
+ applied to two transformed strings the result is the as applying
+ `wcscoll' to the original strings. */
+-extern size_t wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
++extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
+ size_t __n, __locale_t __loc) __THROW;
+ libc_hidden_proto(wcsxfrm_l)
+
+ #endif /* __UCLIBC_HAS_XLOCALE__ */
+
+ /* Duplicate S, returning an identical malloc'd string. */
+-extern wchar_t *wcsdup (__const wchar_t *__s) __THROW __attribute_malloc__;
++extern wchar_t *wcsdup (const wchar_t *__s) __THROW __attribute_malloc__;
+ #endif
+
+ __BEGIN_NAMESPACE_C99
+ /* Find the first occurrence of WC in WCS. */
+-extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
++extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
+ __THROW __attribute_pure__;
+ /* Find the last occurrence of WC in WCS. */
+-extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
++extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
+ __THROW __attribute_pure__;
+ __END_NAMESPACE_C99
+
+ #ifdef __USE_GNU
+ /* This function is similar to `wcschr'. But it returns a pointer to
+ the closing NUL wide character in case C is not found in S. */
+-extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
++extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
+ __THROW __attribute_pure__;
+ #endif
+
+ __BEGIN_NAMESPACE_C99
+ /* Return the length of the initial segmet of WCS which
+ consists entirely of wide characters not in REJECT. */
+-extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
++extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
+ __THROW __attribute_pure__;
+ /* Return the length of the initial segmet of WCS which
+ consists entirely of wide characters in ACCEPT. */
+-extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
++extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
+ __THROW __attribute_pure__;
+ libc_hidden_proto(wcsspn)
+ /* Find the first occurrence in WCS of any character in ACCEPT. */
+-extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
++extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept)
+ __THROW __attribute_pure__;
+ libc_hidden_proto(wcspbrk)
+ /* Find the first occurrence of NEEDLE in HAYSTACK. */
+-extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
++/* SuSv uses restrict keyword, glibc does not */
++extern wchar_t *wcsstr (const wchar_t *__restrict __haystack, const wchar_t *__restrict __needle)
+ __THROW __attribute_pure__;
+
+ /* Divide WCS into tokens separated by characters in DELIM. */
+ extern wchar_t *wcstok (wchar_t *__restrict __s,
+- __const wchar_t *__restrict __delim,
++ const wchar_t *__restrict __delim,
+ wchar_t **__restrict __ptr) __THROW;
+
+ /* Return the number of wide characters in S. */
+-extern size_t wcslen (__const wchar_t *__s) __THROW __attribute_pure__;
++extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__;
+ libc_hidden_proto(wcslen)
+ __END_NAMESPACE_C99
+
+ #if defined __USE_XOPEN && defined __UCLIBC_SUSV3_LEGACY__
+ /* Another name for `wcsstr' from XPG4. */
+-extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
++/* SuSv3 did not use restrict keyword, probably because it was marked LEGACY
++ we do to be in sync with wcsstr */
++extern wchar_t *wcswcs (const wchar_t *__restrict __haystack, const wchar_t *__restrict __needle)
+ __THROW __attribute_pure__;
+ #endif
+
+ #ifdef __USE_GNU
+ /* Return the number of wide characters in S, but at most MAXLEN. */
+-extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
++extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
+ __THROW __attribute_pure__;
+ libc_hidden_proto(wcsnlen)
+ #endif
+@@ -286,23 +288,24 @@
+
+ __BEGIN_NAMESPACE_C99
+ /* Search N wide characters of S for C. */
+-extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
++extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
+ __THROW __attribute_pure__;
+ libc_hidden_proto(wmemchr)
+
+ /* Compare N wide characters of S1 and S2. */
+-extern int wmemcmp (__const wchar_t *__restrict __s1,
+- __const wchar_t *__restrict __s2, size_t __n)
++/* SuSv4 does not use restrict keyword for S1 and S2, glibc does */
++extern int wmemcmp (const wchar_t *__s1,
++ const wchar_t *__s2, size_t __n)
+ __THROW __attribute_pure__;
+
+ /* Copy N wide characters of SRC to DEST. */
+ extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
+- __const wchar_t *__restrict __s2, size_t __n) __THROW;
++ const wchar_t *__restrict __s2, size_t __n) __THROW;
+ libc_hidden_proto(wmemcpy)
+
+ /* Copy N wide characters of SRC to DEST, guaranteeing
+ correct behavior for overlapping strings. */
+-extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
++extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
+ __THROW;
+
+ /* Set N wide characters of S to C. */
+@@ -313,7 +316,7 @@
+ /* Copy N wide characters of SRC to DEST and return pointer to following
+ wide character. */
+ extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
+- __const wchar_t *__restrict __s2, size_t __n)
++ const wchar_t *__restrict __s2, size_t __n)
+ __THROW;
+ libc_hidden_proto(wmempcpy)
+ #endif
+@@ -331,13 +334,13 @@
+
+ /* Determine whether PS points to an object representing the initial
+ state. */
+-extern int mbsinit (__const mbstate_t *__ps) __THROW __attribute_pure__;
++extern int mbsinit (const mbstate_t *__ps) __THROW __attribute_pure__;
+ libc_hidden_proto(mbsinit)
+
+ /* Write wide character representation of multibyte character pointed
+ to by S to PWC. */
+ extern size_t mbrtowc (wchar_t *__restrict __pwc,
+- __const char *__restrict __s, size_t __n,
++ const char *__restrict __s, size_t __n,
+ mbstate_t *__p) __THROW;
+ libc_hidden_proto(mbrtowc)
+
+@@ -348,24 +351,24 @@
+
+ /* Return number of bytes in multibyte character pointed to by S. */
+ #if 0 /* uClibc: disabled */
+-extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
++extern size_t __mbrlen (const char *__restrict __s, size_t __n,
+ mbstate_t *__restrict __ps) __THROW;
+ #endif
+-extern size_t mbrlen (__const char *__restrict __s, size_t __n,
++extern size_t mbrlen (const char *__restrict __s, size_t __n,
+ mbstate_t *__restrict __ps) __THROW;
+ libc_hidden_proto(mbrlen)
+
+ /* Write wide character representation of multibyte character string
+ SRC to DST. */
+ extern size_t mbsrtowcs (wchar_t *__restrict __dst,
+- __const char **__restrict __src, size_t __len,
++ const char **__restrict __src, size_t __len,
+ mbstate_t *__restrict __ps) __THROW;
+ libc_hidden_proto(mbsrtowcs)
+
+ /* Write multibyte character representation of wide character string
+ SRC to DST. */
+ extern size_t wcsrtombs (char *__restrict __dst,
+- __const wchar_t **__restrict __src, size_t __len,
++ const wchar_t **__restrict __src, size_t __len,
+ mbstate_t *__restrict __ps) __THROW;
+ libc_hidden_proto(wcsrtombs)
+ __END_NAMESPACE_C99
+@@ -375,14 +378,14 @@
+ /* Write wide character representation of at most NMC bytes of the
+ multibyte character string SRC to DST. */
+ extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
+- __const char **__restrict __src, size_t __nmc,
++ const char **__restrict __src, size_t __nmc,
+ size_t __len, mbstate_t *__restrict __ps) __THROW;
+ libc_hidden_proto(mbsnrtowcs)
+
+ /* Write multibyte character representation of at most NWC characters
+ from the wide character string SRC to DST. */
+ extern size_t wcsnrtombs (char *__restrict __dst,
+- __const wchar_t **__restrict __src,
++ const wchar_t **__restrict __src,
+ size_t __nwc, size_t __len,
+ mbstate_t *__restrict __ps) __THROW;
+ libc_hidden_proto(wcsnrtombs)
+@@ -396,7 +399,7 @@
+
+ /* Determine number of column positions required for first N wide
+ characters (or fewer if S ends before this) in S. */
+-extern int wcswidth (__const wchar_t *__s, size_t __n) __THROW;
++extern int wcswidth (const wchar_t *__s, size_t __n) __THROW;
+ libc_hidden_proto(wcswidth)
+ #endif /* Use X/Open. */
+
+@@ -405,14 +408,14 @@
+ #ifdef __UCLIBC_HAS_FLOATS__
+ /* Convert initial portion of the wide string NPTR to `double'
+ representation. */
+-extern double wcstod (__const wchar_t *__restrict __nptr,
++extern double wcstod (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr) __THROW;
+
+ #ifdef __USE_ISOC99
+ /* Likewise for `float' and `long double' sizes of floating-point numbers. */
+-extern float wcstof (__const wchar_t *__restrict __nptr,
++extern float wcstof (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr) __THROW;
+-extern long double wcstold (__const wchar_t *__restrict __nptr,
++extern long double wcstold (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr) __THROW;
+ #endif /* C99 */
+ #endif /* __UCLIBC_HAS_FLOATS__ */
+@@ -420,44 +423,44 @@
+
+ /* Convert initial portion of wide string NPTR to `long int'
+ representation. */
+-extern long int wcstol (__const wchar_t *__restrict __nptr,
++extern long int wcstol (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base) __THROW;
+
+ /* Convert initial portion of wide string NPTR to `unsigned long int'
+ representation. */
+-extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
++extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base)
+ __THROW;
+
+ #if defined __USE_ISOC99 || (defined __GNUC__ && defined __USE_GNU)
+-/* Convert initial portion of wide string NPTR to `long int'
++/* Convert initial portion of wide string NPTR to `long long int'
+ representation. */
+ __extension__
+-extern long long int wcstoll (__const wchar_t *__restrict __nptr,
++extern long long int wcstoll (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base)
+ __THROW;
+
+ /* Convert initial portion of wide string NPTR to `unsigned long long int'
+ representation. */
+ __extension__
+-extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
++extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base) __THROW;
+ #endif /* ISO C99 or GCC and GNU. */
+ __END_NAMESPACE_C99
+
+ #if defined __GNUC__ && defined __USE_GNU
+-/* Convert initial portion of wide string NPTR to `long int'
++/* Convert initial portion of wide string NPTR to `long long int'
+ representation. */
+ __extension__
+-extern long long int wcstoq (__const wchar_t *__restrict __nptr,
++extern long long int wcstoq (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base)
+ __THROW;
+
+ /* Convert initial portion of wide string NPTR to `unsigned long long int'
+ representation. */
+ __extension__
+-extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
++extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base) __THROW;
+ #endif /* GCC and use GNU. */
+@@ -481,35 +484,35 @@
+
+ /* Special versions of the functions above which take the locale to
+ use as an additional parameter. */
+-extern long int wcstol_l (__const wchar_t *__restrict __nptr,
++extern long int wcstol_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, int __base,
+ __locale_t __loc) __THROW;
+
+-extern unsigned long int wcstoul_l (__const wchar_t *__restrict __nptr,
++extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, __locale_t __loc) __THROW;
+
+ __extension__
+-extern long long int wcstoll_l (__const wchar_t *__restrict __nptr,
++extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, __locale_t __loc) __THROW;
+
+ __extension__
+-extern unsigned long long int wcstoull_l (__const wchar_t *__restrict __nptr,
++extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW;
+
+ #ifdef __UCLIBC_HAS_FLOATS__
+-extern double wcstod_l (__const wchar_t *__restrict __nptr,
++extern double wcstod_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, __locale_t __loc)
+ __THROW;
+
+-extern float wcstof_l (__const wchar_t *__restrict __nptr,
++extern float wcstof_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr, __locale_t __loc)
+ __THROW;
+
+-extern long double wcstold_l (__const wchar_t *__restrict __nptr,
++extern long double wcstold_l (const wchar_t *__restrict __nptr,
+ wchar_t **__restrict __endptr,
+ __locale_t __loc) __THROW;
+ #endif /* __UCLIBC_HAS_FLOATS__ */
+@@ -520,11 +523,11 @@
+ #ifdef __USE_GNU
+ /* Copy SRC to DEST, returning the address of the terminating L'\0' in
+ DEST. */
+-extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) __THROW;
++extern wchar_t *wcpcpy (wchar_t *__dest, const wchar_t *__src) __THROW;
+
+ /* Copy no more than N characters of SRC to DEST, returning the address of
+ the last character written into DEST. */
+-extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
++extern wchar_t *wcpncpy (wchar_t *__dest, const wchar_t *__src, size_t __n)
+ __THROW;
+ #endif /* use GNU */
+
+@@ -542,17 +545,17 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern int fwprintf (__FILE *__restrict __stream,
+- __const wchar_t *__restrict __format, ...)
++ const wchar_t *__restrict __format, ...)
+ /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
+ /* Write formatted output to stdout.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int wprintf (__const wchar_t *__restrict __format, ...)
++extern int wprintf (const wchar_t *__restrict __format, ...)
+ /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
+ /* Write formatted output of at most N characters to S. */
+ extern int swprintf (wchar_t *__restrict __s, size_t __n,
+- __const wchar_t *__restrict __format, ...)
++ const wchar_t *__restrict __format, ...)
+ __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
+
+ /* Write formatted output to S from argument list ARG.
+@@ -560,7 +563,7 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern int vfwprintf (__FILE *__restrict __s,
+- __const wchar_t *__restrict __format,
++ const wchar_t *__restrict __format,
+ __gnuc_va_list __arg)
+ /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
+ libc_hidden_proto(vfwprintf)
+@@ -568,13 +571,13 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int vwprintf (__const wchar_t *__restrict __format,
++extern int vwprintf (const wchar_t *__restrict __format,
+ __gnuc_va_list __arg)
+ /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
+ /* Write formatted output of at most N character to S from argument
+ list ARG. */
+ extern int vswprintf (wchar_t *__restrict __s, size_t __n,
+- __const wchar_t *__restrict __format,
++ const wchar_t *__restrict __format,
+ __gnuc_va_list __arg)
+ __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
+ libc_hidden_proto(vswprintf)
+@@ -585,17 +588,17 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern int fwscanf (__FILE *__restrict __stream,
+- __const wchar_t *__restrict __format, ...)
++ const wchar_t *__restrict __format, ...)
+ /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+ /* Read formatted input from stdin.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int wscanf (__const wchar_t *__restrict __format, ...)
++extern int wscanf (const wchar_t *__restrict __format, ...)
+ /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
+ /* Read formatted input from S. */
+-extern int swscanf (__const wchar_t *__restrict __s,
+- __const wchar_t *__restrict __format, ...)
++extern int swscanf (const wchar_t *__restrict __s,
++ const wchar_t *__restrict __format, ...)
+ __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+
+ __END_NAMESPACE_C99
+@@ -609,7 +612,7 @@
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+ extern int vfwscanf (__FILE *__restrict __s,
+- __const wchar_t *__restrict __format,
++ const wchar_t *__restrict __format,
+ __gnuc_va_list __arg)
+ /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+ libc_hidden_proto(vfwscanf)
+@@ -617,12 +620,12 @@
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+-extern int vwscanf (__const wchar_t *__restrict __format,
++extern int vwscanf (const wchar_t *__restrict __format,
+ __gnuc_va_list __arg)
+ /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
+ /* Read formatted input from S into argument list ARG. */
+-extern int vswscanf (__const wchar_t *__restrict __s,
+- __const wchar_t *__restrict __format,
++extern int vswscanf (const wchar_t *__restrict __s,
++ const wchar_t *__restrict __format,
+ __gnuc_va_list __arg)
+ __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+ libc_hidden_proto(vswscanf)
+@@ -652,6 +655,7 @@
+ These functions are possible cancellation points and therefore not
+ marked with __THROW. */
+ extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
++libc_hidden_proto(fputwc)
+ extern wint_t putwc (wchar_t __wc, __FILE *__stream);
+
+ /* Write a character to stdout.
+@@ -673,7 +677,7 @@
+
+ This function is a possible cancellation points and therefore not
+ marked with __THROW. */
+-extern int fputws (__const wchar_t *__restrict __ws,
++extern int fputws (const wchar_t *__restrict __ws,
+ __FILE *__restrict __stream);
+ libc_hidden_proto(fputws)
+
+@@ -743,7 +747,7 @@
+ cancellation point. But due to similarity with an POSIX interface
+ or due to the implementation it is a cancellation point and
+ therefore not marked with __THROW. */
+-extern int fputws_unlocked (__const wchar_t *__restrict __ws,
++extern int fputws_unlocked (const wchar_t *__restrict __ws,
+ __FILE *__restrict __stream);
+ libc_hidden_proto(fputws_unlocked)
+ #endif
+@@ -754,8 +758,8 @@
+ Write no more than MAXSIZE wide characters and return the number
+ of wide characters written, or 0 if it would exceed MAXSIZE. */
+ extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
+- __const wchar_t *__restrict __format,
+- __const struct tm *__restrict __tp) __THROW;
++ const wchar_t *__restrict __format,
++ const struct tm *__restrict __tp) __THROW;
+ __END_NAMESPACE_C99
+
+ # if defined __USE_GNU && defined __UCLIBC_HAS_XLOCALE__
+@@ -764,8 +768,8 @@
+ /* Similar to `wcsftime' but takes the information from
+ the provided locale and not the global locale. */
+ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
+- __const wchar_t *__restrict __format,
+- __const struct tm *__restrict __tp,
++ const wchar_t *__restrict __format,
++ const struct tm *__restrict __tp,
+ __locale_t __loc) __THROW;
+ libc_hidden_proto(wcsftime_l)
+ # endif
+diff -Nur uClibc-0.9.33.2/include/wctype.h uClibc-git/include/wctype.h
+--- uClibc-0.9.33.2/include/wctype.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/wctype.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 Standard: 7.25
+@@ -183,7 +182,7 @@
+
+ /* Construct value that describes a class of wide characters identified
+ by the string argument PROPERTY. */
+-extern wctype_t wctype (__const char *__property) __THROW;
++extern wctype_t wctype (const char *__property) __THROW;
+ libc_hidden_proto(wctype)
+
+ /* Determine whether the wide-character WC has the property described by
+@@ -200,7 +199,7 @@
+ __BEGIN_NAMESPACE_C99
+ /* Scalar type that can hold values which represent locale-specific
+ character mappings. */
+-/* uClibc note: glibc uses - typedef __const __int32_t *wctrans_t; */
++/* uClibc note: glibc uses - typedef const __int32_t *wctrans_t; */
+ typedef unsigned int wctrans_t;
+ __END_NAMESPACE_C99
+ #ifdef __USE_GNU
+@@ -235,7 +234,7 @@
+ __BEGIN_NAMESPACE_C99
+ /* Construct value that describes a mapping between wide characters
+ identified by the string argument PROPERTY. */
+-extern wctrans_t wctrans (__const char *__property) __THROW;
++extern wctrans_t wctrans (const char *__property) __THROW;
+ libc_hidden_proto(wctrans)
+
+ /* Map the wide character WC using the mapping described by DESC. */
+@@ -304,7 +303,7 @@
+
+ /* Construct value that describes a class of wide characters identified
+ by the string argument PROPERTY. */
+-extern wctype_t wctype_l (__const char *__property, __locale_t __locale)
++extern wctype_t wctype_l (const char *__property, __locale_t __locale)
+ __THROW;
+
+ /* Determine whether the wide-character WC has the property described by
+@@ -328,7 +327,7 @@
+
+ /* Construct value that describes a mapping between wide characters
+ identified by the string argument PROPERTY. */
+-extern wctrans_t wctrans_l (__const char *__property, __locale_t __locale)
++extern wctrans_t wctrans_l (const char *__property, __locale_t __locale)
+ __THROW;
+
+ /* Map the wide character WC using the mapping described by DESC. */
+diff -Nur uClibc-0.9.33.2/include/wordexp.h uClibc-git/include/wordexp.h
+--- uClibc-0.9.33.2/include/wordexp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/wordexp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _WORDEXP_H
+ #define _WORDEXP_H 1
+@@ -60,7 +59,7 @@
+ };
+
+ /* Do word expansion of WORDS into PWORDEXP. */
+-extern int wordexp (__const char *__restrict __words,
++extern int wordexp (const char *__restrict __words,
+ wordexp_t *__restrict __pwordexp, int __flags);
+
+ /* Free the storage allocated by a `wordexp' call. */
+diff -Nur uClibc-0.9.33.2/include/xlocale.h uClibc-git/include/xlocale.h
+--- uClibc-0.9.33.2/include/xlocale.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/include/xlocale.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _XLOCALE_H
+ #define _XLOCALE_H 1
+@@ -39,11 +38,11 @@
+ /* Note: LC_ALL is not a valid index into this array. */
+ const char *__names[13];
+ } *__locale_t;
++#else
++# include <bits/uClibc_locale.h>
++#endif
+
+ /* POSIX 2008 makes locale_t official. */
+ typedef __locale_t locale_t;
+-#else
+-# include <locale.h>
+-#endif
+
+ #endif /* xlocale.h */
+diff -Nur uClibc-0.9.33.2/ldso/include/dl-defs.h uClibc-git/ldso/include/dl-defs.h
+--- uClibc-0.9.33.2/ldso/include/dl-defs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/dl-defs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+-#ifndef _LD_DEFS_H
+-#define _LD_DEFS_H
++#ifndef _DL_DEFS_H
++#define _DL_DEFS_H
+
+ #define FLAG_ANY -1
+ #define FLAG_TYPE_MASK 0x00ff
+@@ -72,6 +72,11 @@
+
+ #endif
+
++#ifdef _LIBC
++/* arch specific defines */
++#include <dl-sysdep.h>
++#endif
++
+ /* Provide a means for a port to pass additional arguments to the _dl_start
+ function. */
+ #ifndef DL_START
+@@ -281,4 +286,4 @@
+ # define DL_GET_RUN_ADDR(loadaddr, mapaddr) (mapaddr)
+ #endif
+
+-#endif /* _LD_DEFS_H */
++#endif /* _DL_DEFS_H */
+diff -Nur uClibc-0.9.33.2/ldso/include/dl-elf.h uClibc-git/ldso/include/dl-elf.h
+--- uClibc-0.9.33.2/ldso/include/dl-elf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/dl-elf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -5,19 +5,22 @@
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+-#ifndef LINUXELF_H
+-#define LINUXELF_H
++#ifndef _DL_ELF_H
++#define _DL_ELF_H
+
++#include <features.h>
++#include <bits/wordsize.h>
+ #include <dl-string.h> /* before elf.h to get ELF_USES_RELOCA right */
+ #include <elf.h>
+ #include <link.h>
++#include <dl-defs.h>
++#include <dlfcn.h>
+
+-/* Forward declarations for stuff defined in ld_hash.h */
++/* Forward declarations for stuff defined in dl-hash.h */
+ struct dyn_elf;
+ struct elf_resolve;
+ struct r_scope_elem;
+
+-#include <dl-defs.h>
+ #ifdef __LDSO_CACHE_SUPPORT__
+ extern int _dl_map_cache(void);
+ extern int _dl_unmap_cache(void);
+@@ -29,7 +32,7 @@
+ #define DL_RESOLVE_SECURE 0x0001
+ #define DL_RESOLVE_NOLOAD 0x0002
+
+-/* Function prototypes for non-static stuff in readelflib1.c */
++/* Function prototypes for non-static stuff in elfinterp.c */
+ extern void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
+ unsigned long rel_addr, unsigned long rel_size);
+ extern int _dl_parse_relocation_information(struct dyn_elf *rpnt,
+@@ -39,8 +42,6 @@
+ int trace_loaded_objects);
+ extern struct elf_resolve * _dl_load_elf_shared_library(unsigned rflags,
+ struct dyn_elf **rpnt, const char *libname);
+-extern struct elf_resolve *_dl_check_if_named_library_is_loaded(const char *full_libname,
+- int trace_loaded_objects);
+ extern int _dl_linux_resolve(void);
+ extern int _dl_fixup(struct dyn_elf *rpnt, struct r_scope_elem *scope, int flag);
+ extern void _dl_protect_relro (struct elf_resolve *l);
+@@ -222,11 +223,6 @@
+ #ifdef __DSBT__
+ /* Get the mapped address of the DSBT base. */
+ ADJUST_DYN_INFO(DT_DSBT_BASE_IDX, load_off);
+-
+- /* Initialize loadmap dsbt info. */
+- load_off.map->dsbt_table = (void *)dynamic_info[DT_DSBT_BASE_IDX];
+- load_off.map->dsbt_size = dynamic_info[DT_DSBT_SIZE_IDX];
+- load_off.map->dsbt_index = dynamic_info[DT_DSBT_INDEX_IDX];
+ #endif
+ #undef ADJUST_DYN_INFO
+ return rtld_flags;
+@@ -259,4 +255,4 @@
+ (((X) & PF_X) ? PROT_EXEC : 0))
+
+
+-#endif /* LINUXELF_H */
++#endif /* _DL_ELF_H */
+diff -Nur uClibc-0.9.33.2/ldso/include/dlfcn.h uClibc-git/ldso/include/dlfcn.h
+--- uClibc-0.9.33.2/ldso/include/dlfcn.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/dlfcn.h 2014-02-03 12:32:56.000000000 +0100
+@@ -19,9 +19,9 @@
+ `dladdr'. */
+ typedef struct
+ {
+- __const char *dli_fname; /* File name of defining object. */
++ const char *dli_fname; /* File name of defining object. */
+ void *dli_fbase; /* Load address of that object. */
+- __const char *dli_sname; /* Name of nearest symbol. */
++ const char *dli_sname; /* Name of nearest symbol. */
+ void *dli_saddr; /* Exact value of nearest symbol. */
+ } Dl_info;
+
+diff -Nur uClibc-0.9.33.2/ldso/include/dl-hash.h uClibc-git/ldso/include/dl-hash.h
+--- uClibc-0.9.33.2/ldso/include/dl-hash.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/dl-hash.h 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+-#ifndef _LD_HASH_H_
+-#define _LD_HASH_H_
++#ifndef _DL_HASH_H
++#define _DL_HASH_H
+
+ #ifndef RTLD_NEXT
+ #define RTLD_NEXT ((void*)-1)
+@@ -139,6 +139,12 @@
+ memory when the module is dlclose()d. */
+ struct funcdesc_ht *funcdesc_ht;
+ #endif
++#ifdef __DSBT__
++ /* Information for DSBT */
++ void **dsbt_table;
++ unsigned long dsbt_size;
++ unsigned long dsbt_index;
++#endif
+ };
+
+ #define RELOCS_DONE 0x000001
+@@ -160,17 +166,7 @@
+ struct elf_resolve *mytpnt, int type_class,
+ struct symbol_ref *symbol);
+
+-extern int _dl_linux_dynamic_link(void);
+-
+ extern char * _dl_library_path;
+-extern char * _dl_not_lazy;
+-
+-static __inline__ int _dl_symbol(char * name)
+-{
+- if (name[0] != '_' || name[1] != 'd' || name[2] != 'l' || name[3] != '_')
+- return 0;
+- return 1;
+-}
+
+ #define LD_ERROR_NOFILE 1
+ #define LD_ERROR_NOZERO 2
+@@ -184,4 +180,4 @@
+ #define LD_BAD_HANDLE 10
+ #define LD_NO_SYMBOL 11
+
+-#endif /* _LD_HASH_H_ */
++#endif /* _DL_HASH_H */
+diff -Nur uClibc-0.9.33.2/ldso/include/dl-string.h uClibc-git/ldso/include/dl-string.h
+--- uClibc-0.9.33.2/ldso/include/dl-string.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/dl-string.h 2014-02-03 12:32:56.000000000 +0100
+@@ -5,12 +5,16 @@
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+-#ifndef _LINUX_STRING_H_
+-#define _LINUX_STRING_H_
++#ifndef _DL_STRING_H
++#define _DL_STRING_H
+
+-#include <dl-sysdep.h> /* for do_rem */
+ #include <features.h>
+
++#define __need_NULL
++#include <stddef.h>
++
++#include <dl-defs.h> /* for do_rem by dl-sysdep.h */
++
+ /* provide some sane defaults */
+ #ifndef do_rem
+ # define do_rem(result, n, base) ((result) = (n) % (base))
+@@ -19,25 +23,7 @@
+ # define do_div_10(result, remain) ((result) /= 10)
+ #endif
+
+-static size_t _dl_strlen(const char *str);
+-static char *_dl_strcat(char *dst, const char *src);
+-static char *_dl_strcpy(char *dst, const char *src);
+-static int _dl_strcmp(const char *s1, const char *s2);
+-static int _dl_strncmp(const char *s1, const char *s2, size_t len);
+-static char *_dl_strchr(const char *str, int c);
+-static char *_dl_strrchr(const char *str, int c);
+-static char *_dl_strstr(const char *s1, const char *s2);
+-static void *_dl_memcpy(void *dst, const void *src, size_t len);
+-static int _dl_memcmp(const void *s1, const void *s2, size_t len);
+-static void *_dl_memset(void *str, int c, size_t len);
+-static char *_dl_get_last_path_component(char *path);
+-static char *_dl_simple_ltoa(char *local, unsigned long i);
+-static char *_dl_simple_ltoahex(char *local, unsigned long i);
+-
+-#ifndef NULL
+-#define NULL ((void *) 0)
+-#endif
+-
++#ifdef IS_IN_rtld
+ static __always_inline size_t _dl_strlen(const char *str)
+ {
+ register const char *ptr = (char *) str-1;
+@@ -84,22 +70,6 @@
+ return c1 - c2;
+ }
+
+-static __always_inline int _dl_strncmp(const char *s1, const char *s2, size_t len)
+-{
+- register unsigned char c1 = '\0';
+- register unsigned char c2 = '\0';
+-
+- s1--;s2--;
+- while (len > 0) {
+- c1 = (unsigned char) *++s1;
+- c2 = (unsigned char) *++s2;
+- if (c1 == '\0' || c1 != c2)
+- return c1 - c2;
+- len--;
+- }
+- return c1 - c2;
+-}
+-
+ static __always_inline char * _dl_strchr(const char *str, int c)
+ {
+ register char ch;
+@@ -172,7 +142,7 @@
+ return 0;
+ }
+
+-#if defined(powerpc)
++#if defined(__powerpc__)
+ /* Will generate smaller and faster code due to loop unrolling.*/
+ static __always_inline void * _dl_memset(void *to, int c, size_t n)
+ {
+@@ -228,7 +198,19 @@
+ ;/* empty */
+ return ptr == path ? ptr : ptr+1;
+ }
++#else /* IS_IN_rtld */
++# include <string.h>
++# define _dl_strlen strlen
++# define _dl_strcat strcat
++# define _dl_strcpy strcpy
++# define _dl_strcmp strcmp
++# define _dl_strrchr strrchr
++# define _dl_memcpy memcpy
++# define _dl_memcmp memcmp
++# define _dl_memset memset
++#endif /* IS_IN_rtld */
+
++#if defined IS_IN_rtld || defined __SUPPORT_LD_DEBUG__
+ /* Early on, we can't call printf, so use this to print out
+ * numbers using the SEND_STDERR() macro. Avoid using mod
+ * or using long division */
+@@ -246,7 +228,9 @@
+ } while (i > 0);
+ return p;
+ }
++#endif
+
++#ifdef IS_IN_rtld
+ static __always_inline char * _dl_simple_ltoahex(char *local, unsigned long i)
+ {
+ /* 16 digits plus a leading "0x" plus a null terminator,
+@@ -266,9 +250,6 @@
+ return p;
+ }
+
+-
+-
+-
+ /* The following macros may be used in dl-startup.c to debug
+ * ldso before ldso has fixed itself up to make function calls */
+
+@@ -285,7 +266,7 @@
+ /* On some arches constant strings are referenced through the GOT.
+ * This requires that load_addr must already be defined... */
+ #if defined(mc68000) || defined(__arm__) || defined(__thumb__) || \
+- defined(__mips__) || defined(__sh__) || defined(__powerpc__) || \
++ defined(__sh__) || defined(__powerpc__) || \
+ defined(__avr32__) || defined(__xtensa__) || defined(__sparc__) || defined(__microblaze__)
+ # define CONSTANT_STRING_GOT_FIXUP(X) \
+ if ((X) < (const char *) load_addr) (X) += load_addr
+@@ -362,4 +343,6 @@
+ # define SEND_ADDRESS_STDERR_DEBUG(X, add_a_newline)
+ #endif
+
+-#endif
++#endif /* IS_IN_rtld */
++
++#endif /* _DL_STRING_H */
+diff -Nur uClibc-0.9.33.2/ldso/include/dl-syscall.h uClibc-git/ldso/include/dl-syscall.h
+--- uClibc-0.9.33.2/ldso/include/dl-syscall.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/dl-syscall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+-#ifndef _LD_SYSCALL_H_
+-#define _LD_SYSCALL_H_
++#ifndef _DL_SYSCALL_H
++#define _DL_SYSCALL_H
+
+ /* We can't use the real errno in ldso, since it has not yet
+ * been dynamicly linked in yet. */
+@@ -20,6 +20,8 @@
+ /* For MAP_ANONYMOUS -- differs between platforms */
+ #define _SYS_MMAN_H 1
+ #include <bits/mman.h>
++
++#ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ /* Pull in whatever this particular arch's kernel thinks the kernel version of
+ * struct stat should look like. It turns out that each arch has a different
+ * opinion on the subject, and different kernel revs use different names... */
+@@ -35,6 +37,13 @@
+ #define S_ISUID 04000 /* Set user ID on execution. */
+ #define S_ISGID 02000 /* Set group ID on execution. */
+
++#else
++/* 1. common-generic ABI doesn't need kernel_stat translation
++ * 3. S_IS?ID already provided by stat.h
++ */
++#include <sys/stat.h>
++#endif
++
+
+ /* Here are the definitions for some syscalls that are used
+ by the dynamic linker. The idea is that we want to be able
+@@ -48,9 +57,18 @@
+ #define __NR__dl_close __NR_close
+ static __always_inline _syscall1(int, _dl_close, int, fd)
+
+-#define __NR__dl_open __NR_open
++#if defined __NR_openat && !defined __NR_open
++static __always_inline int _dl_open(const char *fn,
++ int flags, __kernel_mode_t mode)
++{
++ return INLINE_SYSCALL(openat, 4, AT_FDCWD, fn, flags, mode);
++}
++
++#elif defined __NR_open
++# define __NR__dl_open __NR_open
+ static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags,
+ __kernel_mode_t, mode)
++#endif
+
+ #define __NR__dl_write __NR_write
+ static __always_inline _syscall3(unsigned long, _dl_write, int, fd,
+@@ -64,11 +82,27 @@
+ static __always_inline _syscall3(int, _dl_mprotect, const void *, addr,
+ unsigned long, len, int, prot)
+
+-#define __NR__dl_stat __NR_stat
++#if defined __NR_fstatat64 && !defined __NR_stat
++# define __NR__dl_fstatat64 __NR_fstatat64
++static __always_inline _syscall4(int, _dl_fstatat64, int, fd, const char *,
++ fn, struct stat *, stat, int, flags)
++
++static __always_inline int _dl_stat(const char *file_name,
++ struct stat *buf)
++{
++ return _dl_fstatat64(AT_FDCWD, file_name, buf, 0);
++}
++#elif defined __NR_stat
++# define __NR__dl_stat __NR_stat
+ static __always_inline _syscall2(int, _dl_stat, const char *, file_name,
+ struct stat *, buf)
++#endif
+
+-#define __NR__dl_fstat __NR_fstat
++#if defined __NR_fstat64 && !defined __NR_fstat
++# define __NR__dl_fstat __NR_fstat64
++#elif defined __NR_fstat
++# define __NR__dl_fstat __NR_fstat
++#endif
+ static __always_inline _syscall2(int, _dl_fstat, int, fd, struct stat *, buf)
+
+ #define __NR__dl_munmap __NR_munmap
+@@ -104,9 +138,15 @@
+ #define __NR__dl_getpid __NR_getpid
+ static __always_inline _syscall0(gid_t, _dl_getpid)
+
+-#define __NR__dl_readlink __NR_readlink
++#if defined __NR_readlinkat && !defined __NR_readlink
++# define __NR__dl_readlink __NR_readlinkat
++static __always_inline _syscall4(int, _dl_readlink, int, id, const char *, path,
++ char *, buf, size_t, bufsiz)
++#elif defined __NR_readlink
++# define __NR__dl_readlink __NR_readlink
+ static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf,
+ size_t, bufsiz)
++#endif
+
+ #ifdef __NR_pread64
+ #define __NR___syscall_pread __NR_pread64
+@@ -187,4 +227,4 @@
+ #endif
+ }
+
+-#endif /* _LD_SYSCALL_H_ */
++#endif /* _DL_SYSCALL_H */
+diff -Nur uClibc-0.9.33.2/ldso/include/ldsodefs.h uClibc-git/ldso/include/ldsodefs.h
+--- uClibc-0.9.33.2/ldso/include/ldsodefs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/ldsodefs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -66,7 +66,7 @@
+ /* Taken from glibc/elf/dl-reloc.c */
+ #define CHECK_STATIC_TLS(sym_map) \
+ do { \
+- if (__builtin_expect ((sym_map)->l_tls_offset == NO_TLS_OFFSET, 0)) \
++ if (unlikely((sym_map)->l_tls_offset == NO_TLS_OFFSET)) \
+ _dl_allocate_static_tls (sym_map); \
+ } while (0)
+
+diff -Nur uClibc-0.9.33.2/ldso/include/ldso.h uClibc-git/ldso/include/ldso.h
+--- uClibc-0.9.33.2/ldso/include/ldso.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/include/ldso.h 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+-#ifndef _LDSO_H_
+-#define _LDSO_H_
++#ifndef _LDSO_H
++#define _LDSO_H
+
+ #include <features.h>
+
+@@ -30,6 +30,10 @@
+ #include <stddef.h> /* for ptrdiff_t */
+ #include <stdbool.h>
+ #define _FCNTL_H
++/* We need this if arch has only new syscalls defined */
++#ifndef AT_FDCWD
++#define AT_FDCWD -100
++#endif /* AT_FDCWD */
+ #include <bits/fcntl.h>
+ #include <bits/wordsize.h>
+ /* Pull in the arch specific type information */
+@@ -42,7 +46,6 @@
+ #ifndef __ARCH_HAS_NO_SHARED__
+ #include <dl-syscall.h>
+ #include <dl-string.h>
+-#include <dlfcn.h>
+ /* Now the ldso specific headers */
+ #include <dl-elf.h>
+ #ifdef __UCLIBC_HAS_TLS__
+@@ -84,16 +87,15 @@
+ #else
+ #define _dl_trace_prelink 0
+ #endif
++#ifdef __DSBT__
++extern void **_dl_ldso_dsbt;
++#endif
+
+ #if defined(USE_TLS) && USE_TLS
+ extern void _dl_add_to_slotinfo (struct link_map *l);
+ extern void ** __attribute__ ((const)) _dl_initial_error_catch_tsd (void);
+ #endif
+
+-#ifdef USE_TLS
+-void _dl_add_to_slotinfo (struct link_map *l);
+-void ** __attribute__ ((const)) _dl_initial_error_catch_tsd (void);
+-#endif
+ #ifdef __SUPPORT_LD_DEBUG__
+ extern char *_dl_debug;
+ extern char *_dl_debug_symbols;
+@@ -110,7 +112,8 @@
+ #else
+ # define __dl_debug_dprint(fmt, args...) do {} while (0)
+ # define _dl_if_debug_dprint(fmt, args...) do {} while (0)
+-# define _dl_debug_file 2
++/* disabled on purpose, _dl_debug_file should be guarded by __SUPPORT_LD_DEBUG__
++# define _dl_debug_file 2*/
+ #endif /* __SUPPORT_LD_DEBUG__ */
+
+ #ifdef IS_IN_rtld
+@@ -146,8 +149,19 @@
+ extern void _dl_free(void *);
+ extern char *_dl_getenv(const char *symbol, char **envp);
+ extern void _dl_unsetenv(const char *symbol, char **envp);
++#ifdef IS_IN_rtld
+ extern char *_dl_strdup(const char *string);
+ extern void _dl_dprintf(int, const char *, ...);
++#else
++# include <string.h>
++# define _dl_strdup strdup
++# include <stdio.h>
++# ifdef __USE_GNU
++# define _dl_dprintf dprintf
++# else
++# define _dl_dprintf(fd, fmt, args...) fprintf(stderr, fmt, ## args)
++# endif
++#endif
+
+ #ifndef DL_GET_READY_TO_RUN_EXTRA_PARMS
+ # define DL_GET_READY_TO_RUN_EXTRA_PARMS
+@@ -168,4 +182,4 @@
+ #include <dl-defs.h>
+ #endif
+
+-#endif /* _LDSO_H_ */
++#endif /* _LDSO_H */
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arc/dl-debug.h uClibc-git/ldso/ldso/arc/dl-debug.h
+--- uClibc-0.9.33.2/ldso/ldso/arc/dl-debug.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/arc/dl-debug.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,68 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++static const char *_dl_reltypes_tab[] =
++{
++ "R_ARC_NONE", /* 0 */
++ "R_ARC_8",
++ "R_ARC_16",
++ "R_ARC_24",
++ "R_ARC_32",
++ "R_ARC_B26", /* 5 */
++ "R_ARC_B22_PCREL",
++ "R_ARC_H30",
++ "R_ARC_N8",
++ "R_ARC_N16",
++ "R_ARC_N24", /* 10 */
++ "R_ARC_N32",
++ "R_ARC_SDA",
++ "R_ARC_SECTOFF",
++ "R_ARC_S21H_PCREL",
++ "R_ARC_S21W_PCREL", /* 15 */
++ "R_ARC_S25H_PCREL",
++ "R_ARC_S25W_PCREL",
++ "R_ARC_SDA32",
++ "R_ARC_SDA_LDST",
++ "R_ARC_SDA_LDST1", /* 20 */
++ "R_ARC_SDA_LDST2",
++ "R_ARC_SDA16_LD",
++ "R_ARC_SDA16_LD1",
++ "R_ARC_SDA16_LD2",
++ "R_ARC_S13_PCREL", /* 25 */
++ "R_ARC_W",
++ "R_ARC_32_ME",
++ "R_ARC_N32_ME",
++ "R_ARC_SECTOFF_ME",
++ "R_ARC_SDA32_ME", /* 30 */
++ "R_ARC_W_ME",
++ "R_ARC_H30_ME",
++ "R_ARC_SECTOFF_U8",
++ "R_ARC_SECTOFF_S9",
++ "R_AC_SECTOFF_U8", /* 35 */
++ "R_AC_SECTOFF_U8_1",
++ "R_AC_SECTOFF_U8_2",
++ "R_AC_SECTOFF_S9",
++ "R_AC_SECTOFF_S9_1",
++ "R_AC_SECTOFF_S9_2", /* 40 */
++ "R_ARC_SECTOFF_ME_1",
++ "R_ARC_SECTOFF_ME_2",
++ "R_ARC_SECTOFF_1",
++ "R_ARC_SECTOFF_2",
++ "", /* 45 */
++ "",
++ "",
++ "",
++ "",
++ "R_ARC_PC32", /* 50 */
++ "R_ARC_GOTPC32",
++ "R_ARC_PLT32",
++ "R_ARC_COPY",
++ "R_ARC_GLOB_DAT",
++ "R_ARC_JMP_SLOT", /* 55 */
++ "R_ARC_RELATIVE",
++ "R_ARC_GOTOFF",
++ "R_ARC_GOTPC",
++ "R_ARC_GOT32",
++};
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arc/dl-startup.h uClibc-git/ldso/ldso/arc/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/arc/dl-startup.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/arc/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,89 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/*
++ * vineetg: Refactoring/cleanup of loader entry point
++ * Removed 6 useless insns
++ * Joern Improved it even further:
++ * -better insn scheduling
++ * -no need for conditional code for _dl_skip_args
++ * -use of assembler .&2 expressions vs. @gotpc refs (avoids need for GP)
++ *
++ * What this code does:
++ * -ldso starts execution here when kernel returns from execve()
++ * -calls into generic ldso entry point _dl_start( )
++ * -optionally adjusts argc for executable if exec passed as cmd
++ * -calls into app main with address of finaliser
++ */
++__asm__(
++ ".section .text \n"
++ ".align 4 \n"
++ ".global _start \n"
++ ".hidden _start \n"
++ ".type _start,@function \n"
++
++ "_start: \n"
++ " ; ldso entry point, returns app entry point \n"
++ " bl.d _dl_start \n"
++ " mov_s r0, sp ; pass ptr to aux vector tbl \n"
++
++ " ; If ldso ran as cmd with executable file nm as arg \n"
++ " ; skip the extra args calc by dl_start() \n"
++ " ld_s r1, [sp] ; orig argc from aux-vec Tbl \n"
++#ifdef STAR_9000535888_FIXED
++ " ld r12, [pcl, _dl_skip_args-.+(.&2)] \n"
++#else
++ " add r12, pcl, _dl_skip_args-.+(.&2) \n"
++ " ld r12, [r12] \n"
++#endif
++
++ " add r2, pcl, _dl_fini-.+(.&2) ; finalizer \n"
++
++ " add2 sp, sp, r12 ; discard argv entries from stack\n"
++ " sub_s r1, r1, r12 ; adjusted argc, on stack \n"
++ " st_s r1, [sp] \n"
++
++ " j_s.d [r0] ; app entry point \n"
++ " mov_s r0, r2 ; ptr to finalizer _dl_fini \n"
++
++ ".size _start,.-_start \n"
++ ".previous \n"
++);
++
++/*
++ * Get a pointer to the argv array. On many platforms this can be just
++ * the address if the first argument, on other platforms we need to
++ * do something a little more subtle here.
++ */
++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long*) ARGS + 1)
++
++/*
++ * Dynamic loader bootstrapping:
++ * Since we don't modify text at runtime, these can only be data relos
++ * (so safe to assume that they are word aligned).
++ * And also they HAVE to be RELATIVE relos only
++ * @RELP is the relo entry being processed
++ * @REL is the pointer to the address we are relocating.
++ * @SYMBOL is the symbol involved in the relocation
++ * @LOAD is the load address.
++ */
++
++#define PERFORM_BOOTSTRAP_RELOC(RELP,REL,SYMBOL,LOAD,SYMTAB) \
++do { \
++ int type = ELF32_R_TYPE((RELP)->r_info); \
++ if (likely(type == R_ARC_RELATIVE)) \
++ *REL += (unsigned long) LOAD; \
++ else \
++ _dl_exit(1); \
++}while(0)
++
++/*
++ * This will go away once we have DT_RELACOUNT
++ */
++#define ARCH_NEEDS_BOOTSTRAP_RELOCS
++
++/* we dont need to spit out argc, argv etc for debugging */
++#define NO_EARLY_SEND_STDERR 1
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arc/dl-syscalls.h uClibc-git/ldso/ldso/arc/dl-syscalls.h
+--- uClibc-0.9.33.2/ldso/ldso/arc/dl-syscalls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/arc/dl-syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/* stub for arch-specific syscall issues */
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arc/dl-sysdep.h uClibc-git/ldso/ldso/arc/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/arc/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/arc/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,150 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include "elf.h"
++
++/*
++ * Define this if the system uses RELOCA.
++ */
++#define ELF_USES_RELOCA
++
++/*
++ * Dynamic Linking ABI for ARCompact ISA
++ *
++ * PLT
++ * --------------------------------
++ * | ld r11, [pcl, off-to-GOT[1] | 0 (20 bytes)
++ * | | 4
++ * plt0 | ld r10, [pcl, off-to-GOT[2] | 8
++ * | | 12
++ * | j [r10] | 16
++ * --------------------------------
++ * | Base address of GOT | 20
++ * --------------------------------
++ * | ld r12, [pcl, off-to-GOT[3] | 24 (12 bytes each)
++ * plt1 | |
++ * | j_s.d [r12] | 32
++ * | mov_s r12, pcl | 34
++ * --------------------------------
++ * | | 36
++ * ~ ~
++ * ~ ~
++ * | |
++ * --------------------------------
++ *
++ * GOT
++ * --------------
++ * | [0] |
++ * --------------
++ * | [1] | Module info - setup by ldso
++ * --------------
++ * | [2] | resolver entry point
++ * --------------
++ * | [3] |
++ * | ... | Runtime address for function symbols
++ * | [f] |
++ * --------------
++ * | [f+1] |
++ * | ... | Runtime address for data symbols
++ * | [last] |
++ * --------------
++ */
++
++/*
++ * Initialization sequence for a GOT.
++ * Caller elf_resolve() seeds @GOT_BASE from DT_PLTGOT - which essentially is
++ * pointer to first PLT entry. The actual GOT base is 5th word in PLT
++ *
++ */
++#define INIT_GOT(GOT_BASE,MODULE) \
++do { \
++ unsigned long *__plt_base = (unsigned long *)GOT_BASE; \
++ GOT_BASE = (unsigned long *)(__plt_base[5] + \
++ (unsigned long)MODULE->loadaddr); \
++ GOT_BASE[1] = (unsigned long) MODULE; \
++ GOT_BASE[2] = (unsigned long) _dl_linux_resolve; \
++} while(0)
++
++/* Here we define the magic numbers that this dynamic loader should accept */
++#define MAGIC1 EM_ARCOMPACT
++#undef MAGIC2
++
++/* Used for error messages */
++#define ELF_TARGET "ARC"
++
++struct elf_resolve;
++extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt,
++ unsigned int plt_pc);
++
++extern unsigned __udivmodsi4(unsigned, unsigned) attribute_hidden;
++
++#define do_rem(result, n, base) ((result) = \
++ \
++ __builtin_constant_p (base) ? (n) % (unsigned) (base) : \
++ __extension__ ({ \
++ register unsigned r1 __asm__ ("r1") = (base); \
++ \
++ __asm__("bl.d @__udivmodsi4` mov r0,%1" \
++ : "=r" (r1) \
++ : "r" (n), "r" (r1) \
++ : "r0", "r2", "r3", "r4", "lp_count", "blink", "cc"); \
++ \
++ r1; \
++ }) \
++)
++
++/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so
++ PLT entries should not be allowed to define the value.
++ ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
++ of the main executable's symbols, as for a COPY reloc. */
++#define elf_machine_type_class(type) \
++ ((((type) == R_ARC_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
++ | (((type) == R_ARC_COPY) * ELF_RTYPE_CLASS_COPY))
++
++/*
++ * Get the runtime address of GOT[0]
++ */
++static __always_inline Elf32_Addr elf_machine_dynamic(void)
++{
++ Elf32_Addr dyn;
++
++ __asm__("ld %0,[pcl,_DYNAMIC@gotpc]\n\t" : "=r" (dyn));
++ return dyn;
++
++/*
++ * Another way would have been to simply return GP, which due to some
++ * PIC reference would be automatically setup by gcc in caller
++ * register Elf32_Addr *got __asm__ ("gp"); return *got;
++ */
++}
++
++/* Return the run-time load address of the shared object. */
++static __always_inline Elf32_Addr elf_machine_load_address(void)
++{
++ /* To find the loadaddr we subtract the runtime addr of any symbol
++ * say _dl_start from it's build-time addr.
++ */
++ Elf32_Addr addr, tmp;
++ __asm__ (
++ "ld %1, [pcl, _dl_start@gotpc] ;build addr of _dl_start \n"
++ "add %0, pcl, _dl_start-.+(.&2) ;runtime addr of _dl_start \n"
++ "sub %0, %0, %1 ;delta \n"
++ : "=&r" (addr), "=r"(tmp)
++ );
++ return addr;
++}
++
++static __always_inline void
++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
++ Elf32_Word relative_count)
++{
++ Elf32_Rel * rpnt = (void *) rel_addr;
++ --rpnt;
++ do {
++ Elf32_Addr *const reloc_addr = (void *) (load_off + (++rpnt)->r_offset);
++ *reloc_addr += load_off;
++ } while (--relative_count);
++}
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arc/elfinterp.c uClibc-git/ldso/ldso/arc/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/arc/elfinterp.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/arc/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,279 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Lots of code copied from ../i386/elfinterp.c, so:
++ * Copyright (c) 1994-2000 Eric Youngdale, Peter MacDonald,
++ * David Engel, Hongjiu Lu and Mitch D'Souza
++ * Copyright (C) 2001-2002, Erik Andersen
++ * All rights reserved.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++#include "ldso.h"
++
++#define ARC_PLT_SIZE 12
++
++unsigned long
++_dl_linux_resolver(struct elf_resolve *tpnt, unsigned int plt_pc)
++{
++ ELF_RELOC *this_reloc, *rel_base;
++ char *strtab, *symname, *new_addr;
++ ElfW(Sym) *symtab;
++ int symtab_index;
++ unsigned int *got_addr;
++ unsigned long plt_base;
++ int plt_idx;
++
++ /* start of .rela.plt */
++ rel_base = (ELF_RELOC *)(tpnt->dynamic_info[DT_JMPREL]);
++
++ /* starts of .plt (addr of PLT0) */
++ plt_base = tpnt->dynamic_info[DT_PLTGOT];
++
++ /*
++ * compute the idx of the yet-unresolved PLT entry in .plt
++ * Same idx will be used to find the relo entry in .rela.plt
++ */
++ plt_idx = (plt_pc - plt_base)/ARC_PLT_SIZE - 2; /* ignoring 2 dummy PLTs */
++
++ this_reloc = rel_base + plt_idx;
++
++ symtab_index = ELF_R_SYM(this_reloc->r_info);
++ symtab = (ElfW(Sym) *)(intptr_t) (tpnt->dynamic_info[DT_SYMTAB]);
++ strtab = (char *) (tpnt->dynamic_info[DT_STRTAB]);
++ symname= strtab + symtab[symtab_index].st_name;
++
++ /* relo-offset to fixup, shd be a .got entry */
++ got_addr = (unsigned int *)(this_reloc->r_offset + tpnt->loadaddr);
++
++ /* Get the address of the GOT entry */
++ new_addr = _dl_find_hash(symname, &_dl_loaded_modules->symbol_scope, tpnt,
++ ELF_RTYPE_CLASS_PLT, NULL);
++
++ if (unlikely(!new_addr)) {
++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", _dl_progname, symname);
++ _dl_exit(1);
++ }
++
++
++#if defined __SUPPORT_LD_DEBUG__
++ if (_dl_debug_bindings) {
++ _dl_dprintf(_dl_debug_file, "\nresolve function: %s", symname);
++ if (_dl_debug_detail)
++ _dl_dprintf(_dl_debug_file, "\n\tpatched %x ==> %pc @ %pl\n",
++ *got_addr, new_addr, got_addr);
++ }
++
++ if (!_dl_debug_nofixups)
++ *got_addr = (unsigned int)new_addr;
++#else
++ /* Update the .got entry with the runtime address of symbol */
++ *got_addr = (unsigned int)new_addr;
++#endif
++
++ /*
++ * Return the new addres, where the asm trampoline will jump to
++ * after re-setting up the orig args
++ */
++ return (unsigned long) new_addr;
++}
++
++
++static int
++_dl_do_reloc(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab)
++{
++ int reloc_type;
++ int symtab_index;
++ char *symname;
++ unsigned long *reloc_addr;
++ unsigned long symbol_addr;
++#if defined __SUPPORT_LD_DEBUG__
++ unsigned long old_val = 0;
++#endif
++ struct symbol_ref sym_ref;
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF_R_TYPE(rpnt->r_info);
++ symtab_index = ELF_R_SYM(rpnt->r_info);
++ symbol_addr = 0;
++
++ sym_ref.sym = &symtab[symtab_index];
++ sym_ref.tpnt = NULL;
++
++#if defined __SUPPORT_LD_DEBUG__
++ if (reloc_addr)
++ old_val = *reloc_addr;
++#endif
++
++ if (symtab_index) {
++ symname = strtab + symtab[symtab_index].st_name;
++ symbol_addr = (unsigned long) _dl_find_hash(symname, scope, tpnt,
++ elf_machine_type_class(reloc_type), &sym_ref);
++
++ /*
++ * We want to allow undefined references to weak symbols,
++ * this might have been intentional. We should not be linking
++ * local symbols here, so all bases should be covered.
++ */
++
++ if (unlikely(!symbol_addr
++ && ELF_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK)) {
++ /* Non-fatal if called from dlopen, hence different ret code */
++ return 1;
++ }
++ } else if (reloc_type == R_ARC_RELATIVE ) {
++ *reloc_addr += tpnt->loadaddr;
++ goto log_entry;
++ }
++
++ switch (reloc_type) {
++ case R_ARC_32:
++ *reloc_addr += symbol_addr + rpnt->r_addend;
++ break;
++ case R_ARC_PC32:
++ *reloc_addr += symbol_addr + rpnt->r_addend - (unsigned long) reloc_addr;
++ break;
++ case R_ARC_GLOB_DAT:
++ case R_ARC_JMP_SLOT:
++ *reloc_addr = symbol_addr;
++ break;
++ case R_ARC_COPY:
++ _dl_memcpy((void *) reloc_addr,(void *) symbol_addr,
++ symtab[symtab_index].st_size);
++ break;
++ default:
++ return -1;
++ }
++
++log_entry:
++#if defined __SUPPORT_LD_DEBUG__
++ if (_dl_debug_detail)
++ _dl_dprintf(_dl_debug_file,"\tpatched: %lx ==> %lx @ %pl: addend %x ",
++ old_val, *reloc_addr, reloc_addr, rpnt->r_addend);
++#endif
++
++ return 0;
++}
++
++static int
++_dl_do_lazy_reloc(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ ELF_RELOC *rpnt)
++{
++ int reloc_type;
++ unsigned long *reloc_addr;
++#if defined __SUPPORT_LD_DEBUG__
++ unsigned long old_val;
++#endif
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF_R_TYPE(rpnt->r_info);
++
++#if defined __SUPPORT_LD_DEBUG__
++ old_val = *reloc_addr;
++#endif
++
++ switch (reloc_type) {
++ case R_ARC_JMP_SLOT:
++ *reloc_addr += tpnt->loadaddr;
++ break;
++ default:
++ return -1;
++ }
++
++#if defined __SUPPORT_LD_DEBUG__
++ if (_dl_debug_reloc && _dl_debug_detail)
++ _dl_dprintf(_dl_debug_file, "\tpatched: %lx ==> %lx @ %pl\n",
++ old_val, *reloc_addr, reloc_addr);
++#endif
++
++ return 0;
++}
++
++#define ___DO_LAZY 1
++#define ___DO_NOW 2
++
++static int _dl_parse(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ unsigned long rel_addr, unsigned long rel_size, int type)
++{
++ unsigned int i;
++ char *strtab;
++ ElfW(Sym) *symtab;
++ ELF_RELOC *rpnt;
++ int symtab_index;
++ int res = 0;
++
++ /* Now parse the relocation information */
++ rpnt = (ELF_RELOC *)(intptr_t) (rel_addr);
++ rel_size = rel_size / sizeof(ELF_RELOC);
++
++ symtab = (ElfW(Sym) *)(intptr_t) (tpnt->dynamic_info[DT_SYMTAB]);
++ strtab = (char *) (tpnt->dynamic_info[DT_STRTAB]);
++
++ for (i = 0; i < rel_size; i++, rpnt++) {
++
++ symtab_index = ELF_R_SYM(rpnt->r_info);
++
++ debug_sym(symtab,strtab,symtab_index);
++ debug_reloc(symtab,strtab,rpnt);
++
++ /* constant propagation subsumes the 'if' */
++ if (type == ___DO_LAZY)
++ res = _dl_do_lazy_reloc(tpnt, scope, rpnt);
++ else
++ res = _dl_do_reloc(tpnt, scope, rpnt, symtab, strtab);
++
++ if (res != 0)
++ break;
++ }
++
++ if (unlikely(res != 0)) {
++ if (res < 0) {
++ int reloc_type = ELF_R_TYPE(rpnt->r_info);
++#if defined __SUPPORT_LD_DEBUG__
++ _dl_dprintf(2, "can't handle reloc type %s\n ",
++ _dl_reltypes(reloc_type));
++#else
++ _dl_dprintf(2, "can't handle reloc type %x\n",
++ reloc_type);
++#endif
++ _dl_exit(-res);
++ } else {
++ _dl_dprintf(2, "can't resolve symbol\n");
++ /* Fall thru to return res */
++ }
++ }
++
++ return res;
++}
++
++void
++_dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ /* This func is called for processing .rela.plt of loaded module(s)
++ * The relo entries handled are JMP_SLOT type for fixing up .got slots
++ * for external function calls.
++ * This function doesn't resolve the slots: that is done lazily at
++ * runtime. The build linker (at least thats what happens for ARC) had
++ * pre-init the .got slots to point to PLT0. All that is done here is
++ * to fix them up to point to load value of PLT0 (as opposed to the
++ * build value).
++ * On ARC, the loadaddr of dyn exec is zero, thus elfaddr == loadaddr
++ * Thus there is no point in adding "0" to values and un-necessarily
++ * stir up the caches and TLB.
++ * For ldso processing busybox binary, this skips over 380 relo entries
++ */
++ if (rpnt->dyn->loadaddr != 0)
++ _dl_parse(rpnt->dyn, NULL, rel_addr, rel_size, ___DO_LAZY);
++}
++
++int
++_dl_parse_relocation_information(struct dyn_elf *rpnt,
++ struct r_scope_elem *scope,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ return _dl_parse(rpnt->dyn, scope, rel_addr, rel_size, ___DO_NOW);
++}
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arc/resolve.S uClibc-git/ldso/ldso/arc/resolve.S
+--- uClibc-0.9.33.2/ldso/ldso/arc/resolve.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/arc/resolve.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,57 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++#include <sys/syscall.h>
++
++; Save the registers which resolver could possibly clobber
++; r0-r9: args to the function - symbol being resolved
++; r10-r12 are already clobbered by PLTn, PLT0 thus neednot be saved
++
++.macro SAVE_CALLER_SAVED
++ push_s r0
++ push_s r1
++ push_s r2
++ push_s r3
++ st.a r4, [sp, -4]
++ st.a r5, [sp, -4]
++ st.a r6, [sp, -4]
++ st.a r7, [sp, -4]
++ st.a r8, [sp, -4]
++ st.a r9, [sp, -4]
++ push_s blink
++.endm
++
++.macro RESTORE_CALLER_SAVED_BUT_R0
++ ld.ab blink,[sp, 4]
++ ld.ab r9, [sp, 4]
++ ld.ab r8, [sp, 4]
++ ld.ab r7, [sp, 4]
++ ld.ab r6, [sp, 4]
++ ld.ab r5, [sp, 4]
++ ld.ab r4, [sp, 4]
++ pop_s r3
++ pop_s r2
++ pop_s r1
++.endm
++
++; Upon entry, PLTn, which led us here, sets up the following regs
++; r11 = Module info (tpnt pointer as expected by resolver)
++; r12 = PC of the PLTn itself - needed by resolver to find
++; corresponding .rela.plt entry
++
++ENTRY(_dl_linux_resolve)
++ ; args to func being resolved, which resolver might clobber
++ SAVE_CALLER_SAVED
++
++ mov_s r1, r12
++ bl.d _dl_linux_resolver
++ mov r0, r11
++
++ RESTORE_CALLER_SAVED_BUT_R0
++ j_s.d [r0] ; r0 has resolved function addr
++ pop_s r0 ; restore first arg to resolved call
++END(_dl_linux_resolve)
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arm/aeabi_read_tp.S uClibc-git/ldso/ldso/arm/aeabi_read_tp.S
+--- uClibc-0.9.33.2/ldso/ldso/arm/aeabi_read_tp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/arm/aeabi_read_tp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -29,9 +29,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arm/dl-startup.h uClibc-git/ldso/ldso/arm/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/arm/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/arm/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,6 +14,7 @@
+ " .text\n"
+ " .globl _start\n"
+ " .type _start,%function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " @ at start time, all the args are on the stack\n"
+ " mov r0, sp\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arm/dl-sysdep.h uClibc-git/ldso/ldso/arm/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/arm/dl-sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/arm/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -58,11 +58,6 @@
+ struct elf_resolve;
+ unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry);
+
+-/* 4096 bytes alignment */
+-#define PAGE_ALIGN 0xfffff000
+-#define ADDR_ALIGN 0xfff
+-#define OFFS_ALIGN 0x7ffff000
+-
+ /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
+ TLS variable, so undefined references should not be allowed to
+ define the value.
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arm/elfinterp.c uClibc-git/ldso/ldso/arm/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/arm/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/arm/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -77,9 +77,9 @@
+ _dl_exit(1);
+ }
+ #if defined (__SUPPORT_LD_DEBUG__)
+-#if !defined __SUPPORT_LD_DEBUG_EARLY__
++# if !defined __SUPPORT_LD_DEBUG_EARLY__
+ if ((unsigned long) got_addr < 0x40000000)
+-#endif
++# endif
+ {
+ if (_dl_debug_bindings)
+ {
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arm/resolve.S uClibc-git/ldso/ldso/arm/resolve.S
+--- uClibc-0.9.33.2/ldso/ldso/arm/resolve.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/arm/resolve.S 2014-02-03 12:32:56.000000000 +0100
+@@ -101,7 +101,7 @@
+
+ .text
+ .align 4 @ 16 byte boundary and there are 32 bytes below (arm case)
+- #if !defined(__thumb__) || defined(__thumb2__)
++#if 1 /*(!defined(__thumb__) || defined __THUMB_INTERWORK__) || defined(__thumb2__)*/
+ .arm
+ .globl _dl_linux_resolve
+ .type _dl_linux_resolve,%function
+diff -Nur uClibc-0.9.33.2/ldso/ldso/arm/thumb_atomics.S uClibc-git/ldso/ldso/arm/thumb_atomics.S
+--- uClibc-0.9.33.2/ldso/ldso/arm/thumb_atomics.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/arm/thumb_atomics.S 2014-02-03 12:32:56.000000000 +0100
+@@ -29,9 +29,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/ldso/ldso/avr32/dl-startup.h uClibc-git/ldso/ldso/avr32/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/avr32/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/avr32/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,6 +12,7 @@
+ __asm__(" .text\n"
+ " .global _start\n"
+ " .type _start,@function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ /* All arguments are on the stack initially */
+ " mov r12, sp\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/avr32/dl-sysdep.h uClibc-git/ldso/ldso/avr32/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/avr32/dl-sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/avr32/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -35,8 +35,6 @@
+ GOT_BASE[_i] += (unsigned long)MODULE->loadaddr; \
+ } while (0)
+
+-#define do_rem(result, n, base) ((result) = (n) % (base))
+-
+ /* Here we define the magic numbers that this dynamic loader should accept */
+ #define MAGIC1 EM_AVR32
+ #undef MAGIC2
+diff -Nur uClibc-0.9.33.2/ldso/ldso/bfin/dl-startup.h uClibc-git/ldso/ldso/bfin/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/bfin/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/bfin/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+-License along with uClibc; see the file COPYING.LIB. If not, write to
+-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+-USA. */
++License along with uClibc; see the file COPYING.LIB. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ /* Any assembly language/system dependent hacks needed to setup
+ * boot1.c so it will work as expected and cope with whatever platform
+@@ -40,10 +39,7 @@
+ " .text\n"
+ " .global __start\n"
+ " .type __start,@function\n"
+- /* Build system expects a "_start" for the entry point;
+- provide it as it's free to do so with aliases. */
+- " .set _start, __start\n"
+- " .global _start\n"
++ " .hidden __start\n"
+ "__start:\n"
+ " call .Lcall\n"
+ ".Lcall:\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/bfin/dl-syscalls.h uClibc-git/ldso/ldso/bfin/dl-syscalls.h
+--- uClibc-0.9.33.2/ldso/ldso/bfin/dl-syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/bfin/dl-syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+-License along with uClibc; see the file COPYING.LIB. If not, write to
+-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+-USA. */
++License along with uClibc; see the file COPYING.LIB. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ #ifdef __NR_sram_alloc
+ #define __NR__dl_sram_alloc __NR_sram_alloc
+diff -Nur uClibc-0.9.33.2/ldso/ldso/bfin/elfinterp.c uClibc-git/ldso/ldso/bfin/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/bfin/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/bfin/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -20,9 +20,8 @@
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+-License along with uClibc; see the file COPYING.LIB. If not, write to
+-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+-USA. */
++License along with uClibc; see the file COPYING.LIB. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ #include <sys/cdefs.h> /* __attribute_used__ */
+
+diff -Nur uClibc-0.9.33.2/ldso/ldso/bfin/resolve.S uClibc-git/ldso/ldso/bfin/resolve.S
+--- uClibc-0.9.33.2/ldso/ldso/bfin/resolve.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/bfin/resolve.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+-License along with uClibc; see the file COPYING.LIB. If not, write to
+-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+-USA. */
++License along with uClibc; see the file COPYING.LIB. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ /* The function below is tail-called by resolver stubs when a
+ lazily-bound function is called. It must preserve all
+diff -Nur uClibc-0.9.33.2/ldso/ldso/c6x/dl-startup.h uClibc-git/ldso/ldso/c6x/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/c6x/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/c6x/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -6,10 +6,9 @@
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+-
+ #undef DL_START
+ #define DL_START(X) \
+-int \
++static void * __attribute_used__ \
+ _dl_start (unsigned placeholder, \
+ struct elf32_dsbt_loadmap *dl_boot_progmap, \
+ struct elf32_dsbt_loadmap *dl_boot_ldsomap, \
+@@ -34,7 +33,6 @@
+ * B4 --> executable loadmap address
+ * A6 --> interpreter loadmap address
+ * B6 --> dynamic section address
+- * B14 --> our DP setup by kernel
+ *
+ * NB: DSBT index is always 0 for the executable
+ * and 1 for the interpreter
+@@ -42,7 +40,76 @@
+
+ __asm__(" .text\n"
+ ".globl _start\n"
++ ".hidden _start\n"
+ "_start:\n"
++ /* Find interpreter DSBT base in dynamic section */
++ " MV .S2 B6,B2\n"
++ " || ADD .D1X B6,4,A2\n"
++ " LDW .D2T2 *B2++[2],B0\n"
++ " || LDW .D1T1 *A2++[2],A0\n"
++ " MVKL .S2 " __stringify(DT_C6000_DSBT_BASE) ",B7\n"
++ " MVKH .S2 " __stringify(DT_C6000_DSBT_BASE) ",B7\n"
++ " NOP\n"
++ " NOP\n"
++ /*
++ * B0 now holds dynamic tag and A0 holds tag value.
++ * Loop through looking for DSBT base tag
++ */
++ "0:\n"
++ " [B0] CMPEQ .L2 B0,B7,B1\n"
++ " || [!B0] MVK .S2 1,B1\n"
++ " [!B1] BNOP .S1 0b,5\n"
++ " ||[!B1] LDW .D2T2 *B2++[2],B0\n"
++ " ||[!B1] LDW .D1T1 *A2++[2],A0\n"
++ /*
++ * DSBT base in A0 needs to be relocated.
++ * Search through our loadmap to find where it got loaded.
++ *
++ * struct elf32_dsbt_loadmap {
++ * Elf32_Half version;
++ * Elf32_Half nsegs;
++ * struct {
++ * Elf32_Addr addr;
++ * Elf32_Addr p_vaddr;
++ * Elf32_Word p_memsz;
++ * } segments[];
++ * }
++ *
++ */
++ " MV .S1 A6,A1\n"
++ " [!A1] MV .S1X B4,A1\n"
++ " ADD .D1 A1,2,A3\n"
++ " LDHU .D1T2 *A3++[1],B0\n" /* nsegs */
++ " LDW .D1T1 *A3++[1],A10\n" /* addr */
++ " LDW .D1T1 *A3++[1],A11\n" /* p_vaddr */
++ " LDW .D1T1 *A3++[1],A12\n" /* p_memsz */
++ " NOP\n"
++ " NOP\n"
++ /*
++ * Here we have:
++ * B0 -> number of segments to search.
++ * A3 -> pointer to next segment to check
++ * A10 -> segment load address
++ * A11 -> ELF segment virt address
++ * A12 -> ELF segment size
++ */
++ "0:\n"
++ " [!B0] B .S2 0f\n"
++ " SUB .D2 B0,1,B0\n"
++ " CMPLTU .L1 A0,A11,A13\n"
++ " || SUB .S1 A12,1,A12\n"
++ " ADD .D1 A11,A12,A12\n"
++ " CMPGTU .L1 A0,A12,A14\n"
++ " OR .L1 A13,A14,A2\n"
++ " [A2] B .S2 0b\n"
++ " || [!A2] SUB .L1 A0,A11,A0\n"
++ " [B0] LDW .D1T1 *A3++[1],A10\n" /* addr */
++ " || [!A2] ADD .L1 A0,A10,A0\n"
++ " [B0] LDW .D1T1 *A3++[1],A11\n" /* p_vaddr */
++ " [B0] LDW .D1T1 *A3++[1],A12\n" /* p_memsz */
++ " MV .S2X A0,B14\n"
++ " NOP\n"
++ "0:\n"
+ " B .S2 _dl_start\n"
+ " STW .D2T2 B14, *+B14[1]\n"
+ " ADD .D1X B15,8,A8\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/c6x/dl-sysdep.h uClibc-git/ldso/ldso/c6x/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/c6x/dl-sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/c6x/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -52,13 +52,13 @@
+ struct funcdesc_ht;
+ struct elf32_dsbt_loadaddr;
+
+-/* We must force strings used early in the bootstrap into the text
+- segment (const data), such that they are referenced relative to
+- the DP register rather than through the GOT which will not have
+- been relocated when these are used. */
++/* Current toolchains access constant strings via unrelocated GOT
++ entries. Fortunately, we have enough in place to just call the
++ relocation function early on. */
+ #undef SEND_EARLY_STDERR
+ #define SEND_EARLY_STDERR(S) \
+- do { static char __s[] = (S); SEND_STDERR (__s); } while (0)
++ do { char *__p = __reloc_pointer((S), dl_boot_ldsomap?:dl_boot_progmap);\
++ SEND_STDERR (__p); } while (0)
+
+ #define DL_LOADADDR_TYPE struct elf32_dsbt_loadaddr
+
+@@ -114,7 +114,7 @@
+ (__dl_loadaddr_unmap ((LIB)->loadaddr))
+
+ #define DL_LOADADDR_BASE(LOADADDR) \
+- ((LOADADDR).map->dsbt_table)
++ ((LOADADDR).map)
+
+ #define DL_ADDR_IN_LOADADDR(ADDR, TPNT, TFROM) \
+ (! (TFROM) && __dl_addr_in_loadaddr ((void*)(ADDR), (TPNT)->loadaddr))
+@@ -150,18 +150,28 @@
+
+
+ /*
+- * Compute the GOT address.
+- * Also setup program and interpreter DSBT table entries.
++ * C6X doesn't really need the GOT here.
++ * The GOT is placed just past the DSBT table, so we could find it by
++ * using the DSBT register + table size found in the dynamic section.
++ *
++ * do { \
++ * unsigned long *ldso_dsbt; \
++ * ElfW(Dyn) *d = dl_boot_ldso_dyn_pointer; \
++ * while (d->d_tag != DT_NULL) { \
++ * if (d->d_tag == DT_C6000_DSBT_SIZE) { \
++ * __asm__ (" MV .S2 B14,%0\n" \
++ * : "=b" (ldso_dsbt)); \
++ * (GOT) = ldso_dsbt + d->d_un.d_val; \
++ * break; \
++ * } \
++ * d++; \
++ * } \
++ * } while(0)
++ *
++ * Instead, just point it to the DSBT table to avoid unused variable warning.
+ */
+ #define DL_BOOT_COMPUTE_GOT(GOT) \
+- do { \
+- unsigned long *ldso_dsbt, *prog_dsbt; \
+- ldso_dsbt = dl_boot_ldsomap->dsbt_table; \
+- prog_dsbt = dl_boot_progmap->dsbt_table; \
+- ldso_dsbt[0] = prog_dsbt[0] = (unsigned long)prog_dsbt; \
+- ldso_dsbt[1] = prog_dsbt[1] = (unsigned long)ldso_dsbt; \
+- (GOT) = ldso_dsbt + dl_boot_ldsomap->dsbt_size; \
+- } while(0)
++ __asm__ (" MV .S2 B14,%0\n" : "=b" (GOT))
+
+ #define DL_BOOT_COMPUTE_DYN(dpnt, got, load_addr) \
+ ((dpnt) = dl_boot_ldso_dyn_pointer)
+@@ -186,12 +196,9 @@
+ # undef __USE_GNU
+ #endif
+
+-static __always_inline Elf32_Addr
+-elf_machine_load_address (void)
+-{
+- /* this is never an issue on DSBT systems */
+- return 0;
+-}
++/* we need this for __LDSO_STANDALONE_SUPPORT__ */
++#define elf_machine_load_address() \
++ (dl_boot_ldsomap ?: dl_boot_progmap)->segs[0].addr
+
+ static __always_inline void
+ elf_machine_relative (DL_LOADADDR_TYPE load_off, const Elf32_Addr rel_addr,
+diff -Nur uClibc-0.9.33.2/ldso/ldso/c6x/elfinterp.c uClibc-git/ldso/ldso/c6x/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/c6x/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/c6x/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -69,14 +69,12 @@
+ got_addr = (char **) DL_RELOC_ADDR(tpnt->loadaddr, this_reloc->r_offset);
+
+ /* Get the address to be used to fill in the GOT entry. */
+- new_addr = _dl_find_hash(symname, tpnt->symbol_scope, tpnt,
+- ELF_RTYPE_CLASS_PLT, NULL);
++ new_addr = _dl_find_hash(symname, &_dl_loaded_modules->symbol_scope, tpnt, ELF_RTYPE_CLASS_PLT, NULL);
+ if (unlikely(!new_addr)) {
+ _dl_dprintf(2, "%s: can't resolve symbol '%s' in lib '%s'.\n", _dl_progname, symname, tpnt->libname);
+ _dl_exit(1);
+ }
+
+-
+ #if defined (__SUPPORT_LD_DEBUG__)
+ if (_dl_debug_bindings) {
+ _dl_dprintf(_dl_debug_file, "\nresolve function: %s", symname);
+@@ -96,9 +94,9 @@
+ }
+
+ static int
+-_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope,
++_dl_parse(struct elf_resolve *tpnt, struct r_scope_elem *scope,
+ unsigned long rel_addr, unsigned long rel_size,
+- int (*reloc_fnc) (struct elf_resolve *tpnt, struct dyn_elf *scope,
++ int (*reloc_fnc) (struct elf_resolve *tpnt, struct r_scope_elem *scope,
+ ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab))
+ {
+ unsigned int i;
+@@ -148,7 +146,7 @@
+ }
+
+ static int
+-_dl_do_reloc (struct elf_resolve *tpnt,struct dyn_elf *scope,
++_dl_do_reloc (struct elf_resolve *tpnt,struct r_scope_elem *scope,
+ ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab)
+ {
+ int reloc_type;
+@@ -157,7 +155,9 @@
+ unsigned long *reloc_addr;
+ unsigned long symbol_addr, sym_val;
+ long reloc_addend;
+- unsigned long old_val, new_val;
++ unsigned long old_val, new_val = 0;
++ struct symbol_ref sym_ref;
++ struct elf_resolve *symbol_tpnt;
+
+ reloc_addr = (unsigned long *)(intptr_t)
+ DL_RELOC_ADDR (tpnt->loadaddr, rpnt->r_offset);
+@@ -167,14 +167,17 @@
+ symtab_index = ELF_R_SYM(rpnt->r_info);
+ symbol_addr = 0;
+ symname = strtab + symtab[symtab_index].st_name;
++ sym_ref.sym = &symtab[symtab_index];
++ sym_ref.tpnt = NULL;
+
+ if (ELF_ST_BIND (symtab[symtab_index].st_info) == STB_LOCAL) {
+ symbol_addr = (unsigned long)
+ DL_RELOC_ADDR (tpnt->loadaddr, symtab[symtab_index].st_value);
++ symbol_tpnt = tpnt;
+ } else {
+- symbol_addr = (unsigned long) _dl_find_hash(strtab + symtab[symtab_index].st_name,
+- scope, tpnt, elf_machine_type_class(reloc_type),
+- NULL);
++ symbol_addr = (unsigned long) _dl_find_hash(symname,
++ scope, NULL, elf_machine_type_class(reloc_type),
++ &sym_ref);
+ /*
+ * We want to allow undefined references to weak symbols - this might
+ * have been intentional. We should not be linking local symbols
+@@ -186,6 +189,7 @@
+ _dl_progname, strtab + symtab[symtab_index].st_name);
+ _dl_exit (1);
+ }
++ symbol_tpnt = sym_ref.tpnt;
+ }
+ old_val = *reloc_addr;
+ sym_val = symbol_addr + reloc_addend;
+@@ -199,7 +203,7 @@
+ *reloc_addr = sym_val;
+ break;
+ case R_C6000_DSBT_INDEX:
+- new_val = (old_val & ~0x007fff00) | ((tpnt->loadaddr.map->dsbt_index & 0x7fff) << 8);
++ new_val = (old_val & ~0x007fff00) | ((symbol_tpnt->dsbt_index & 0x7fff) << 8);
+ *reloc_addr = new_val;
+ break;
+ case R_C6000_ABS_L16:
+@@ -242,7 +246,7 @@
+
+ static int
+ _dl_do_lazy_reloc (struct elf_resolve *tpnt,
+- struct dyn_elf *scope attribute_unused,
++ struct r_scope_elem *scope attribute_unused,
+ ELF_RELOC *rpnt, ElfW(Sym) *symtab attribute_unused,
+ char *strtab attribute_unused)
+ {
+@@ -283,9 +287,9 @@
+
+ int
+ _dl_parse_relocation_information
+-(struct dyn_elf *rpnt, unsigned long rel_addr, unsigned long rel_size)
++(struct dyn_elf *rpnt, struct r_scope_elem *scope, unsigned long rel_addr, unsigned long rel_size)
+ {
+- return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, _dl_do_reloc);
++ return _dl_parse(rpnt->dyn, scope, rel_addr, rel_size, _dl_do_reloc);
+ }
+
+ /* We don't have copy relocs. */
+diff -Nur uClibc-0.9.33.2/ldso/ldso/cris/dl-startup.h uClibc-git/ldso/ldso/cris/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/cris/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/cris/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,7 @@
+ " .text\n" \
+ " .globl _start\n" \
+ " .type _start,@function\n" \
++" .hidden _start\n" \
+ "_start:\n" \
+ " move.d $sp,$r10\n" \
+ " lapc _dl_start,$r9\n" \
+@@ -28,6 +29,7 @@
+ " .text\n" \
+ " .globl _start\n" \
+ " .type _start,@function\n" \
++" .hidden _start\n" \
+ "_start:\n" \
+ " move.d $sp,$r10\n" \
+ " move.d $pc,$r9\n" \
+diff -Nur uClibc-0.9.33.2/ldso/ldso/dl-elf.c uClibc-git/ldso/ldso/dl-elf.c
+--- uClibc-0.9.33.2/ldso/ldso/dl-elf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/dl-elf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -174,8 +174,11 @@
+ _dl_strcpy(mylibname, "."); /* Assume current dir if empty path */
+ _dl_strcat(mylibname, "/");
+ _dl_strcat(mylibname, name);
+- if ((tpnt = _dl_load_elf_shared_library(rflags, rpnt, mylibname)) != NULL)
+- return tpnt;
++#ifdef __LDSO_SAFE_RUNPATH__
++ if (*mylibname == '/')
++#endif
++ if ((tpnt = _dl_load_elf_shared_library(rflags, rpnt, mylibname)) != NULL)
++ return tpnt;
+ path_n = path+1;
+ }
+ path++;
+@@ -500,7 +503,7 @@
+ return NULL;
+ }
+ header = _dl_mmap((void *) 0, _dl_pagesize, PROT_READ | PROT_WRITE,
+- MAP_PRIVATE | MAP_ANONYMOUS | MAP_UNINITIALIZE, -1, 0);
++ MAP_PRIVATE | MAP_ANONYMOUS | MAP_UNINITIALIZED, -1, 0);
+ if (_dl_mmap_check_error(header)) {
+ _dl_dprintf(2, "%s:%i: can't map '%s'\n", _dl_progname, __LINE__, libname);
+ _dl_internal_error_number = LD_ERROR_MMAP_FAILED;
+@@ -739,7 +742,7 @@
+ }
+ }
+ #else
+- _dl_dprintf(_dl_debug_file, "Can't modify %s's text section."
++ _dl_dprintf(2, "Can't modify %s's text section."
+ " Use GCC option -fPIC for shared objects, please.\n",
+ libname);
+ _dl_exit(1);
+@@ -791,7 +794,7 @@
+ #endif
+ {
+ # ifdef __SUPPORT_LD_DEBUG_EARLY__
+- unsigned int tmp = (unsigned int) tpnt->l_tls_initimage;
++ char *tmp = (char *) tpnt->l_tls_initimage;
+ tpnt->l_tls_initimage = (char *) tlsppnt->p_vaddr + tpnt->loadaddr;
+ _dl_debug_early("Relocated TLS initial image from %x to %x (size = %x)\n", tmp, tpnt->l_tls_initimage, tpnt->l_tls_initimage_size);
+ tmp = 0;
+@@ -851,10 +854,15 @@
+ /* Handle DSBT initialization */
+ {
+ struct elf_resolve *t, *ref;
+- int idx = tpnt->loadaddr.map->dsbt_index;
+- unsigned *dsbt = tpnt->loadaddr.map->dsbt_table;
++ int idx = tpnt->dsbt_index;
++ void **dsbt = tpnt->dsbt_table;
+
+- if (idx == 0) {
++ /*
++ * It is okay (required actually) to have zero idx for an executable.
++ * This is the case when running ldso standalone and the program
++ * is being mapped in via _dl_load_shared_library().
++ */
++ if (idx == 0 && tpnt->libtype != elf_executable) {
+ if (!dynamic_info[DT_TEXTREL]) {
+ /* This DSO has not been assigned an index. */
+ _dl_dprintf(2, "%s: '%s' is missing a dsbt index assignment!\n",
+@@ -869,9 +877,9 @@
+ break;
+ }
+ }
+- idx = tpnt->loadaddr.map->dsbt_size;
++ idx = tpnt->dsbt_size;
+ while (idx-- > 0)
+- if (!ref || ref->loadaddr.map->dsbt_table[idx] == NULL)
++ if (!ref || ref->dsbt_table[idx] == NULL)
+ break;
+ if (idx <= 0) {
+ _dl_dprintf(2, "%s: '%s' caused DSBT table overflow!\n",
+@@ -880,43 +888,36 @@
+ }
+ _dl_if_debug_dprint("\n\tfile='%s'; assigned index %d\n",
+ libname, idx);
+- tpnt->loadaddr.map->dsbt_index = idx;
++ tpnt->dsbt_index = idx;
++ }
+
++ /* make sure index is not already used */
++ if (_dl_ldso_dsbt[idx]) {
++ struct elf_resolve *dup;
++ const char *dup_name;
++
++ for (dup = _dl_loaded_modules; dup; dup = dup->next)
++ if (dup != tpnt && dup->dsbt_index == idx)
++ break;
++ if (dup)
++ dup_name = dup->libname;
++ else if (idx == 1)
++ dup_name = "runtime linker";
++ else
++ dup_name = "unknown library";
++ _dl_dprintf(2, "%s: '%s' dsbt index %d already used by %s!\n",
++ _dl_progname, libname, idx, dup_name);
++ _dl_exit(1);
+ }
+
+ /*
+ * Setup dsbt slot for this module in dsbt of all modules.
+ */
+- ref = NULL;
+- for (t = _dl_loaded_modules; t; t = t->next) {
+- /* find a dsbt table from another module */
+- if (ref == NULL && t != tpnt) {
+- ref = t;
+-
+- /* make sure index is not already used */
+- if (t->loadaddr.map->dsbt_table[idx]) {
+- struct elf_resolve *dup;
+- char *dup_name;
+-
+- for (dup = _dl_loaded_modules; dup; dup = dup->next)
+- if (dup != tpnt && dup->loadaddr.map->dsbt_index == idx)
+- break;
+- if (dup)
+- dup_name = dup->libname;
+- else if (idx == 1)
+- dup_name = "runtime linker";
+- else
+- dup_name = "unknown library";
+- _dl_dprintf(2, "%s: '%s' dsbt index %d already used by %s!\n",
+- _dl_progname, libname, idx, dup_name);
+- _dl_exit(1);
+- }
+- }
+- t->loadaddr.map->dsbt_table[idx] = (unsigned)dsbt;
+- }
+- if (ref)
+- _dl_memcpy(dsbt, ref->loadaddr.map->dsbt_table,
+- tpnt->loadaddr.map->dsbt_size * sizeof(unsigned *));
++ for (t = _dl_loaded_modules; t; t = t->next)
++ t->dsbt_table[idx] = dsbt;
++ _dl_ldso_dsbt[idx] = dsbt;
++ _dl_memcpy(dsbt, _dl_ldso_dsbt,
++ tpnt->dsbt_size * sizeof(tpnt->dsbt_table[0]));
+ }
+ #endif
+ _dl_if_debug_dprint("\n\tfile='%s'; generating link map\n", libname);
+@@ -1006,6 +1007,7 @@
+ return goof;
+ }
+
++#ifdef IS_IN_rtld
+ /* Minimal printf which handles only %s, %d, and %x */
+ void _dl_dprintf(int fd, const char *fmt, ...)
+ {
+@@ -1071,7 +1073,7 @@
+ break;
+ }
+ case 'x':
+- case 'X':
++ case 'p':
+ {
+ char tmp[22];
+ #if __WORDSIZE > 32
+@@ -1108,6 +1110,7 @@
+ _dl_strcpy(retval, string);
+ return retval;
+ }
++#endif
+
+ unsigned int _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[],
+ void *debug_addr, DL_LOADADDR_TYPE load_off)
+diff -Nur uClibc-0.9.33.2/ldso/ldso/dl-hash.c uClibc-git/ldso/ldso/dl-hash.c
+--- uClibc-0.9.33.2/ldso/ldso/dl-hash.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/dl-hash.c 2014-02-03 12:32:56.000000000 +0100
+@@ -115,6 +115,15 @@
+ tpnt->dynamic_addr = (ElfW(Dyn) *)dynamic_addr;
+ tpnt->libtype = loaded_file;
+
++#ifdef __DSBT__
++ if (dynamic_info[DT_DSBT_BASE_IDX] != 0)
++ tpnt->dsbt_table = (void *)dynamic_info[DT_DSBT_BASE_IDX];
++ if (dynamic_info[DT_DSBT_SIZE_IDX] != 0)
++ tpnt->dsbt_size = dynamic_info[DT_DSBT_SIZE_IDX];
++ if (dynamic_info[DT_DSBT_INDEX_IDX] != 0)
++ tpnt->dsbt_index = dynamic_info[DT_DSBT_INDEX_IDX];
++#endif /* __DSBT__ */
++
+ #ifdef __LDSO_GNU_HASH_SUPPORT__
+ if (dynamic_info[DT_GNU_HASH_IDX] != 0) {
+ Elf32_Word *hash32 = (Elf_Symndx*)dynamic_info[DT_GNU_HASH_IDX];
+@@ -355,7 +364,6 @@
+ #if defined(USE_TLS) && USE_TLS
+ if (ELF_ST_TYPE(sym->st_info) == STT_TLS) {
+ _dl_assert(sym_ref != NULL);
+- sym_ref->tpnt = tpnt;
+ return (char *)sym->st_value;
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/ldso/ldso/dl-tls.c uClibc-git/ldso/ldso/dl-tls.c
+--- uClibc-0.9.33.2/ldso/ldso/dl-tls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/dl-tls.c 2014-02-03 12:32:56.000000000 +0100
+@@ -922,8 +922,7 @@
+ generation. */
+ ++_dl_tls_generation;
+
+- _dl_dprintf (_dl_debug_file,
+- "cannot create TLS data structures: ABORT\n");
++ _dl_dprintf(2, "cannot create TLS data structures: ABORT\n");
+ _dl_exit (127);
+ }
+
+diff -Nur uClibc-0.9.33.2/ldso/ldso/i386/dl-startup.h uClibc-git/ldso/ldso/i386/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/i386/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/i386/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -7,6 +7,7 @@
+ " .text\n"
+ " .globl _start\n"
+ " .type _start,@function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " call _dl_start\n"
+ " # Save the user entry point address in %edi.\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/ldso.c uClibc-git/ldso/ldso/ldso.c
+--- uClibc-0.9.33.2/ldso/ldso/ldso.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/ldso.c 2014-02-03 12:32:56.000000000 +0100
+@@ -64,7 +64,7 @@
+ bool _dl_verbose = true; /* On by default */
+ bool prelinked = false;
+ #endif
+-static int _dl_secure = 1; /* Are we dealing with setuid stuff? */
++int _dl_secure = 1; /* Are we dealing with setuid stuff? */
+
+ #ifdef __SUPPORT_LD_DEBUG__
+ char *_dl_debug = NULL;
+@@ -77,17 +77,11 @@
+ int _dl_debug_file = 2;
+ #endif
+
+-#if defined (__LDSO_STANDALONE_SUPPORT__) && defined (__sh__)
+-/* Not hidden, needed for standalone execution. */
+-/*
+- * FIXME: align dl_start for SH to other archs so that we can keep this symbol
+- * hidden and we don't need to handle in __uClibc_main
+- */
++#ifdef __DSBT__
++void **_dl_ldso_dsbt = NULL;
++#endif
+
+-unsigned long _dl_skip_args = 0;
+-#else
+ unsigned long attribute_hidden _dl_skip_args = 0;
+-#endif
+
+ const char *_dl_progname = UCLIBC_LDSO; /* The name of the executable being run */
+ #include "dl-startup.c"
+@@ -245,9 +239,9 @@
+
+ _dl_debug_early("mmapping more memory\n");
+ _dl_mmap_zero = _dl_malloc_addr = _dl_mmap((void *) 0, rounded_size,
+- PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_UNINITIALIZE, -1, 0);
++ PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_UNINITIALIZED, -1, 0);
+ if (_dl_mmap_check_error(_dl_mmap_zero)) {
+- _dl_dprintf(_dl_debug_file, "%s: mmap of a spare page failed!\n", _dl_progname);
++ _dl_dprintf(2, "%s: mmap of a spare page failed!\n", _dl_progname);
+ _dl_exit(20);
+ }
+ }
+@@ -464,9 +458,14 @@
+ _dl_progname = argv[0];
+ }
+
++#ifdef __DSBT__
++ _dl_ldso_dsbt = (void *)tpnt->dynamic_info[DT_DSBT_BASE_IDX];
++ _dl_ldso_dsbt[tpnt->dynamic_info[DT_DSBT_INDEX_IDX]] = _dl_ldso_dsbt;
++#endif
++
+ #ifndef __LDSO_STANDALONE_SUPPORT__
+ if (_start == (void *) auxvt[AT_ENTRY].a_un.a_val) {
+- _dl_dprintf(_dl_debug_file, "Standalone execution is not enabled\n");
++ _dl_dprintf(2, "Standalone execution is not enabled\n");
+ _dl_exit(1);
+ }
+ #endif
+@@ -504,15 +503,15 @@
+ const char *nextp;
+ _dl_secure = 1;
+
++#ifdef __LDSO_PRELOAD_ENV_SUPPORT__
++ _dl_preload = _dl_getenv("LD_PRELOAD", envp);
++#endif
+ nextp = unsecure_envvars;
+ do {
+ _dl_unsetenv (nextp, envp);
+ /* We could use rawmemchr but this need not be fast. */
+ nextp = _dl_strchr(nextp, '\0') + 1;
+ } while (*nextp != '\0');
+-#ifdef __LDSO_PRELOAD_ENV_SUPPORT__
+- _dl_preload = NULL;
+-#endif
+ #ifdef __LDSO_LD_LIBRARY_PATH__
+ _dl_library_path = NULL;
+ #endif
+@@ -580,7 +579,7 @@
+ */
+ app_tpnt = _dl_load_elf_shared_library(_dl_secure, &rpnt, _dl_progname);
+ if (!app_tpnt) {
+- _dl_dprintf(_dl_debug_file, "can't load '%s'\n", _dl_progname);
++ _dl_dprintf(2, "can't load '%s'\n", _dl_progname);
+ _dl_exit(16);
+ }
+ /*
+@@ -675,7 +674,7 @@
+ }
+ #else
+ if (app_tpnt->dynamic_info[DT_TEXTREL]) {
+- _dl_dprintf(_dl_debug_file, "Can't modify application's text section; use the GCC option -fPIE for position-independent executables.\n");
++ _dl_dprintf(2, "Can't modify application's text section; use the GCC option -fPIE for position-independent executables.\n");
+ _dl_exit(1);
+ }
+ #endif
+@@ -698,6 +697,11 @@
+ app_tpnt->mapaddr = app_mapaddr;
+ app_tpnt->rtld_flags = unlazy | RTLD_GLOBAL;
+ app_tpnt->usage_count++;
++#ifdef __DSBT__
++ _dl_ldso_dsbt[0] = app_tpnt->dsbt_table;
++ _dl_memcpy(app_tpnt->dsbt_table, _dl_ldso_dsbt,
++ app_tpnt->dsbt_size * sizeof(tpnt->dsbt_table[0]));
++#endif
+ lpnt = (unsigned long *) (app_tpnt->dynamic_info[DT_PLTGOT]);
+ #ifdef ALLOW_ZERO_PLTGOT
+ if (lpnt)
+@@ -733,7 +737,7 @@
+ _dl_debug_early("Found TLS header for application program\n");
+ break;
+ #else
+- _dl_dprintf(_dl_debug_file, "Program uses unsupported TLS data!\n");
++ _dl_dprintf(2, "Program uses unsupported TLS data!\n");
+ _dl_exit(1);
+ #endif
+ }
+@@ -747,7 +751,8 @@
+ * case the executable is actually an ET_DYN object.
+ */
+ if (app_tpnt->l_tls_initimage != NULL) {
+- unsigned int tmp = (unsigned int) app_tpnt->l_tls_initimage;
++ char *tmp attribute_unused =
++ (char *) app_tpnt->l_tls_initimage;
+ app_tpnt->l_tls_initimage =
+ (char *) app_tpnt->l_tls_initimage + app_tpnt->loadaddr;
+ _dl_debug_early("Relocated TLS initial image from %x to %x (size = %x)\n",
+@@ -823,7 +828,7 @@
+
+ #ifndef __LDSO_LDD_SUPPORT__
+ if (trace_loaded_objects) {
+- _dl_dprintf(_dl_debug_file, "Use the ldd provided by uClibc\n");
++ _dl_dprintf(2, "Use the ldd provided by uClibc\n");
+ _dl_exit(1);
+ }
+ #endif
+@@ -879,8 +884,9 @@
+ else
+ #endif
+ {
+- _dl_dprintf(_dl_debug_file, "%s: can't load " "library '%s'\n", _dl_progname, str);
+- _dl_exit(15);
++ _dl_dprintf(2, "%s: library '%s' "
++ "from LD_PRELOAD can't be preloaded: ignored.\n",
++ _dl_progname, str);
+ }
+ } else {
+ tpnt1->rtld_flags = unlazy | RTLD_GLOBAL;
+@@ -923,7 +929,7 @@
+ }
+
+ if ((fd = _dl_open(LDSO_PRELOAD, O_RDONLY, 0)) < 0) {
+- _dl_dprintf(_dl_debug_file, "%s: can't open file '%s'\n",
++ _dl_dprintf(2, "%s: can't open file '%s'\n",
+ _dl_progname, LDSO_PRELOAD);
+ break;
+ }
+@@ -932,7 +938,7 @@
+ PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
+ _dl_close(fd);
+ if (preload == (caddr_t) -1) {
+- _dl_dprintf(_dl_debug_file, "%s:%i: can't map '%s'\n",
++ _dl_dprintf(2, "%s:%i: can't map '%s'\n",
+ _dl_progname, __LINE__, LDSO_PRELOAD);
+ break;
+ }
+@@ -971,7 +977,7 @@
+ else
+ # endif
+ {
+- _dl_dprintf(_dl_debug_file, "%s: can't load library '%s'\n", _dl_progname, cp2);
++ _dl_dprintf(2, "%s: can't load library '%s'\n", _dl_progname, cp2);
+ _dl_exit(15);
+ }
+ } else {
+@@ -1032,7 +1038,7 @@
+ } else
+ #endif
+ {
+- _dl_dprintf(_dl_debug_file, "%s: can't load library '%s'\n", _dl_progname, lpntstr);
++ _dl_dprintf(2, "%s: can't load library '%s'\n", _dl_progname, lpntstr);
+ _dl_exit(16);
+ }
+ }
+diff -Nur uClibc-0.9.33.2/ldso/ldso/m68k/dl-startup.h uClibc-git/ldso/ldso/m68k/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/m68k/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/m68k/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -19,6 +19,7 @@
+ .text\n\
+ .globl _start\n\
+ .type _start,@function\n\
++ .hidden _start\n\
+ _start:\n\
+ move.l %sp, -(%sp)\n\
+ jbsr _dl_start\n\
+diff -Nur uClibc-0.9.33.2/ldso/ldso/m68k/elfinterp.c uClibc-git/ldso/ldso/m68k/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/m68k/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/m68k/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -241,8 +241,11 @@
+ _dl_memcpy ((void *) reloc_addr,
+ (void *) symbol_addr,
+ sym_ref.sym->st_size);
+- } else
++ }
++#if defined (__SUPPORT_LD_DEBUG__)
++ else
+ _dl_dprintf(_dl_debug_file, "no symbol_addr to copy !?\n");
++#endif
+ break;
+
+ default:
+diff -Nur uClibc-0.9.33.2/ldso/ldso/Makefile.in uClibc-git/ldso/ldso/Makefile.in
+--- uClibc-0.9.33.2/ldso/ldso/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -36,7 +36,7 @@
+ else
+ LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS_NOSTRIP) -Wl,-z,defs
+ endif
+-LDFLAGS-$(UCLIBC_LDSO_NAME).so += -Wl,-e,_start -Wl,-z,now -Wl,-Bsymbolic \
++LDFLAGS-$(UCLIBC_LDSO_NAME).so += -Wl,-e,$(SYMBOL_PREFIX)_start -Wl,-z,now -Wl,-Bsymbolic \
+ -Wl,--export-dynamic $(CFLAG_-Wl--sort-common) -Wl,--discard-locals \
+ $(CFLAG_-Wl--discard-all) -Wl,--no-undefined
+
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/dl-debug.h uClibc-git/ldso/ldso/metag/dl-debug.h
+--- uClibc-0.9.33.2/ldso/ldso/metag/dl-debug.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/dl-debug.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,33 @@
++/*
++ * Meta ELF shared library loader support.
++ *
++ * Program to load an elf binary on a linux system, and run it.
++ * References to symbols in sharable libraries can be resolved
++ * by either an ELF sharable library or a linux style of shared
++ * library.
++ *
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++static const char *_dl_reltypes_tab[] = {
++ [0] "R_METAG_HIADDR16", "R_METAG_LOADDR16", "R_METAG_ADDR32",
++ [3] "R_METAG_NONE", "R_METAG_RELBRANCH", "R_METAG_GETSETOFF",
++ [6] "R_METAG_REG32OP1", "R_METAG_REG32OP2", "R_METAG_REG32OP3",
++ [9] "R_METAG_REG16OP1", "R_METAG_REG16OP2", "R_METAG_REG16OP3",
++ [12] "R_METAG_REG32OP4", "R_METAG_HIOG", "R_METAG_LOOG",
++ [30] "R_METAG_GNU_VTINHERIT", "R_METAG_GNU_VTENTRY",
++ [32] "R_METAG_HI16_GOTOFF", "R_METAG_LO16_GOTOFF",
++ [34] "R_METAG_GETSET_GOTOFF", "R_METAG_GETSET_GOT",
++ [36] "R_METAG_HI16_GOTPC", "R_METAG_LO16_GOTPC",
++ [38] "R_METAG_HI16_PLT", "R_METAG_LO16_PLT",
++ [40] "R_METAG_RELBRANCH_PLT", "R_METAG_GOTOFF",
++ [42] "R_METAG_PLT", "R_METAG_COPY", "R_METAG_JMP_SLOT",
++ [45] "R_METAG_RELATIVE", "R_METAG_GLOB_DAT", "R_METAG_TLS_GD",
++ [48] "R_METAG_TLS_LDM", "R_METAG_TLS_LDO_HI16", "R_METAG_TLS_LDO_LO16",
++ [51] "R_METAG_TLS_LDO", "R_METAG_TLS_IE", "R_METAG_TLS_IENONPIC",
++ [54] "R_METAG_TLS_IENONPIC_HI16", "R_METAG_TLS_IENONPIC_LO16",
++ [56] "R_METAG_TLS_TPOFF", "R_METAG_TLS_DTPMOD", "R_METAG_TLS_DTPOFF",
++ [59] "R_METAG_TLS_LE", "R_METAG_TLS_LE_HI16", "R_METAG_TLS_LE_LO16"
++};
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/dl-inlines.h uClibc-git/ldso/ldso/metag/dl-inlines.h
+--- uClibc-0.9.33.2/ldso/ldso/metag/dl-inlines.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/dl-inlines.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,39 @@
++/*
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++static __always_inline int
++__dl_is_special_segment (Elf32_Ehdr *epnt,
++ Elf32_Phdr *ppnt)
++{
++ if (ppnt->p_type != PT_LOAD &&
++ ppnt->p_type != PT_DYNAMIC)
++ return 0;
++
++ if (ppnt->p_vaddr >= 0x80000000 &&
++ ppnt->p_vaddr < 0x82060000)
++ return 1;
++
++ if (ppnt->p_vaddr >= 0xe0200000 &&
++ ppnt->p_vaddr < 0xe0260000)
++ return 1;
++
++ return 0;
++}
++
++static __always_inline char *
++__dl_map_segment (Elf32_Ehdr *epnt,
++ Elf32_Phdr *ppnt,
++ int infile,
++ int flags)
++{
++ char *addr = (char *)ppnt->p_vaddr;
++
++ if (_DL_PREAD (infile, addr, ppnt->p_filesz, ppnt->p_offset) != ppnt->p_filesz) {
++ return 0;
++ }
++
++ return addr;
++}
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/dl-startup.h uClibc-git/ldso/ldso/metag/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/metag/dl-startup.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,68 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/*
++ * This code fixes the stack pointer so that the dynamic linker
++ * can find argc, argv and auxvt (Auxillary Vector Table).
++ */
++
++__asm__ (
++" .text\n"
++" .global __start\n"
++" .type __start,@function\n"
++" .hidden __start\n"
++"_start:\n"
++"__start:\n"
++" MSETL [A0StP++],D0Ar4,D0Ar2\n"
++" MOV D1Ar1,D0Ar2\n"
++" CALLR D1RtP,__dl_start\n"
++" GETL D0Ar2,D1Ar1,[A0StP+#-(1*8)]\n"
++" GETL D0Ar4,D1Ar3,[A0StP+#-(2*8)]\n"
++" ADDT A1LbP,CPC1,#HI(__GLOBAL_OFFSET_TABLE__)\n"
++" ADD A1LbP,A1LbP,#LO(__GLOBAL_OFFSET_TABLE__+4)\n"
++" ADDT A1LbP,A1LbP,#HI(__dl_fini@GOTOFF)\n"
++" ADD A1LbP,A1LbP,#LO(__dl_fini@GOTOFF)\n"
++" MOV D0Ar4, A1LbP\n"
++" SUB A0StP,A0StP,#(2*8)\n"
++" MOV PC,D0Re0\n"
++" .size __start,.-__start\n"
++" .previous\n"
++);
++
++
++/*
++ * Get a pointer to the argv array. On many platforms this can be just
++ * the address if the first argument, on other platforms we need to
++ * do something a little more subtle here.
++ */
++
++#define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long *) ARGS))
++
++
++/* Handle relocation of the symbols in the dynamic loader. */
++static inline
++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
++ unsigned long symbol_addr, unsigned long load_addr, Elf32_Sym *symtab)
++{
++ switch (ELF32_R_TYPE(rpnt->r_info)) {
++ case R_METAG_GLOB_DAT:
++ case R_METAG_JMP_SLOT:
++ case R_METAG_ADDR32:
++ *reloc_addr = symbol_addr;
++ break;
++ case R_METAG_RELATIVE:
++ *reloc_addr = load_addr + rpnt->r_addend;
++ break;
++ case R_METAG_RELBRANCH:
++ *reloc_addr = symbol_addr + rpnt->r_addend - *reloc_addr - 4;
++ break;
++ case R_METAG_NONE:
++ break;
++ default:
++ _dl_exit(1);
++ break;
++ }
++}
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/dl-syscalls.h uClibc-git/ldso/ldso/metag/dl-syscalls.h
+--- uClibc-0.9.33.2/ldso/ldso/metag/dl-syscalls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/dl-syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,6 @@
++/* stub for arch-specific syscall issues
++ *
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/dl-sysdep.h uClibc-git/ldso/ldso/metag/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/metag/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,121 @@
++/*
++ * Meta can never use Elf32_Rel relocations.
++ *
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#define ELF_USES_RELOCA
++
++#include <elf.h>
++
++/* Initialization sequence for the GOT. */
++#define INIT_GOT(GOT_BASE,MODULE) \
++{ \
++ GOT_BASE[1] = (unsigned long) MODULE; \
++ GOT_BASE[2] = (unsigned long) _dl_linux_resolve; \
++}
++
++/* Maximum unsigned GOT [GS]ETD offset size, ie. 2^(11+2). */
++#define GOT_REG_OFFSET 0x2000
++
++/* Defined some magic numbers that this ld.so should accept. */
++#define MAGIC1 EM_METAG
++#undef MAGIC2
++#define ELF_TARGET "META"
++
++/* Need bootstrap relocations */
++#define ARCH_NEEDS_BOOTSTRAP_RELOCS
++
++struct elf_resolve;
++extern unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry);
++
++/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
++ TLS variable, so undefined references should not be allowed to
++ define the value.
++
++ ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
++ of the main executable's symbols, as for a COPY reloc. */
++#define elf_machine_type_class(type) \
++ ((((type) == R_METAG_JMP_SLOT || (type) == R_METAG_TLS_DTPMOD \
++ || (type) == R_METAG_TLS_DTPOFF || (type) == R_METAG_TLS_TPOFF) \
++ * ELF_RTYPE_CLASS_PLT) \
++ | (((type) == R_METAG_COPY) * ELF_RTYPE_CLASS_COPY))
++
++static inline Elf32_Addr
++elf_machine_dynamic(Elf32_Ehdr *header)
++{
++ Elf32_Addr *got;
++
++ __asm__ ("MOV %0,A1LbP" : "=r" (got));
++
++ if (header->e_ident[EI_ABIVERSION] >= 1) {
++ /* GOT register offset was introduced with ABI v1 */
++ got = (Elf32_Addr*)((void*)got - GOT_REG_OFFSET);
++ }
++ return *got;
++}
++
++#define DL_BOOT_COMPUTE_GOT(GOT) \
++ ((GOT) = elf_machine_dynamic(header))
++
++static inline Elf32_Addr
++elf_machine_load_address(void)
++{
++ Elf32_Addr addr;
++ __asm__ ("MOV D1Ar1,A1LbP\n"
++ "ADDT D1Ar1,D1Ar1,#HI(__dl_start@GOTOFF)\n"
++ "ADD D1Ar1,D1Ar1,#LO(__dl_start@GOTOFF)\n"
++ "ADDT D0Ar2,D0Ar2,#HI(__dl_start_addr@GOTOFF)\n"
++ "ADD D0Ar2,D0Ar2,#LO(__dl_start_addr@GOTOFF)\n"
++ "GETD D0Ar2,[D0Ar2]\n"
++ "SUB %0,D1Ar1,D0Ar2\n"
++ ".section .data\n"
++ "__dl_start_addr: .long __dl_start\n"
++ ".previous\n"
++ : "=d" (addr) : : "D1Ar1", "D0Ar2");
++ return addr;
++}
++
++static inline void
++elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,
++ Elf32_Word relative_count)
++{
++ Elf32_Rela *rpnt = (void *)rel_addr;
++
++ --rpnt;
++ do {
++ Elf32_Addr *const reloc_addr =
++ (void *)(load_off + (++rpnt)->r_offset);
++
++ *reloc_addr = load_off + rpnt->r_addend;
++ } while (--relative_count);
++}
++
++#define DL_MALLOC_ALIGN 8
++
++#define HAVE_DL_INLINES_H
++
++#define DL_IS_SPECIAL_SEGMENT(EPNT, PPNT) \
++ __dl_is_special_segment(EPNT, PPNT)
++#define DL_MAP_SEGMENT(EPNT, PPNT, INFILE, FLAGS) \
++ __dl_map_segment (EPNT, PPNT, INFILE, FLAGS)
++
++#define DL_CHECK_LIB_TYPE(epnt, piclib, _dl_progname, libname) \
++do \
++{ \
++ ElfW(Phdr) *ppnt_; \
++ char *header_ = (char *)epnt; \
++ ppnt_ = (ElfW(Phdr) *)(intptr_t) & header_[epnt->e_phoff]; \
++ if (ppnt_->p_vaddr >= 0x80000000 && \
++ ppnt_->p_vaddr < 0x82060000) \
++ (piclib) = 2; \
++ if (ppnt_->p_vaddr >= 0xe0200000 && \
++ ppnt_->p_vaddr < 0xe0260000) \
++ (piclib) = 2; \
++} \
++while (0)
++
++#define _DL_PREAD(FD, BUF, SIZE, OFFSET) \
++ (_dl_pread((FD), (BUF), (SIZE), (OFFSET)))
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/elfinterp.c uClibc-git/ldso/ldso/metag/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/metag/elfinterp.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,318 @@
++/*
++ * Meta ELF shared library loader support.
++ *
++ * Program to load an elf binary on a linux system, and run it.
++ * References to symbols in sharable libraries can be resolved
++ * by either an ELF sharable library or a linux style of shared
++ * library.
++ *
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include "ldso.h"
++
++/* Defined in resolve.S. */
++extern int _dl_linux_resolve(void);
++
++static inline unsigned long __get_unaligned_reloc(unsigned long *addr)
++{
++ char *rel_addr = (char *)addr;
++ unsigned long val;
++
++ val = *rel_addr++ & 0xff;
++ val |= (*rel_addr++ << 8) & 0x0000ff00;
++ val |= (*rel_addr++ << 16) & 0x00ff0000;
++ val |= (*rel_addr++ << 24) & 0xff000000;
++
++ return val;
++}
++
++static inline void __put_unaligned_reloc(unsigned long *addr,
++ unsigned long val)
++{
++ char *rel_addr = (char *)addr;
++
++ *rel_addr++ = (val & 0x000000ff);
++ *rel_addr++ = ((val & 0x0000ff00) >> 8);
++ *rel_addr++ = ((val & 0x00ff0000) >> 16);
++ *rel_addr++ = ((val & 0xff000000) >> 24);
++}
++
++unsigned long
++_dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
++{
++ int symtab_index;
++ char *strtab;
++ char *symname;
++ char *new_addr;
++ char *rel_addr;
++ char **got_addr;
++ ElfW(Sym) *symtab;
++ ELF_RELOC *this_reloc;
++ unsigned long instr_addr;
++
++ rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
++
++ this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
++ symtab_index = ELF_R_SYM(this_reloc->r_info);
++
++ symtab = (ElfW(Sym) *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB];
++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
++ symname = strtab + symtab[symtab_index].st_name;
++
++ /* Address of the jump instruction to fix up. */
++ instr_addr = ((unsigned long)this_reloc->r_offset +
++ (unsigned long)tpnt->loadaddr);
++ got_addr = (char **)instr_addr;
++
++ /* Get the address of the GOT entry. */
++ new_addr = _dl_find_hash(symname, &_dl_loaded_modules->symbol_scope, tpnt,
++ ELF_RTYPE_CLASS_PLT, NULL);
++ if (unlikely(!new_addr)) {
++ _dl_dprintf(2, "%s: Can't resolve symbol '%s'\n",
++ _dl_progname, symname);
++ _dl_exit(1);
++ }
++
++#if defined (__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_bindings) {
++ _dl_dprintf(_dl_debug_file, "\nresolve function: %s", symname);
++ if (_dl_debug_detail)
++ _dl_dprintf(_dl_debug_file,
++ "\n\tpatched: %x ==> %x @ %x\n",
++ *got_addr, new_addr, got_addr);
++ }
++ if (!_dl_debug_nofixups) {
++ *got_addr = new_addr;
++ }
++#else
++ *got_addr = new_addr;
++#endif
++
++ return (unsigned long)new_addr;
++}
++
++static int
++_dl_parse(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ unsigned long rel_addr, unsigned long rel_size,
++ int (*reloc_fnc)(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab))
++{
++ int symtab_index;
++ unsigned int i;
++ char *strtab;
++ ElfW(Sym) *symtab;
++ ELF_RELOC *rpnt;
++
++ /* Parse the relocation information. */
++ rpnt = (ELF_RELOC *)(intptr_t)rel_addr;
++ rel_size /= sizeof(ELF_RELOC);
++
++ symtab = (ElfW(Sym) *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB];
++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
++
++ for (i = 0; i < rel_size; i++, rpnt++) {
++ int res;
++
++ symtab_index = ELF_R_SYM(rpnt->r_info);
++
++ debug_sym(symtab, strtab, symtab_index);
++ debug_reloc(symtab, strtab, rpnt);
++
++ /* Pass over to actual relocation function. */
++ res = reloc_fnc(tpnt, scope, rpnt, symtab, strtab);
++
++ if (res == 0)
++ continue;
++
++ _dl_dprintf(2, "\n%s: ", _dl_progname);
++
++ if (symtab_index)
++ _dl_dprintf(2, "symbol '%s': ",
++ strtab + symtab[symtab_index].st_name);
++
++ if (unlikely(res < 0)) {
++ int reloc_type = ELF_R_TYPE(rpnt->r_info);
++
++#if defined (__SUPPORT_LD_DEBUG__)
++ _dl_dprintf(2, "can't handle reloc type %s\n",
++ _dl_reltypes(reloc_type));
++#else
++ _dl_dprintf(2, "can't handle reloc type %x\n",
++ reloc_type);
++#endif
++ _dl_exit(-res);
++ } else if (unlikely(res > 0)) {
++ _dl_dprintf(2, "can't resolve symbol\n");
++ return res;
++ }
++ }
++
++ return 0;
++}
++
++static int
++_dl_do_reloc(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab)
++{
++ int reloc_type;
++ int symtab_index;
++ char *symname = NULL;
++ unsigned long *reloc_addr;
++ unsigned long symbol_addr;
++#if defined (__SUPPORT_LD_DEBUG__)
++ unsigned long old_val = 0;
++#endif
++ struct elf_resolve *tls_tpnt = NULL;
++ struct symbol_ref sym_ref;
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF_R_TYPE(rpnt->r_info);
++ symtab_index = ELF_R_SYM(rpnt->r_info);
++ symbol_addr = 0;
++ sym_ref.sym = &symtab[symtab_index];
++ sym_ref.tpnt = NULL;
++
++ if (symtab_index) {
++ symname = strtab + symtab[symtab_index].st_name;
++ symbol_addr = (unsigned long)_dl_find_hash(symname, scope, tpnt,
++ elf_machine_type_class(reloc_type), &sym_ref);
++
++ if (!symbol_addr
++ && ELF_ST_TYPE(symtab[symtab_index].st_info) != STT_TLS
++ && ELF_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) {
++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n",
++ _dl_progname, symname);
++ return 1;
++ };
++ if (_dl_trace_prelink) {
++ _dl_debug_lookup(symname, tpnt, &symtab[symtab_index],
++ &sym_ref, elf_machine_type_class(reloc_type));
++ }
++ tls_tpnt = sym_ref.tpnt;
++ }
++
++#if defined (__SUPPORT_LD_DEBUG__)
++ if (reloc_type != R_METAG_NONE)
++ old_val = __get_unaligned_reloc(reloc_addr);
++#endif
++
++#if defined USE_TLS && USE_TLS
++ /* In case of a TLS reloc, tls_tpnt NULL means we have an 'anonymous'
++ symbol. This is the case for a static tls variable, so the lookup
++ module is just that one is referencing the tls variable. */
++ if (!tls_tpnt)
++ tls_tpnt = tpnt;
++#endif
++ switch (reloc_type) {
++ case R_METAG_NONE:
++ break;
++ case R_METAG_GLOB_DAT:
++ case R_METAG_JMP_SLOT:
++ case R_METAG_ADDR32:
++ __put_unaligned_reloc(reloc_addr,
++ symbol_addr + rpnt->r_addend);
++ break;
++ case R_METAG_COPY:
++#if defined (__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_move)
++ _dl_dprintf(_dl_debug_file,
++ "\t%s move %d bytes from %x to %x\n",
++ symname, symtab[symtab_index].st_size,
++ symbol_addr + rpnt->r_addend,
++ reloc_addr);
++#endif
++
++ _dl_memcpy((char *)reloc_addr,
++ (char *)symbol_addr + rpnt->r_addend,
++ symtab[symtab_index].st_size);
++ break;
++ case R_METAG_RELATIVE:
++ __put_unaligned_reloc(reloc_addr,
++ (unsigned long)tpnt->loadaddr +
++ rpnt->r_addend);
++ break;
++#if defined USE_TLS && USE_TLS
++ case R_METAG_TLS_DTPMOD:
++ *reloc_addr = tls_tpnt->l_tls_modid;
++ break;
++ case R_METAG_TLS_DTPOFF:
++ *reloc_addr = symbol_addr;
++ break;
++ case R_METAG_TLS_TPOFF:
++ CHECK_STATIC_TLS ((struct link_map *) tls_tpnt);
++ *reloc_addr = tls_tpnt->l_tls_offset + symbol_addr + rpnt->r_addend;
++ break;
++#endif
++ default:
++ return -1; /* Calls _dl_exit(1). */
++ }
++
++#if defined (__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_reloc && _dl_debug_detail && reloc_type != R_METAG_NONE) {
++ unsigned long new_val = __get_unaligned_reloc(reloc_addr);
++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n",
++ old_val, new_val, reloc_addr);
++ }
++#endif
++
++ return 0;
++}
++
++static int
++_dl_do_lazy_reloc(struct elf_resolve *tpnt, struct r_scope_elem *scope,
++ ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab)
++{
++ int reloc_type;
++ unsigned long *reloc_addr;
++#if defined (__SUPPORT_LD_DEBUG__)
++ unsigned long old_val;
++#endif
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF_R_TYPE(rpnt->r_info);
++
++#if defined (__SUPPORT_LD_DEBUG__)
++ old_val = *reloc_addr;
++#endif
++
++ switch (reloc_type) {
++ case R_METAG_NONE:
++ break;
++ case R_METAG_JMP_SLOT:
++ *reloc_addr += (unsigned long)tpnt->loadaddr;
++ break;
++ default:
++ return -1; /* Calls _dl_exit(1). */
++ }
++
++#if defined (__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_reloc && _dl_debug_detail)
++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n",
++ old_val, *reloc_addr, reloc_addr);
++#endif
++
++ return 0;
++}
++
++/* External interface to the generic part of the dynamic linker. */
++
++void
++_dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ _dl_parse(rpnt->dyn, NULL, rel_addr, rel_size, _dl_do_lazy_reloc);
++}
++
++int
++_dl_parse_relocation_information(struct dyn_elf *rpnt,
++ struct r_scope_elem *scope,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ return _dl_parse(rpnt->dyn, scope, rel_addr,
++ rel_size, _dl_do_reloc);
++}
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/metag_load_tp.S uClibc-git/ldso/ldso/metag/metag_load_tp.S
+--- uClibc-0.9.33.2/ldso/ldso/metag/metag_load_tp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/metag_load_tp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,20 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++#include <features.h>
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++
++#include <sysdep.h>
++
++ .text
++ .global ___metag_load_tp
++ .type ___metag_load_tp,@function
++
++___metag_load_tp:
++ MOVT D1Ar1,#HI(0x6ffff000)
++ JUMP D1Ar1,#LO(0x6ffff000)
++ .size ___metag_load_tp,.-___metag_load_tp
++
++#endif /* __UCLIBC_HAS_THREADS_NATIVE__ */
+diff -Nur uClibc-0.9.33.2/ldso/ldso/metag/resolve.S uClibc-git/ldso/ldso/metag/resolve.S
+--- uClibc-0.9.33.2/ldso/ldso/metag/resolve.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/ldso/ldso/metag/resolve.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,51 @@
++/*
++ * Meta dynamic resolver
++ *
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ * This function is _not_ called directly. It is jumped to (so no return
++ * address is on the stack) when attempting to use a symbol that has not yet
++ * been resolved. The first time a jump symbol (such as a function call inside
++ * a shared library) is used (before it gets resolved) it will jump here to
++ * _dl_linux_resolve. When we get called the stack looks like this:
++ * reloc_entry
++ * tpnt
++ *
++ * This function saves all the registers then makes the function call
++ * _dl_linux_resolver(tpnt, reloc_entry). _dl_linux_resolver() figures out
++ * where the jump symbol is _really_ supposed to have jumped to and returns
++ * that to us. Once we have that, we overwrite tpnt with this fixed up
++ * address. We then clean up after ourselves, put all the registers back how we
++ * found them, then we jump to the fixed up address, which is where the jump
++ * symbol that got us here really wanted to jump to in the first place.
++ * -Erik Andersen
++ */
++
++ .text
++ .global __dl_linux_resolve
++ .type __dl_linux_resolve,@function
++
++__dl_linux_resolve:
++ !! Save registers on the stack. Do we need to save any more here?
++ MSETL [A0StP++],D0Ar6,D0Ar4,D0Ar2,D0FrT
++ SETL [A0StP++],A0FrP,A1LbP
++ !! Get the args for _dl_linux_resolver off the stack
++ GETL D0Re0,D1Re0,[A0StP+#-(6*8)]
++ GETD D1Ar1,[D0Re0]
++ MOV D0Ar2,D1Re0
++ !! Multiply plt_index by sizeof(Elf32_Rela)
++ MULW D0Ar2,D0Ar2,#12
++ !! Call the resolver
++ CALLR D1RtP,__dl_linux_resolver
++ !! Restore the registers from the stack
++ SUB A0.2,A0StP,#(1*8)
++ GETL A0FrP,A1LbP,[A0.2]
++ SUB A0.2,A0.2,#(4*8)
++ MGETL D0Ar6,D0Ar4,D0Ar2,D0FrT,[A0.2]
++ !! Also take into account args pushed by PLT
++ SUB A0StP,A0StP,#(6*8)
++ !! Jump to the resolved address
++ MOV PC,D0Re0
++ .size __dl_linux_resolve, .-__dl_linux_resolve
+diff -Nur uClibc-0.9.33.2/ldso/ldso/microblaze/dl-startup.h uClibc-git/ldso/ldso/microblaze/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/microblaze/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/microblaze/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,14 +12,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ __asm__ ("\
+ .text\n\
+ .globl _start\n\
+ .type _start,@function\n\
++ .hidden _start\n\
+ _start:\n\
+ addk r5,r0,r1\n\
+ addk r3,r0,r0\n\
+diff -Nur uClibc-0.9.33.2/ldso/ldso/microblaze/dl-sysdep.h uClibc-git/ldso/ldso/microblaze/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/microblaze/dl-sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/microblaze/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Use reloca */
+ #define ELF_USES_RELOCA
+diff -Nur uClibc-0.9.33.2/ldso/ldso/microblaze/resolve.S uClibc-git/ldso/ldso/microblaze/resolve.S
+--- uClibc-0.9.33.2/ldso/ldso/microblaze/resolve.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/microblaze/resolve.S 2014-02-03 12:32:56.000000000 +0100
+@@ -18,9 +18,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .text
+ .align 4
+diff -Nur uClibc-0.9.33.2/ldso/ldso/mips/dl-startup.h uClibc-git/ldso/ldso/mips/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/mips/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/mips/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,6 +12,7 @@
+ " .globl _start\n"
+ " .ent _start\n"
+ " .type _start,@function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " .set noreorder\n"
+ " move $25, $31\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/mips/elfinterp.c uClibc-git/ldso/ldso/mips/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/mips/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/mips/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -259,11 +259,11 @@
+ case R_MIPS_TLS_TPREL32:
+ case R_MIPS_TLS_TPREL64:
+ CHECK_STATIC_TLS((struct link_map *)tls_tpnt);
+- *(ElfW(Word) *)reloc_addr +=
++ *(ElfW(Addr) *)reloc_addr +=
+ TLS_TPREL_VALUE (tls_tpnt, symbol_addr);
+ #ifdef __SUPPORT_LD_DEBUG__
+ _dl_dprintf(2, "TLS_TPREL : %s, %x, %x\n",
+- symname, old_val, *((unsigned int *)reloc_addr));
++ symname, old_val, *((unsigned long *)reloc_addr));
+ #endif
+ break;
+ }
+diff -Nur uClibc-0.9.33.2/ldso/ldso/mips/README uClibc-git/ldso/ldso/mips/README
+--- uClibc-0.9.33.2/ldso/ldso/mips/README 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/mips/README 2014-02-03 12:32:56.000000000 +0100
+@@ -13,7 +13,7 @@
+ elfinterp.c
+ -----------
+ Contains the runtime resolver code taken from the function
+-'__dl_runtime_resolve' in 'sysdeps/mips/dl-machine.h'. Also
++'__dl_runtime_resolve' in 'sysdeps/mips/dl-trampoline.h'. Also
+ contains the function to perform relocations for objects
+ other than the linker itself. The code was taken from the
+ function 'elf_machine_rel' in 'sysdeps/mips/dl-machine.h'.
+@@ -47,6 +47,6 @@
+ ---------
+ Contains the low-level assembly code for the dynamic runtime
+ resolver. The code is taken from the assembly code function
+-'_dl_runtime_resolve' in the file 'sysdeps/mips/dl-machine.h'.
++'_dl_runtime_resolve' in the file 'sysdeps/mips/dl-trampoline.h'.
+ The code looks a bit different since we only need to pass the
+ symbol index and the old GP register.
+diff -Nur uClibc-0.9.33.2/ldso/ldso/powerpc/dl-startup.h uClibc-git/ldso/ldso/powerpc/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/powerpc/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/powerpc/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -8,6 +8,7 @@
+ " .text\n"
+ " .globl _start\n"
+ " .type _start,@function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " mr 3,1\n" /* Pass SP to _dl_start in r3 */
+ " li 0,0\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/powerpc/elfinterp.c uClibc-git/ldso/ldso/powerpc/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/powerpc/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/powerpc/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -234,12 +234,12 @@
+ case R_PPC_ADDR32:
+ case R_PPC_GLOB_DAT:
+ *reloc_addr = finaladdr;
+- goto out_nocode; /* No code code modified */
++ goto out_nocode; /* No code modified */
+ case R_PPC_JMP_SLOT:
+ {
+ if (tpnt->dynamic_info[DT_PPC_GOT_IDX] != 0) {
+ *reloc_addr = finaladdr;
+- goto out_nocode; /* No code code modified */
++ goto out_nocode; /* No code modified */
+ } else {
+ Elf32_Sword delta = finaladdr - (Elf32_Word)reloc_addr;
+ if (delta<<6>>6 == delta) {
+@@ -275,7 +275,7 @@
+ symbol_addr, reloc_addr);
+ #endif
+ _dl_memcpy((char *) reloc_addr, (char *) finaladdr, sym_ref.sym->st_size);
+- goto out_nocode; /* No code code modified */
++ goto out_nocode; /* No code modified */
+ case R_PPC_ADDR16_HA:
+ finaladdr += 0x8000; /* fall through. */
+ case R_PPC_ADDR16_HI:
+@@ -314,7 +314,7 @@
+ return -1;
+ #endif
+ case R_PPC_NONE:
+- goto out_nocode; /* No code code modified */
++ goto out_nocode; /* No code modified */
+ default:
+ _dl_dprintf(2, "%s: can't handle reloc type ", _dl_progname);
+ #if defined (__SUPPORT_LD_DEBUG__)
+diff -Nur uClibc-0.9.33.2/ldso/ldso/sh/dl-startup.h uClibc-git/ldso/ldso/sh/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/sh/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/sh/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -6,6 +6,7 @@
+ " .text\n"
+ " .globl _start\n"
+ " .type _start,@function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " mov r15, r4\n"
+ " mov.l .L_dl_start, r0\n"
+@@ -16,12 +17,22 @@
+ " mov.l .L_got, r12 ! Load the GOT on r12\n"
+ " mova .L_got, r0\n"
+ " add r0, r12\n"
++ " mov.l .L_dl_skip_args,r0\n"
++ " mov.l @(r0,r12),r0\n"
++ " mov.l @r0,r0\n"
++ " mov.l @r15,r5 ! Get the original argument count\n"
++ " sub r0,r5 ! Subtract _dl_skip_args from it\n"
++ " shll2 r0\n"
++ " add r0,r15 ! Adjust the stack pointer to skip _dl_skip_args words\n"
++ " mov.l r5,@r15 ! Store back the modified argument count\n"
+ " mov.l .L_dl_fini, r0\n"
+ " mov.l @(r0,r12), r4 ! Pass the finalizer in r4\n"
+ " jmp @r8\n"
+ " nop\n"
+ ".L_dl_start:\n"
+ " .long _dl_start-.jmp_loc\n"
++ ".L_dl_skip_args:\n"
++ " .long _dl_skip_args@GOT\n"
+ ".L_dl_fini:\n"
+ " .long _dl_fini@GOT\n"
+ ".L_got:\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/sh/elfinterp.c uClibc-git/ldso/ldso/sh/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/sh/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/sh/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -160,7 +160,9 @@
+ unsigned long old_val;
+ #endif
+
++#if defined USE_TLS && USE_TLS
+ struct elf_resolve *tls_tpnt = NULL;
++#endif
+ struct symbol_ref sym_ref;
+
+ reloc_addr = (unsigned long *)(intptr_t) (tpnt->loadaddr + (unsigned long) rpnt->r_offset);
+@@ -193,7 +195,9 @@
+ _dl_debug_lookup (symname, tpnt, &symtab[symtab_index],
+ &sym_ref, elf_machine_type_class(reloc_type));
+ }
++#if defined USE_TLS && USE_TLS
+ tls_tpnt = sym_ref.tpnt;
++#endif
+ }
+
+ #if defined (__SUPPORT_LD_DEBUG__)
+diff -Nur uClibc-0.9.33.2/ldso/ldso/sh64/dl-startup.h uClibc-git/ldso/ldso/sh64/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/sh64/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/sh64/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -7,6 +7,7 @@
+ " .section .text..SHmedia32,\"ax\"\n" \
+ " .globl _start\n" \
+ " .type _start, @function\n" \
++" .hidden _start\n" \
+ " .align 5\n" \
+ "_start:\n" \
+ " ! Set r12 to point to GOT\n" \
+diff -Nur uClibc-0.9.33.2/ldso/ldso/sparc/dl-startup.h uClibc-git/ldso/ldso/sparc/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/sparc/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/sparc/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -8,6 +8,7 @@
+ .text\n\
+ .global _start\n\
+ .type _start,%function\n\
++ .hidden _start\n\
+ .align 32\n\
+ .register %g2, #scratch\n\
+ _start:\n\
+diff -Nur uClibc-0.9.33.2/ldso/ldso/sparc/elfinterp.c uClibc-git/ldso/ldso/sparc/elfinterp.c
+--- uClibc-0.9.33.2/ldso/ldso/sparc/elfinterp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/sparc/elfinterp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -275,8 +275,11 @@
+ _dl_memcpy((char *)reloc_addr,
+ (char *)symbol_addr,
+ sym_ref.sym->st_size);
+- } else
++ }
++#if defined (__SUPPORT_LD_DEBUG__)
++ else
+ _dl_dprintf(_dl_debug_file, "no symbol_addr to copy !?\n");
++#endif
+ break;
+ #if defined USE_TLS && USE_TLS
+ case R_SPARC_TLS_DTPMOD32:
+diff -Nur uClibc-0.9.33.2/ldso/ldso/x86_64/dl-startup.h uClibc-git/ldso/ldso/x86_64/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/x86_64/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/x86_64/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,7 @@
+ " .text\n"
+ " .global _start\n"
+ " .type _start,%function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " movq %rsp, %rdi\n"
+ " call _dl_start\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/x86_64/dl-sysdep.h uClibc-git/ldso/ldso/x86_64/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/x86_64/dl-sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/x86_64/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define this if the system uses RELOCA. */
+ #define ELF_USES_RELOCA
+diff -Nur uClibc-0.9.33.2/ldso/ldso/xtensa/dl-startup.h uClibc-git/ldso/ldso/xtensa/dl-startup.h
+--- uClibc-0.9.33.2/ldso/ldso/xtensa/dl-startup.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/xtensa/dl-startup.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,6 +13,7 @@
+ " .align 4\n"
+ " .global _start\n"
+ " .type _start, @function\n"
++ " .hidden _start\n"
+ "_start:\n"
+ " # Compute load offset in a2: the GOT has not yet been relocated\n"
+ " # but the entries for local symbols contain the relative offsets\n"
+diff -Nur uClibc-0.9.33.2/ldso/ldso/xtensa/dl-sysdep.h uClibc-git/ldso/ldso/xtensa/dl-sysdep.h
+--- uClibc-0.9.33.2/ldso/ldso/xtensa/dl-sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/xtensa/dl-sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define this if the system uses RELOCA. */
+ #define ELF_USES_RELOCA
+diff -Nur uClibc-0.9.33.2/ldso/ldso/xtensa/resolve.S uClibc-git/ldso/ldso/xtensa/resolve.S
+--- uClibc-0.9.33.2/ldso/ldso/xtensa/resolve.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/ldso/xtensa/resolve.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define MIN_FRAME_SIZE 32
+
+diff -Nur uClibc-0.9.33.2/ldso/libdl/libdl.c uClibc-git/ldso/libdl/libdl.c
+--- uClibc-0.9.33.2/ldso/libdl/libdl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/libdl/libdl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -32,7 +32,7 @@
+
+ #include <ldso.h>
+ #include <stdio.h>
+-#include <string.h> /* Needed for 'strstr' prototype' */
++#include <string.h>
+ #include <stdbool.h>
+ #include <bits/uClibc_mutex.h>
+
+@@ -42,6 +42,7 @@
+
+ #if defined(USE_TLS) && USE_TLS
+ #include <ldsodefs.h>
++#include <dl-tls.h>
+ extern void _dl_add_to_slotinfo(struct link_map *l);
+ #endif
+
+@@ -51,7 +52,6 @@
+
+ #ifdef SHARED
+ # if defined(USE_TLS) && USE_TLS
+-# include <dl-tls.h>
+ extern struct link_map *_dl_update_slotinfo(unsigned long int req_modid);
+ # endif
+
+@@ -269,7 +269,7 @@
+ #endif
+
+ #ifndef __LDSO_NO_CLEANUP__
+-void dl_cleanup(void) __attribute__ ((destructor));
++void dl_cleanup(void) attribute_hidden __attribute__ ((destructor));
+ void dl_cleanup(void)
+ {
+ struct dyn_elf *h, *n;
+@@ -296,11 +296,10 @@
+ return p - list;
+ }
+
+-static void *do_dlopen(const char *libname, int flag)
++static void *do_dlopen(const char *libname, int flag, ElfW(Addr) from)
+ {
+ struct elf_resolve *tpnt, *tfrom;
+ struct dyn_elf *dyn_chain, *rpnt = NULL, *dyn_ptr, *relro_ptr, *handle;
+- ElfW(Addr) from;
+ struct elf_resolve *tpnt1;
+ void (*dl_brk) (void);
+ int now_flag;
+@@ -309,7 +308,9 @@
+ struct elf_resolve **init_fini_list;
+ static bool _dl_init;
+ struct elf_resolve **local_scope;
++#ifdef SHARED
+ struct r_scope_elem *ls;
++#endif
+ #if defined(USE_TLS) && USE_TLS
+ bool any_tls = false;
+ #endif
+@@ -320,8 +321,6 @@
+ return NULL;
+ }
+
+- from = (ElfW(Addr)) __builtin_return_address(0);
+-
+ if (!_dl_init) {
+ _dl_init = true;
+ _dl_malloc_function = malloc;
+@@ -335,7 +334,7 @@
+ # ifdef __SUPPORT_LD_DEBUG__
+ _dl_debug = getenv("LD_DEBUG");
+ if (_dl_debug) {
+- if (_dl_strstr(_dl_debug, "all")) {
++ if (strstr(_dl_debug, "all")) {
+ _dl_debug_detail = _dl_debug_move = _dl_debug_symbols
+ = _dl_debug_reloc = _dl_debug_bindings = _dl_debug_nofixups = (void*)1;
+ } else {
+@@ -377,7 +376,7 @@
+ if (getenv("LD_BIND_NOW"))
+ now_flag = RTLD_NOW;
+
+-#if !defined SHARED && defined __LDSO_LIBRARY_PATH__
++#if !defined SHARED && defined __LDSO_LD_LIBRARY_PATH__
+ /* When statically linked, the _dl_library_path is not yet initialized */
+ _dl_library_path = getenv("LD_LIBRARY_PATH");
+ #endif
+@@ -393,7 +392,7 @@
+ return NULL;
+ }
+ dyn_chain = (struct dyn_elf *) malloc(sizeof(struct dyn_elf));
+- _dl_memset(dyn_chain, 0, sizeof(struct dyn_elf));
++ memset(dyn_chain, 0, sizeof(struct dyn_elf));
+ dyn_chain->dyn = tpnt;
+ tpnt->rtld_flags |= (flag & RTLD_GLOBAL);
+
+@@ -444,7 +443,7 @@
+
+ /* This list is for dlsym() and relocation */
+ dyn_ptr->next = (struct dyn_elf *) malloc(sizeof(struct dyn_elf));
+- _dl_memset (dyn_ptr->next, 0, sizeof (struct dyn_elf));
++ memset (dyn_ptr->next, 0, sizeof (struct dyn_elf));
+ dyn_ptr = dyn_ptr->next;
+ dyn_ptr->dyn = tpnt1;
+ /* Used to record RTLD_LOCAL scope */
+@@ -544,11 +543,18 @@
+ * to the GOT tables. We need to do this in reverse order so that COPY
+ * directives work correctly */
+
+- /* Get the tail of the list */
++#ifdef SHARED
++ /*
++ * Get the tail of the list.
++ * In the static case doesn't need to extend the global scope, it is
++ * ready to be used as it is, because _dl_loaded_modules already points
++ * to the dlopened library.
++ */
+ for (ls = &_dl_loaded_modules->symbol_scope; ls && ls->next; ls = ls->next);
+
+ /* Extend the global scope by adding the local scope of the dlopened DSO. */
+ ls->next = &dyn_chain->dyn->symbol_scope;
++#endif
+ #ifdef __mips__
+ /*
+ * Relocation of the GOT entries for MIPS have to be done
+@@ -661,7 +667,8 @@
+ void *ret;
+
+ __UCLIBC_MUTEX_CONDITIONAL_LOCK(_dl_mutex, 1);
+- ret = do_dlopen(libname, flag);
++ ret = do_dlopen(libname, flag,
++ (ElfW(Addr)) __builtin_return_address(0));
+ __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(_dl_mutex, 1);
+
+ return ret;
+@@ -671,7 +678,7 @@
+ {
+ struct elf_resolve *tpnt, *tfrom;
+ struct dyn_elf *handle;
+- ElfW(Addr) from;
++ ElfW(Addr) from = 0;
+ struct dyn_elf *rpnt;
+ void *ret;
+ struct symbol_ref sym_ref = { NULL, NULL };
+@@ -729,7 +736,13 @@
+ tpnt = NULL;
+ if (handle == _dl_symbol_tables)
+ tpnt = handle->dyn; /* Only search RTLD_GLOBAL objs if global object */
+- ret = _dl_find_hash(name2, &handle->dyn->symbol_scope, tpnt, ELF_RTYPE_CLASS_DLSYM, &sym_ref);
++
++ do {
++ ret = _dl_find_hash(name2, &handle->dyn->symbol_scope, tpnt, ELF_RTYPE_CLASS_DLSYM, &sym_ref);
++ if (ret != NULL)
++ break;
++ handle = handle->next;
++ } while (from && handle);
+
+ #if defined(USE_TLS) && USE_TLS && defined SHARED
+ if (sym_ref.sym && (ELF_ST_TYPE(sym_ref.sym->st_info) == STT_TLS) && (sym_ref.tpnt)) {
+@@ -1081,8 +1094,10 @@
+ * Dump information to stderr about the current loaded modules
+ */
+ #ifdef __USE_GNU
++# if 0
+ static const char type[][4] = { "Lib", "Exe", "Int", "Mod" };
+
++/* reimplement this, being a GNU extension it should be the same as on glibc */
+ int dlinfo(void)
+ {
+ struct elf_resolve *tpnt;
+@@ -1109,6 +1124,7 @@
+ }
+ return 0;
+ }
++#endif
+
+ static int do_dladdr(const void *__address, Dl_info * __info)
+ {
+diff -Nur uClibc-0.9.33.2/ldso/libdl/Makefile.in uClibc-git/ldso/libdl/Makefile.in
+--- uClibc-0.9.33.2/ldso/libdl/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/libdl/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -23,7 +23,7 @@
+ LDFLAGS-libdl.so := $(LDFLAGS)
+
+ ifeq ($(LDSO_NO_CLEANUP),)
+-LDFLAGS-libdl.so += -Wl,-fini,dl_cleanup
++LDFLAGS-libdl.so += -Wl,-fini,$(SYMBOL_PREFIX)dl_cleanup
+ endif
+
+ LIBS-libdl.so := $(LIBS) $(ldso)
+diff -Nur uClibc-0.9.33.2/ldso/man/dlopen.3 uClibc-git/ldso/man/dlopen.3
+--- uClibc-0.9.33.2/ldso/man/dlopen.3 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/ldso/man/dlopen.3 2014-02-03 12:32:56.000000000 +0100
+@@ -19,9 +19,8 @@
+ .\" GNU General Public License for more details.
+ .\"
+ .\" You should have received a copy of the GNU General Public
+-.\" License along with this manual; if not, write to the Free
+-.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+-.\" USA.
++.\" License along with this manual; if not, see
++.\" <http://www.gnu.org/licenses/>.
+ .\"
+ .TH DLOPEN 3 "16 May 1995" "Linux" "Linux Programmer's Manual"
+ .SH NAME
+diff -Nur uClibc-0.9.33.2/libc/.gitignore uClibc-git/libc/.gitignore
+--- uClibc-0.9.33.2/libc/.gitignore 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/.gitignore 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1 @@
++ucontext_i.[chs]
+diff -Nur uClibc-0.9.33.2/libc/inet/addr.c uClibc-git/libc/inet/addr.c
+--- uClibc-0.9.33.2/libc/inet/addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,8 +17,6 @@
+ * Changed to use _int10tostr.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <ctype.h>
+@@ -114,7 +112,7 @@
+
+ #define INET_NTOA_MAX_LEN 16 /* max 12 digits + 3 '.'s + 1 nul */
+
+-char *inet_ntoa_r(struct in_addr in, char buf[INET_NTOA_MAX_LEN])
++static char *__inet_ntoa_r(struct in_addr in, char buf[INET_NTOA_MAX_LEN])
+ {
+ in_addr_t addr = ntohl(in.s_addr);
+ int i;
+@@ -133,12 +131,12 @@
+
+ return p+1;
+ }
+-libc_hidden_def(inet_ntoa_r)
++strong_alias(__inet_ntoa_r,inet_ntoa_r)
+
+ char *inet_ntoa(struct in_addr in)
+ {
+ static char buf[INET_NTOA_MAX_LEN];
+- return inet_ntoa_r(in, buf);
++ return __inet_ntoa_r(in, buf);
+ }
+ libc_hidden_def(inet_ntoa)
+ #endif
+@@ -153,18 +151,18 @@
+ */
+ struct in_addr inet_makeaddr(in_addr_t net, in_addr_t host)
+ {
+- in_addr_t addr;
++ struct in_addr in;
+
+ if (net < 128)
+- addr = (net << IN_CLASSA_NSHIFT) | (host & IN_CLASSA_HOST);
++ in.s_addr = (net << IN_CLASSA_NSHIFT) | (host & IN_CLASSA_HOST);
+ else if (net < 65536)
+- addr = (net << IN_CLASSB_NSHIFT) | (host & IN_CLASSB_HOST);
++ in.s_addr = (net << IN_CLASSB_NSHIFT) | (host & IN_CLASSB_HOST);
+ else if (net < 16777216UL)
+- addr = (net << IN_CLASSC_NSHIFT) | (host & IN_CLASSC_HOST);
++ in.s_addr = (net << IN_CLASSC_NSHIFT) | (host & IN_CLASSC_HOST);
+ else
+- addr = net | host;
+- addr = htonl(addr);
+- return *(struct in_addr *)&addr;
++ in.s_addr = net | host;
++ in.s_addr = htonl(in.s_addr);
++ return in;
+ }
+ libc_hidden_def(inet_makeaddr)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/inet/ether_addr.c uClibc-git/libc/inet/ether_addr.c
+--- uClibc-0.9.33.2/libc/inet/ether_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/ether_addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /*
+@@ -23,8 +22,6 @@
+ * - initial uClibc port
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <ctype.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/gai_strerror.c uClibc-git/libc/inet/gai_strerror.c
+--- uClibc-0.9.33.2/libc/inet/gai_strerror.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/gai_strerror.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,17 +13,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <stdio.h>
+ #include <netdb.h>
++#include <libintl.h>
+
+-#define N_(x) x
+-#define _(x) x
+ static const struct
+ {
+ int code;
+diff -Nur uClibc-0.9.33.2/libc/inet/getaddrinfo.c uClibc-git/libc/inet/getaddrinfo.c
+--- uClibc-0.9.33.2/libc/inet/getaddrinfo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/getaddrinfo.c 2014-02-03 12:32:56.000000000 +0100
+@@ -51,8 +51,6 @@
+
+ If these license terms cause you a real problem, contact the author. */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <assert.h>
+ #include <errno.h>
+ #include <netdb.h>
+@@ -283,7 +281,7 @@
+ ai->ai_protocol = req->ai_protocol;
+ ai->ai_addrlen = sizeof(struct sockaddr_un);
+ ai->ai_addr = (void *)ai + sizeof(struct addrinfo);
+-#if SALEN
++#if 0 /* SALEN */
+ ((struct sockaddr_un *)ai->ai_addr)->sun_len = sizeof(struct sockaddr_un);
+ #endif /* SALEN */
+
+@@ -713,7 +711,7 @@
+ (*pai)->ai_protocol = st2->protocol;
+ (*pai)->ai_addrlen = socklen;
+ (*pai)->ai_addr = (void *) (*pai) + sizeof(struct addrinfo);
+-#if defined SALEN
++#if 0 /* SALEN */
+ (*pai)->ai_addr->sa_len = socklen;
+ #endif
+ (*pai)->ai_addr->sa_family = family;
+diff -Nur uClibc-0.9.33.2/libc/inet/herror.c uClibc-git/libc/inet/herror.c
+--- uClibc-0.9.33.2/libc/inet/herror.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/herror.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,8 +17,6 @@
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <netdb.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/hostid.c uClibc-git/libc/inet/hostid.c
+--- uClibc-0.9.33.2/libc/inet/hostid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/hostid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <errno.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/ifaddrs.c uClibc-git/libc/inet/ifaddrs.c
+--- uClibc-0.9.33.2/libc/inet/ifaddrs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/ifaddrs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,12 +13,9 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <alloca.h>
+ #include <assert.h>
+ #include <errno.h>
+@@ -33,7 +30,6 @@
+ #include <string.h>
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+-#include <libc-internal.h>
+ #include <time.h>
+ #include <unistd.h>
+
+diff -Nur uClibc-0.9.33.2/libc/inet/if_index.c uClibc-git/libc/inet/if_index.c
+--- uClibc-0.9.33.2/libc/inet/if_index.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/if_index.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,15 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>.
+
+ Reworked Dec 2002 by Erik Andersen <andersen@codepoet.org>
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <string.h>
+ #include <alloca.h>
+ #include <errno.h>
+@@ -31,7 +28,6 @@
+ #include <net/if.h>
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+-#include <libc-internal.h>
+ #include <not-cancel.h>
+
+ #include "netlinkaccess.h"
+diff -Nur uClibc-0.9.33.2/libc/inet/in6_addr.c uClibc-git/libc/inet/in6_addr.c
+--- uClibc-0.9.33.2/libc/inet/in6_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/in6_addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,12 +13,9 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <netinet/in.h>
+
+ #ifdef __UCLIBC_HAS_IPV6__
+diff -Nur uClibc-0.9.33.2/libc/inet/inet_addr.c uClibc-git/libc/inet/inet_addr.c
+--- uClibc-0.9.33.2/libc/inet/inet_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/inet_addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,5 +4,5 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define L_inet_makeaddr
++#define L_inet_addr
+ #include "addr.c"
+diff -Nur uClibc-0.9.33.2/libc/inet/inet_makeaddr.c uClibc-git/libc/inet/inet_makeaddr.c
+--- uClibc-0.9.33.2/libc/inet/inet_makeaddr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/inet_makeaddr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,5 +4,5 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define L_inet_addr
++#define L_inet_makeaddr
+ #include "addr.c"
+diff -Nur uClibc-0.9.33.2/libc/inet/inet_net.c uClibc-git/libc/inet/inet_net.c
+--- uClibc-0.9.33.2/libc/inet/inet_net.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/inet_net.c 2014-02-03 12:32:56.000000000 +0100
+@@ -32,8 +32,6 @@
+ * SUCH DAMAGE.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <ctype.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/Makefile.in uClibc-git/libc/inet/Makefile.in
+--- uClibc-0.9.33.2/libc/inet/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -11,33 +11,34 @@
+
+ INET_DIR := $(top_srcdir)libc/inet
+ INET_OUT := $(top_builddir)libc/inet
++V4_OR_V6 := $(findstring y,$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6))
+
+ CFLAGS-inet := -DRESOLVER="\"resolv.c\""
+ CSRC-y :=
+ # des uses ntohl
+-CSRC-$(findstring y,$(UCLIBC_HAS_CRYPT_IMPL)$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6)) += ntohl.c
+-CSRC-$(findstring y,$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6)) += \
++CSRC-$(findstring y,$(UCLIBC_HAS_CRYPT_IMPL)$(V4_OR_V6)) += ntohl.c
++CSRC-$(V4_OR_V6) += \
+ getservice.c getproto.c getnet.c hostid.c \
+ inet_net.c herror.c if_index.c gai_strerror.c getaddrinfo.c \
+ ifaddrs.c ntop.c
+ CSRC-$(UCLIBC_HAS_IPV6) += in6_addr.c
+ # multi source addr.c
+-CSRC-$(findstring y,$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6)) += \
++CSRC-$(V4_OR_V6) += \
+ inet_aton.c inet_addr.c inet_ntoa.c inet_makeaddr.c \
+ inet_lnaof.c inet_netof.c
+ # multi source resolv.c
+-CSRC-$(findstring y,$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6)) += \
++CSRC-$(V4_OR_V6) += \
+ encodeh.c decodeh.c encoded.c decoded.c \
+ encodeq.c encodea.c \
+ read_etc_hosts_r.c \
+ dnslookup.c opennameservers.c closenameservers.c \
+ getnameinfo.c \
+ gethostent.c gethostent_r.c
+-CSRC-$(findstring y,$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6)) += \
++CSRC-$(V4_OR_V6) += \
+ get_hosts_byaddr_r.c get_hosts_byname_r.c \
+ gethostbyaddr_r.c gethostbyname_r.c gethostbyname2_r.c \
+ gethostbyaddr.c gethostbyname.c gethostbyname2.c
+-CSRC-$(findstring y,$(UCLIBC_HAS_RESOLVER_SUPPORT)) += \
++CSRC-$(UCLIBC_HAS_RESOLVER_SUPPORT) += \
+ ns_netint.c ns_parse.c res_data.c \
+ res_init.c res_query.c res_comp.c ns_name.c \
+ _res_state.c
+@@ -52,7 +53,7 @@
+ socketcalls_CSRC-$(UCLIBC_LINUX_SPECIFIC) += accept4.c
+ CSRC-$(UCLIBC_HAS_SOCKET) += $(socketcalls_CSRC-y) opensock.c
+
+-CSRC-$(findstring y,$(UCLIBC_HAS_SOCKET)$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6)) += ethers.c ether_addr.c
++CSRC-$(findstring y,$(UCLIBC_HAS_SOCKET)$(V4_OR_V6)) += ethers.c ether_addr.c
+
+ INET_SRC := $(patsubst %.c,$(INET_DIR)/%.c,$(CSRC-y))
+ INET_OBJ := $(patsubst %.c,$(INET_OUT)/%.o,$(CSRC-y))
+diff -Nur uClibc-0.9.33.2/libc/inet/netlinkaccess.h uClibc-git/libc/inet/netlinkaccess.h
+--- uClibc-0.9.33.2/libc/inet/netlinkaccess.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/netlinkaccess.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETLINKACCESS_H
+ #define _NETLINKACCESS_H 1
+diff -Nur uClibc-0.9.33.2/libc/inet/ntohl.c uClibc-git/libc/inet/ntohl.c
+--- uClibc-0.9.33.2/libc/inet/ntohl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/ntohl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,9 +6,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <stdint.h>
+-#include <endian.h>
+-#include <byteswap.h>
+ #include <netinet/in.h>
+
+ #undef ntohl
+@@ -16,51 +13,30 @@
+ #undef htonl
+ #undef htons
+
+-#if __BYTE_ORDER == __BIG_ENDIAN
+-uint32_t ntohl (uint32_t x)
+-{
+- return x;
+-}
+-
+-uint16_t ntohs (uint16_t x)
+-{
+- return x;
+-}
+-
+-uint32_t htonl (uint32_t x)
+-{
+- return x;
+-}
++#if __BYTE_ORDER != __BIG_ENDIAN && __BYTE_ORDER != __LITTLE_ENDIAN
++# error "You seem to have an unsupported byteorder"
++#endif
+
+-uint16_t htons (uint16_t x)
+-{
+- return x;
+-}
+-#elif __BYTE_ORDER == __LITTLE_ENDIAN
+ uint32_t ntohl (uint32_t x)
+ {
++#if __BYTE_ORDER == __BIG_ENDIAN
++ return x;
++#else
+ return __bswap_32(x);
++#endif
+ }
++libc_hidden_def(ntohl)
++strong_alias(ntohl,htonl)
++libc_hidden_def(htonl)
+
+ uint16_t ntohs (uint16_t x)
+ {
+- return __bswap_16(x);
+-}
+-
+-uint32_t htonl (uint32_t x)
+-{
+- return __bswap_32(x);
+-}
+-
+-uint16_t htons (uint16_t x)
+-{
+- return __bswap_16(x);
+-}
++#if __BYTE_ORDER == __BIG_ENDIAN
++ return x;
+ #else
+-#error "You seem to have an unsupported byteorder"
++ return __bswap_16(x);
+ #endif
+-
+-libc_hidden_def(ntohl)
++}
+ libc_hidden_def(ntohs)
+-libc_hidden_def(htonl)
++strong_alias(ntohs,htons)
+ libc_hidden_def(htons)
+diff -Nur uClibc-0.9.33.2/libc/inet/ntop.c uClibc-git/libc/inet/ntop.c
+--- uClibc-0.9.33.2/libc/inet/ntop.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/ntop.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,6 @@
+ * SOFTWARE.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <sys/param.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/opensock.c uClibc-git/libc/inet/opensock.c
+--- uClibc-0.9.33.2/libc/inet/opensock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/opensock.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,18 +12,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <assert.h>
+-#include <errno.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include <unistd.h>
+ #include <sys/socket.h>
+-#include <features.h>
+-#include <libc-internal.h>
++#include <bits/kernel-features.h>
+
+ /* Return a socket of any type. The socket can be used in subsequent
+ ioctl calls to talk to the kernel. */
+diff -Nur uClibc-0.9.33.2/libc/inet/resolv.c uClibc-git/libc/inet/resolv.c
+--- uClibc-0.9.33.2/libc/inet/resolv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/resolv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -293,8 +293,6 @@
+ - a sequence of labels ending with a pointer
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <string.h>
+ #include <stdio.h>
+ #include <stdio_ext.h>
+@@ -317,6 +315,7 @@
+ #include <sys/utsname.h>
+ #include <sys/un.h>
+ #include <sys/stat.h>
++#include <sys/param.h>
+ #include <bits/uClibc_mutex.h>
+ #include "internal/parse_config.h"
+
+@@ -406,7 +405,7 @@
+ } sockaddr46_t;
+
+
+-__UCLIBC_MUTEX_EXTERN(__resolv_lock);
++__UCLIBC_MUTEX_EXTERN(__resolv_lock) attribute_hidden;
+
+ /* Protected by __resolv_lock */
+ extern void (*__res_sync)(void) attribute_hidden;
+@@ -566,7 +565,7 @@
+
+ #ifdef L_encodeh
+
+-int attribute_hidden __encode_header(struct resolv_header *h, unsigned char *dest, int maxlen)
++int __encode_header(struct resolv_header *h, unsigned char *dest, int maxlen)
+ {
+ if (maxlen < HFIXEDSZ)
+ return -1;
+@@ -595,7 +594,7 @@
+
+ #ifdef L_decodeh
+
+-void attribute_hidden __decode_header(unsigned char *data,
++void __decode_header(unsigned char *data,
+ struct resolv_header *h)
+ {
+ h->id = (data[0] << 8) | data[1];
+@@ -619,7 +618,7 @@
+ /* Encode a dotted string into nameserver transport-level encoding.
+ This routine is fairly dumb, and doesn't attempt to compress
+ the data */
+-int attribute_hidden __encode_dotted(const char *dotted, unsigned char *dest, int maxlen)
++int __encode_dotted(const char *dotted, unsigned char *dest, int maxlen)
+ {
+ unsigned used = 0;
+
+@@ -657,7 +656,7 @@
+
+ /* Decode a dotted string from nameserver transport-level encoding.
+ This routine understands compressed data. */
+-int attribute_hidden __decode_dotted(const unsigned char *packet,
++int __decode_dotted(const unsigned char *packet,
+ int offset,
+ int packet_len,
+ char *dest,
+@@ -722,7 +721,7 @@
+
+ #ifdef L_encodeq
+
+-int attribute_hidden __encode_question(const struct resolv_question *q,
++int __encode_question(const struct resolv_question *q,
+ unsigned char *dest,
+ int maxlen)
+ {
+@@ -750,7 +749,7 @@
+
+ #ifdef L_encodea
+
+-int attribute_hidden __encode_answer(struct resolv_answer *a, unsigned char *dest, int maxlen)
++int __encode_answer(struct resolv_answer *a, unsigned char *dest, int maxlen)
+ {
+ int i;
+
+@@ -864,7 +863,7 @@
+ const char *name,
+ int type,
+ unsigned char *packet,
+- int maxlen);
++ int maxlen) attribute_hidden;
+ int __form_query(int id,
+ const char *name,
+ int type,
+@@ -956,7 +955,7 @@
+ }
+
+ /* Must be called under __resolv_lock. */
+-void attribute_hidden __open_nameservers(void)
++void __open_nameservers(void)
+ {
+ static uint32_t resolv_conf_mtime;
+
+@@ -1122,7 +1121,7 @@
+ #ifdef L_closenameservers
+
+ /* Must be called under __resolv_lock. */
+-void attribute_hidden __close_nameservers(void)
++void __close_nameservers(void)
+ {
+ if (__nameserver != (void*) &__local_nameserver)
+ free(__nameserver);
+@@ -1230,7 +1229,7 @@
+ * appended. (why the filed is called "dotted" I have no idea)
+ * This is a malloced string. May be NULL because strdup failed.
+ */
+-int attribute_hidden __dns_lookup(const char *name,
++int __dns_lookup(const char *name,
+ int type,
+ unsigned char **outpacket,
+ struct resolv_answer *a)
+@@ -1594,7 +1593,7 @@
+ #define HALISTOFF (sizeof(char*) * MAXTOKENS)
+ #define INADDROFF (HALISTOFF + 2 * sizeof(char*))
+
+-int attribute_hidden __read_etc_hosts_r(
++int __read_etc_hosts_r(
+ parser_t * parser,
+ const char *name,
+ int type,
+@@ -1708,7 +1707,7 @@
+
+ #ifdef L_get_hosts_byname_r
+
+-int attribute_hidden __get_hosts_byname_r(const char *name,
++int __get_hosts_byname_r(const char *name,
+ int type,
+ struct hostent *result_buf,
+ char *buf,
+@@ -1724,7 +1723,7 @@
+
+ #ifdef L_get_hosts_byaddr_r
+
+-int attribute_hidden __get_hosts_byaddr_r(const char *addr,
++int __get_hosts_byaddr_r(const char *addr,
+ int len,
+ int type,
+ struct hostent *result_buf,
+@@ -1775,7 +1774,7 @@
+ unsigned flags)
+ {
+ int serrno = errno;
+- unsigned ok;
++ bool ok = 0;
+ struct hostent *hoste = NULL;
+ char domain[256];
+
+@@ -1785,16 +1784,15 @@
+ if (sa == NULL || addrlen < sizeof(sa_family_t))
+ return EAI_FAMILY;
+
+- ok = sa->sa_family;
+- if (ok == AF_LOCAL) /* valid */;
++ if (sa->sa_family == AF_LOCAL) /* valid */;
+ #ifdef __UCLIBC_HAS_IPV4__
+- else if (ok == AF_INET) {
++ else if (sa->sa_family == AF_INET) {
+ if (addrlen < sizeof(struct sockaddr_in))
+ return EAI_FAMILY;
+ }
+ #endif
+ #ifdef __UCLIBC_HAS_IPV6__
+- else if (ok == AF_INET6) {
++ else if (sa->sa_family == AF_INET6) {
+ if (addrlen < sizeof(struct sockaddr_in6))
+ return EAI_FAMILY;
+ }
+@@ -1802,7 +1800,6 @@
+ else
+ return EAI_FAMILY;
+
+- ok = 0;
+ if (host != NULL && hostlen > 0)
+ switch (sa->sa_family) {
+ case AF_INET:
+@@ -1826,21 +1823,18 @@
+
+ if (hoste) {
+ char *c;
+-#undef min
+-#define min(x,y) (((x) > (y)) ? (y) : (x))
+ if ((flags & NI_NOFQDN)
+ && (getdomainname(domain, sizeof(domain)) == 0)
+ && (c = strstr(hoste->h_name, domain)) != NULL
+ && (c != hoste->h_name) && (*(--c) == '.')
+ ) {
+ strncpy(host, hoste->h_name,
+- min(hostlen, (size_t) (c - hoste->h_name)));
+- host[min(hostlen - 1, (size_t) (c - hoste->h_name))] = '\0';
++ MIN(hostlen, (size_t) (c - hoste->h_name)));
++ host[MIN(hostlen - 1, (size_t) (c - hoste->h_name))] = '\0';
+ } else {
+ strncpy(host, hoste->h_name, hostlen);
+ }
+ ok = 1;
+-#undef min
+ }
+ }
+
+@@ -3432,6 +3426,7 @@
+ */
+ }
+
++/* has to be called under __resolv_lock */
+ static int
+ __res_vinit(res_state rp, int preinit)
+ {
+@@ -3440,7 +3435,6 @@
+ int m = 0;
+ #endif
+
+- __UCLIBC_MUTEX_LOCK(__resolv_lock);
+ __close_nameservers();
+ __open_nameservers();
+
+@@ -3532,29 +3526,87 @@
+
+ rp->options |= RES_INIT;
+
++ return 0;
++}
++
++static unsigned int
++res_randomid(void)
++{
++ return 0xffff & getpid();
++}
++
++/* Our res_init never fails (always returns 0) */
++int
++res_init(void)
++{
++ /*
++ * These three fields used to be statically initialized. This made
++ * it hard to use this code in a shared library. It is necessary,
++ * now that we're doing dynamic initialization here, that we preserve
++ * the old semantics: if an application modifies one of these three
++ * fields of _res before res_init() is called, res_init() will not
++ * alter them. Of course, if an application is setting them to
++ * _zero_ before calling res_init(), hoping to override what used
++ * to be the static default, we can't detect it and unexpected results
++ * will follow. Zero for any of these fields would make no sense,
++ * so one can safely assume that the applications were already getting
++ * unexpected results.
++ *
++ * _res.options is tricky since some apps were known to diddle the bits
++ * before res_init() was first called. We can't replicate that semantic
++ * with dynamic initialization (they may have turned bits off that are
++ * set in RES_DEFAULT). Our solution is to declare such applications
++ * "broken". They could fool us by setting RES_INIT but none do (yet).
++ */
++
++ __UCLIBC_MUTEX_LOCK(__resolv_lock);
++
++ if (!_res.retrans)
++ _res.retrans = RES_TIMEOUT;
++ if (!_res.retry)
++ _res.retry = 4;
++ if (!(_res.options & RES_INIT))
++ _res.options = RES_DEFAULT;
++
++ /*
++ * This one used to initialize implicitly to zero, so unless the app
++ * has set it to something in particular, we can randomize it now.
++ */
++ if (!_res.id)
++ _res.id = res_randomid();
++
++ __res_sync = NULL;
++ __res_vinit(&_res, 1);
++ __res_sync = res_sync_func;
++
+ __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
++
+ return 0;
+ }
++libc_hidden_def(res_init)
+
+ static void
+-__res_iclose(void)
++__res_iclose(res_state statp)
+ {
++ struct __res_state * rp = statp;
+ __UCLIBC_MUTEX_LOCK(__resolv_lock);
++ if (rp == NULL)
++ rp = __res_state();
+ __close_nameservers();
+ __res_sync = NULL;
+ #ifdef __UCLIBC_HAS_IPV6__
+ {
+- char *p1 = (char*) &(_res.nsaddr_list[0]);
+- int m = 0;
++ char *p1 = (char*) &(rp->nsaddr_list[0]);
++ unsigned int m = 0;
+ /* free nsaddrs[m] if they do not point to nsaddr_list[x] */
+- while (m < ARRAY_SIZE(_res._u._ext.nsaddrs)) {
+- char *p2 = (char*)(_res._u._ext.nsaddrs[m++]);
+- if (p2 < p1 || (p2 - p1) > sizeof(_res.nsaddr_list))
++ while (m < ARRAY_SIZE(rp->_u._ext.nsaddrs)) {
++ char *p2 = (char*)(rp->_u._ext.nsaddrs[m++]);
++ if (p2 < p1 || (p2 - p1) > (signed)sizeof(rp->nsaddr_list))
+ free(p2);
+ }
+ }
+ #endif
+- memset(&_res, 0, sizeof(_res));
++ memset(rp, 0, sizeof(struct __res_state));
+ __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
+ }
+
+@@ -3569,13 +3621,13 @@
+ void
+ res_nclose(res_state statp)
+ {
+- __res_iclose();
++ __res_iclose(statp);
+ }
+
+ #ifdef __UCLIBC_HAS_BSD_RES_CLOSE__
+ void res_close(void)
+ {
+- __res_iclose();
++ __res_iclose(NULL);
+ }
+ #endif
+
+@@ -3595,74 +3647,14 @@
+ # if defined __UCLIBC_HAS_TLS__
+ # undef __resp
+ __thread struct __res_state *__resp = &_res;
+-/*
+- * FIXME: Add usage of hidden attribute for this when used in the shared
+- * library. It currently crashes the linker when doing section
+- * relocations.
+- */
+ extern __thread struct __res_state *__libc_resp
+- __attribute__ ((alias ("__resp"))) attribute_hidden;
++ __attribute__ ((alias ("__resp"))) attribute_hidden attribute_tls_model_ie;
+ # else
+ # undef __resp
+ struct __res_state *__resp = &_res;
+ # endif
+ #endif /* !__UCLIBC_HAS_THREADS__ */
+
+-static unsigned int
+-res_randomid(void)
+-{
+- return 0xffff & getpid();
+-}
+-
+-/* Our res_init never fails (always returns 0) */
+-int
+-res_init(void)
+-{
+- /*
+- * These three fields used to be statically initialized. This made
+- * it hard to use this code in a shared library. It is necessary,
+- * now that we're doing dynamic initialization here, that we preserve
+- * the old semantics: if an application modifies one of these three
+- * fields of _res before res_init() is called, res_init() will not
+- * alter them. Of course, if an application is setting them to
+- * _zero_ before calling res_init(), hoping to override what used
+- * to be the static default, we can't detect it and unexpected results
+- * will follow. Zero for any of these fields would make no sense,
+- * so one can safely assume that the applications were already getting
+- * unexpected results.
+- *
+- * _res.options is tricky since some apps were known to diddle the bits
+- * before res_init() was first called. We can't replicate that semantic
+- * with dynamic initialization (they may have turned bits off that are
+- * set in RES_DEFAULT). Our solution is to declare such applications
+- * "broken". They could fool us by setting RES_INIT but none do (yet).
+- */
+-
+- __UCLIBC_MUTEX_LOCK(__resolv_lock);
+-
+- if (!_res.retrans)
+- _res.retrans = RES_TIMEOUT;
+- if (!_res.retry)
+- _res.retry = 4;
+- if (!(_res.options & RES_INIT))
+- _res.options = RES_DEFAULT;
+-
+- /*
+- * This one used to initialize implicitly to zero, so unless the app
+- * has set it to something in particular, we can randomize it now.
+- */
+- if (!_res.id)
+- _res.id = res_randomid();
+- __res_sync = res_sync_func;
+-
+- __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
+-
+- __res_vinit(&_res, 1);
+-
+- return 0;
+-}
+-libc_hidden_def(res_init)
+-
+ /*
+ * Set up default settings. If the configuration file exist, the values
+ * there will have precedence. Otherwise, the server address is set to
+@@ -3687,7 +3679,11 @@
+ int
+ res_ninit(res_state statp)
+ {
+- return __res_vinit(statp, 0);
++ int ret;
++ __UCLIBC_MUTEX_LOCK(__resolv_lock);
++ ret = __res_vinit(statp, 0);
++ __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
++ return ret;
+ }
+
+ #endif /* L_res_init */
+@@ -3740,11 +3736,10 @@
+
+ free(a.dotted);
+
+- if (a.atype == type) { /* CNAME */
+- if (i > anslen)
+- i = anslen;
+- memcpy(answer, packet, i);
+- }
++ if (i > anslen)
++ i = anslen;
++ memcpy(answer, packet, i);
++
+ free(packet);
+ return i;
+ }
+@@ -4227,7 +4222,7 @@
+ hp = (HEADER *) buf;
+ hp->id = getpid() & 0xffff;
+ hp->opcode = op;
+- hp->rd = (_res.options & RES_RECURSE) != 0U;
++ hp->rd = (_res_options & RES_RECURSE) != 0U;
+ hp->rcode = NOERROR;
+
+ cp = buf + HFIXEDSZ;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/auth_none.c uClibc-git/libc/inet/rpc/auth_none.c
+--- uClibc-0.9.33.2/libc/inet/rpc/auth_none.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/auth_none.c 2014-02-03 12:32:56.000000000 +0100
+@@ -35,8 +35,6 @@
+ * credentials and verifiers to remote systems.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include "rpc_private.h"
+
+
+@@ -66,49 +64,54 @@
+ char marshalled_client[MAX_MARSHAL_SIZE];
+ u_int mcnt;
+ };
++
++static struct authnone_private_s authnone_private;
+ #ifdef __UCLIBC_HAS_THREADS__
+-#define authnone_private (*(struct authnone_private_s **)&RPC_THREAD_VARIABLE(authnone_private_s))
+-#else
+-static struct authnone_private_s *authnone_private;
++__libc_once_define(static, authnone_private_guard);
+ #endif
+
+-AUTH *
+-authnone_create (void)
++static void authnone_create_once (void);
++
++static void
++authnone_create_once (void)
+ {
+ struct authnone_private_s *ap;
+ XDR xdr_stream;
+ XDR *xdrs;
+
+- ap = (struct authnone_private_s *) authnone_private;
+- if (ap == NULL)
+- {
+- ap = (struct authnone_private_s *) calloc (1, sizeof (*ap));
+- if (ap == NULL)
+- return NULL;
+- authnone_private = ap;
+- }
+- if (!ap->mcnt)
+- {
+- ap->no_client.ah_cred = ap->no_client.ah_verf = _null_auth;
+- ap->no_client.ah_ops = (struct auth_ops *)&ops;
+- xdrs = &xdr_stream;
+- xdrmem_create (xdrs, ap->marshalled_client, (u_int) MAX_MARSHAL_SIZE,
+- XDR_ENCODE);
+- (void) xdr_opaque_auth (xdrs, &ap->no_client.ah_cred);
+- (void) xdr_opaque_auth (xdrs, &ap->no_client.ah_verf);
+- ap->mcnt = XDR_GETPOS (xdrs);
+- XDR_DESTROY (xdrs);
+- }
+- return (&ap->no_client);
++ ap = &authnone_private;
++
++ ap->no_client.ah_cred = ap->no_client.ah_verf = _null_auth;
++ ap->no_client.ah_ops = (struct auth_ops *) &ops;
++ xdrs = &xdr_stream;
++ xdrmem_create(xdrs, ap->marshalled_client,
++ (u_int) MAX_MARSHAL_SIZE, XDR_ENCODE);
++ (void) xdr_opaque_auth(xdrs, &ap->no_client.ah_cred);
++ (void) xdr_opaque_auth(xdrs, &ap->no_client.ah_verf);
++ ap->mcnt = XDR_GETPOS (xdrs);
++ XDR_DESTROY (xdrs);
++}
++
++AUTH *
++authnone_create (void)
++{
++#ifdef __UCLIBC_HAS_THREADS__
++ __libc_once (authnone_private_guard, authnone_create_once);
++#else
++ authnone_create_once();
++#endif
++ return &authnone_private.no_client;
+ }
+ libc_hidden_def(authnone_create)
+
+ static bool_t
+-authnone_marshal (AUTH *client attribute_unused, XDR *xdrs)
++authnone_marshal (AUTH *client, XDR *xdrs)
+ {
+ struct authnone_private_s *ap;
+
+- ap = authnone_private;
++ /* authnone_create returned authnone_private->no_client, which is
++ the first field of struct authnone_private_s. */
++ ap = (struct authnone_private_s *) client;
+ if (ap == NULL)
+ return FALSE;
+ return (*xdrs->x_ops->x_putbytes) (xdrs, ap->marshalled_client, ap->mcnt);
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/auth_unix.c uClibc-git/libc/inet/rpc/auth_unix.c
+--- uClibc-0.9.33.2/libc/inet/rpc/auth_unix.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/auth_unix.c 2014-02-03 12:32:56.000000000 +0100
+@@ -38,13 +38,11 @@
+ * for the credentials.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <limits.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <libintl.h>
+ #include <sys/param.h>
+
+ #include <rpc/types.h>
+@@ -52,10 +50,6 @@
+ #include <rpc/auth.h>
+ #include <rpc/auth_unix.h>
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+-
+ /*
+ * Unix authenticator operations vector
+ */
+@@ -65,7 +59,7 @@
+ static bool_t authunix_refresh (AUTH *);
+ static void authunix_destroy (AUTH *);
+
+-static struct auth_ops auth_unix_ops = {
++static const struct auth_ops auth_unix_ops = {
+ authunix_nextverf,
+ authunix_marshal,
+ authunix_validate,
+@@ -111,13 +105,7 @@
+ if (auth == NULL || au == NULL)
+ {
+ no_memory:
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("authunix_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("authunix_create: out of memory\n"), stderr);
++ (void) fputs (_("authunix_create: out of memory\n"), stderr);
+ mem_free (auth, sizeof (*auth));
+ mem_free (au, sizeof (*au));
+ return NULL;
+@@ -326,7 +314,7 @@
+ xdrmem_create (xdrs, au->au_marshed, MAX_AUTH_BYTES, XDR_ENCODE);
+ if ((!xdr_opaque_auth (xdrs, &(auth->ah_cred))) ||
+ (!xdr_opaque_auth (xdrs, &(auth->ah_verf))))
+- perror (_("auth_none.c - Fatal marshalling problem"));
++ perror (_("auth_unix.c - Fatal marshalling problem"));
+ else
+ au->au_mpos = XDR_GETPOS (xdrs);
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/bindresvport.c uClibc-git/libc/inet/rpc/bindresvport.c
+--- uClibc-0.9.33.2/libc/inet/rpc/bindresvport.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/bindresvport.c 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,6 @@
+ * Copyright (c) 1987 by Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <errno.h>
+ #include <unistd.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_generic.c uClibc-git/libc/inet/rpc/clnt_generic.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_generic.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_generic.c 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,6 @@
+ * Copyright (C) 1987, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <alloca.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -119,7 +116,7 @@
+ prttmpbuf = alloca (prtbuflen);
+ while (getprotobyname_r (proto, &protobuf, prttmpbuf, prtbuflen, &p) != 0
+ || p == NULL)
+- if (errno != ERANGE)
++ if (errno != ERANGE)
+ {
+ struct rpc_createerr *ce = &get_rpc_createerr ();
+ ce->cf_stat = RPC_UNKNOWNPROTO;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_perror.c uClibc-git/libc/inet/rpc/clnt_perror.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_perror.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_perror.c 2014-02-03 12:32:56.000000000 +0100
+@@ -38,19 +38,10 @@
+ *
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <string.h>
+ #include "rpc_private.h"
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fputs(s, f) _IO_fputs (s, f)
+-#endif
+-
+ static char *auth_errmsg (enum auth_stat stat) internal_function;
+
+ #ifdef __UCLIBC_HAS_THREADS__
+@@ -81,74 +72,74 @@
+ static const char rpc_errstr[] =
+ {
+ #define RPC_SUCCESS_IDX 0
+- _("RPC: Success")
++ N_("RPC: Success")
+ "\0"
+ #define RPC_CANTENCODEARGS_IDX (RPC_SUCCESS_IDX + sizeof "RPC: Success")
+- _("RPC: Can't encode arguments")
++ N_("RPC: Can't encode arguments")
+ "\0"
+ #define RPC_CANTDECODERES_IDX (RPC_CANTENCODEARGS_IDX \
+ + sizeof "RPC: Can't encode arguments")
+- _("RPC: Can't decode result")
++ N_("RPC: Can't decode result")
+ "\0"
+ #define RPC_CANTSEND_IDX (RPC_CANTDECODERES_IDX \
+ + sizeof "RPC: Can't decode result")
+- _("RPC: Unable to send")
++ N_("RPC: Unable to send")
+ "\0"
+ #define RPC_CANTRECV_IDX (RPC_CANTSEND_IDX \
+ + sizeof "RPC: Unable to send")
+- _("RPC: Unable to receive")
++ N_("RPC: Unable to receive")
+ "\0"
+ #define RPC_TIMEDOUT_IDX (RPC_CANTRECV_IDX \
+ + sizeof "RPC: Unable to receive")
+- _("RPC: Timed out")
++ N_("RPC: Timed out")
+ "\0"
+ #define RPC_VERSMISMATCH_IDX (RPC_TIMEDOUT_IDX \
+ + sizeof "RPC: Timed out")
+- _("RPC: Incompatible versions of RPC")
++ N_("RPC: Incompatible versions of RPC")
+ "\0"
+ #define RPC_AUTHERROR_IDX (RPC_VERSMISMATCH_IDX \
+ + sizeof "RPC: Incompatible versions of RPC")
+- _("RPC: Authentication error")
++ N_("RPC: Authentication error")
+ "\0"
+ #define RPC_PROGUNAVAIL_IDX (RPC_AUTHERROR_IDX \
+ + sizeof "RPC: Authentication error")
+- _("RPC: Program unavailable")
++ N_("RPC: Program unavailable")
+ "\0"
+ #define RPC_PROGVERSMISMATCH_IDX (RPC_PROGUNAVAIL_IDX \
+ + sizeof "RPC: Program unavailable")
+- _("RPC: Program/version mismatch")
++ N_("RPC: Program/version mismatch")
+ "\0"
+ #define RPC_PROCUNAVAIL_IDX (RPC_PROGVERSMISMATCH_IDX \
+ + sizeof "RPC: Program/version mismatch")
+- _("RPC: Procedure unavailable")
++ N_("RPC: Procedure unavailable")
+ "\0"
+ #define RPC_CANTDECODEARGS_IDX (RPC_PROCUNAVAIL_IDX \
+ + sizeof "RPC: Procedure unavailable")
+- _("RPC: Server can't decode arguments")
++ N_("RPC: Server can't decode arguments")
+ "\0"
+ #define RPC_SYSTEMERROR_IDX (RPC_CANTDECODEARGS_IDX \
+ + sizeof "RPC: Server can't decode arguments")
+- _("RPC: Remote system error")
++ N_("RPC: Remote system error")
+ "\0"
+ #define RPC_UNKNOWNHOST_IDX (RPC_SYSTEMERROR_IDX \
+ + sizeof "RPC: Remote system error")
+- _("RPC: Unknown host")
++ N_("RPC: Unknown host")
+ "\0"
+ #define RPC_UNKNOWNPROTO_IDX (RPC_UNKNOWNHOST_IDX \
+ + sizeof "RPC: Unknown host")
+- _("RPC: Unknown protocol")
++ N_("RPC: Unknown protocol")
+ "\0"
+ #define RPC_PMAPFAILURE_IDX (RPC_UNKNOWNPROTO_IDX \
+ + sizeof "RPC: Unknown protocol")
+- _("RPC: Port mapper failure")
++ N_("RPC: Port mapper failure")
+ "\0"
+ #define RPC_PROGNOTREGISTERED_IDX (RPC_PMAPFAILURE_IDX \
+ + sizeof "RPC: Port mapper failure")
+- _("RPC: Program not registered")
++ N_("RPC: Program not registered")
+ "\0"
+ #define RPC_FAILED_IDX (RPC_PROGNOTREGISTERED_IDX \
+ + sizeof "RPC: Program not registered")
+- _("RPC: Failed (unspecified error)")
++ N_("RPC: Failed (unspecified error)")
+ };
+
+ static const struct rpc_errtab rpc_errlist[] =
+@@ -189,19 +180,14 @@
+ return (char*)_(rpc_errstr + rpc_errlist[i].message_off);
+ }
+ }
+- return _("RPC: (unknown error code)");
++ return N_("RPC: (unknown error code)");
+ }
+ libc_hidden_def(clnt_sperrno)
+
+ void
+ clnt_perrno (enum clnt_stat num)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s", clnt_sperrno (num));
+- else
+-#endif
+- (void) fputs (clnt_sperrno (num), stderr);
++ (void) fputs (clnt_sperrno (num), stderr);
+ }
+
+ /*
+@@ -295,12 +281,7 @@
+ void
+ clnt_perror (CLIENT * rpch, const char *msg)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s", clnt_sperror (rpch, msg));
+- else
+-#endif
+- (void) fputs (clnt_sperror (rpch, msg), stderr);
++ (void) fputs (clnt_sperror (rpch, msg), stderr);
+ }
+ libc_hidden_def(clnt_perror)
+
+@@ -352,12 +333,7 @@
+ void
+ clnt_pcreateerror (const char *msg)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s", clnt_spcreateerror (msg));
+- else
+-#endif
+- (void) fputs (clnt_spcreateerror (msg), stderr);
++ (void) fputs (clnt_spcreateerror (msg), stderr);
+ }
+
+ struct auth_errtab
+@@ -369,34 +345,34 @@
+ static const char auth_errstr[] =
+ {
+ #define AUTH_OK_IDX 0
+- _("Authentication OK")
++ N_("Authentication OK")
+ "\0"
+ #define AUTH_BADCRED_IDX (AUTH_OK_IDX + sizeof "Authentication OK")
+- _("Invalid client credential")
++ N_("Invalid client credential")
+ "\0"
+ #define AUTH_REJECTEDCRED_IDX (AUTH_BADCRED_IDX \
+ + sizeof "Invalid client credential")
+- _("Server rejected credential")
++ N_("Server rejected credential")
+ "\0"
+ #define AUTH_BADVERF_IDX (AUTH_REJECTEDCRED_IDX \
+ + sizeof "Server rejected credential")
+- _("Invalid client verifier")
++ N_("Invalid client verifier")
+ "\0"
+ #define AUTH_REJECTEDVERF_IDX (AUTH_BADVERF_IDX \
+ + sizeof "Invalid client verifier")
+- _("Server rejected verifier")
++ N_("Server rejected verifier")
+ "\0"
+ #define AUTH_TOOWEAK_IDX (AUTH_REJECTEDVERF_IDX \
+ + sizeof "Server rejected verifier")
+- _("Client credential too weak")
++ N_("Client credential too weak")
+ "\0"
+ #define AUTH_INVALIDRESP_IDX (AUTH_TOOWEAK_IDX \
+ + sizeof "Client credential too weak")
+- _("Invalid server verifier")
++ N_("Invalid server verifier")
+ "\0"
+ #define AUTH_FAILED_IDX (AUTH_INVALIDRESP_IDX \
+ + sizeof "Invalid server verifier")
+- _("Failed (unspecified error)")
++ N_("Failed (unspecified error)")
+ };
+
+ static const struct auth_errtab auth_errlist[] =
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_raw.c uClibc-git/libc/inet/rpc/clnt_raw.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_raw.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_raw.c 2014-02-03 12:32:56.000000000 +0100
+@@ -42,7 +42,6 @@
+ * any interference from the kernel.
+ */
+
+-#define __FORCE_GLIBC
+ #include <features.h>
+ #include "rpc_private.h"
+ #include <rpc/svc.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_simple.c uClibc-git/libc/inet/rpc/clnt_simple.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_simple.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_simple.c 2014-02-03 12:32:56.000000000 +0100
+@@ -38,9 +38,6 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <alloca.h>
+ #include <errno.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_tcp.c uClibc-git/libc/inet/rpc/clnt_tcp.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_tcp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_tcp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -50,22 +50,14 @@
+ * Now go hang yourself.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <netdb.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <unistd.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <sys/poll.h>
+ #include <sys/socket.h>
+ #include <rpc/pmap_clnt.h>
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+-
+-extern u_long _create_xid (void) attribute_hidden;
+
+ #define MCALL_MSG_SIZE 24
+
+@@ -130,13 +122,7 @@
+ if (h == NULL || ct == NULL)
+ {
+ struct rpc_createerr *ce = &get_rpc_createerr ();
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("clnttcp_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("clnttcp_create: out of memory\n"), stderr);
++ (void) fputs (_("clnttcp_create: out of memory\n"), stderr);
+ ce->cf_stat = RPC_SYSTEMERROR;
+ ce->cf_error.re_errno = ENOMEM;
+ goto fooy;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_udp.c uClibc-git/libc/inet/rpc/clnt_udp.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_udp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_udp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -37,12 +37,9 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <unistd.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <rpc/xdr.h>
+ #include <rpc/clnt.h>
+ #include <sys/poll.h>
+@@ -52,20 +49,12 @@
+ #include <errno.h>
+ #include <rpc/pmap_clnt.h>
+ #include <net/if.h>
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+
+ #ifdef IP_RECVERR
+ #include "errqueue.h"
+ #include <sys/uio.h>
+ #endif
+
+-/* CMSG_NXTHDR is using it */
+-
+-
+-extern u_long _create_xid (void) attribute_hidden;
+-
+ /*
+ * UDP bases client side rpc operations
+ */
+@@ -116,7 +105,7 @@
+ * NB: The rpch->cl_auth is initialized to null authentication.
+ * Caller may wish to set this something more useful.
+ *
+- * wait is the amount of time used between retransmitting a call if
++ * _wait is the amount of time used between retransmitting a call if
+ * no response has been heard; retransmission occurs until the actual
+ * rpc call times out.
+ *
+@@ -125,7 +114,7 @@
+ */
+ CLIENT *
+ clntudp_bufcreate (struct sockaddr_in *raddr, u_long program, u_long version,
+- struct timeval wait, int *sockp, u_int sendsz,
++ struct timeval _wait, int *sockp, u_int sendsz,
+ u_int recvsz)
+ {
+ CLIENT *cl;
+@@ -139,13 +128,7 @@
+ if (cl == NULL || cu == NULL)
+ {
+ struct rpc_createerr *ce = &get_rpc_createerr ();
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("clntudp_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("clntudp_create: out of memory\n"), stderr);
++ (void) fputs (_("clntudp_create: out of memory\n"), stderr);
+ ce->cf_stat = RPC_SYSTEMERROR;
+ ce->cf_error.re_errno = ENOMEM;
+ goto fooy;
+@@ -166,7 +149,7 @@
+ cl->cl_private = (caddr_t) cu;
+ cu->cu_raddr = *raddr;
+ cu->cu_rlen = sizeof (cu->cu_raddr);
+- cu->cu_wait = wait;
++ cu->cu_wait = _wait;
+ cu->cu_total.tv_sec = -1;
+ cu->cu_total.tv_usec = -1;
+ cu->cu_sendsz = sendsz;
+@@ -224,10 +207,10 @@
+ libc_hidden_def(clntudp_bufcreate)
+
+ CLIENT *
+-clntudp_create (struct sockaddr_in *raddr, u_long program, u_long version, struct timeval wait, int *sockp)
++clntudp_create (struct sockaddr_in *raddr, u_long program, u_long version, struct timeval _wait, int *sockp)
+ {
+
+- return clntudp_bufcreate (raddr, program, version, wait, sockp,
++ return clntudp_bufcreate (raddr, program, version, _wait, sockp,
+ UDPMSGSIZE, UDPMSGSIZE);
+ }
+ libc_hidden_def(clntudp_create)
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/clnt_unix.c uClibc-git/libc/inet/rpc/clnt_unix.c
+--- uClibc-0.9.33.2/libc/inet/rpc/clnt_unix.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/clnt_unix.c 2014-02-03 12:32:56.000000000 +0100
+@@ -46,24 +46,15 @@
+ * Now go hang yourself.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <netdb.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <unistd.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <sys/uio.h>
+ #include <sys/poll.h>
+ #include <sys/socket.h>
+ #include <rpc/pmap_clnt.h>
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+-
+-
+-extern u_long _create_xid (void) attribute_hidden;
+
+ #define MCALL_MSG_SIZE 24
+
+@@ -128,13 +119,7 @@
+ if (h == NULL || ct == NULL)
+ {
+ struct rpc_createerr *ce = &get_rpc_createerr ();
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("clntunix_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("clntunix_create: out of memory\n"), stderr);
++ (void) fputs (_("clntunix_create: out of memory\n"), stderr);
+ ce->cf_stat = RPC_SYSTEMERROR;
+ ce->cf_error.re_errno = ENOMEM;
+ goto fooy;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/create_xid.c uClibc-git/libc/inet/rpc/create_xid.c
+--- uClibc-0.9.33.2/libc/inet/rpc/create_xid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/create_xid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,17 +13,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define __FORCE_GLIBC
+-#include <features.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <sys/time.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+
+
+ /* The RPC code is not threadsafe, but new code should be threadsafe. */
+@@ -34,7 +30,6 @@
+ static smallint is_initialized;
+ static struct drand48_data __rpc_lrand48_data;
+
+-u_long _create_xid (void) attribute_hidden;
+ u_long _create_xid (void)
+ {
+ long res;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/errqueue.h uClibc-git/libc/inet/rpc/errqueue.h
+--- uClibc-0.9.33.2/libc/inet/rpc/errqueue.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/errqueue.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Linux version. */
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/get_myaddress.c uClibc-git/libc/inet/rpc/get_myaddress.c
+--- uClibc-0.9.33.2/libc/inet/rpc/get_myaddress.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/get_myaddress.c 2014-02-03 12:32:56.000000000 +0100
+@@ -44,6 +44,7 @@
+ #include <sys/socket.h>
+ #include <stdio.h>
+ #include <unistd.h>
++#include <libintl.h>
+ #include <net/if.h>
+ #include <sys/ioctl.h>
+ /* Order of following two #includes reversed by roland@gnu */
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/getrpcent.c uClibc-git/libc/inet/rpc/getrpcent.c
+--- uClibc-0.9.33.2/libc/inet/rpc/getrpcent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/getrpcent.c 2014-02-03 12:32:56.000000000 +0100
+@@ -33,8 +33,6 @@
+ * Copyright (c) 1985 by Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <sys/types.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/getrpcport.c uClibc-git/libc/inet/rpc/getrpcport.c
+--- uClibc-0.9.33.2/libc/inet/rpc/getrpcport.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/getrpcport.c 2014-02-03 12:32:56.000000000 +0100
+@@ -35,9 +35,6 @@
+ * Copyright (c) 1985 by Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <alloca.h>
+ #include <errno.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/Makefile.in uClibc-git/libc/inet/rpc/Makefile.in
+--- uClibc-0.9.33.2/libc/inet/rpc/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -9,9 +9,8 @@
+
+ CFLAGS-rpc := -fno-strict-aliasing
+
+-ifneq ($(UCLIBC_HAS_FULL_RPC),y)
+ # For now, only compile the stuff needed to do an NFS mount....
+-CSRC:= authunix_prot.c auth_none.c auth_unix.c bindresvport.c \
++CSRC_NFS = authunix_prot.c auth_none.c auth_unix.c bindresvport.c \
+ clnt_perror.c clnt_simple.c clnt_tcp.c clnt_udp.c \
+ create_xid.c getrpcent.c \
+ pmap_clnt.c pm_getmaps.c pm_getport.c pmap_prot.c pmap_prot2.c \
+@@ -19,27 +18,23 @@
+ rpc_prot.c rpc_thread.c rtime.c ruserpass.c sa_len.c \
+ svc.c svc_auth.c svc_authux.c \
+ xdr.c xdr_array.c xdr_mem.c xdr_rec.c xdr_reference.c
+-endif
+
+ INET_RPC_DIR:=$(top_srcdir)libc/inet/rpc
+ INET_RPC_OUT:=$(top_builddir)libc/inet/rpc
+
+-ifeq ($(UCLIBC_HAS_FULL_RPC),y)
+-INET_RPC_SRC:=$(wildcard $(INET_RPC_DIR)/*.c)
+-else
+-INET_RPC_SRC:=$(patsubst %.c,$(INET_RPC_DIR)/%.c,$(CSRC))
+-endif
+-# rpc_thread.oS is better, because the header adds unneeded references to __pthread_internal_tsd*
+-INET_RPC_SRC:=$(filter-out $(INET_RPC_DIR)/rpc_thread.c,$(INET_RPC_SRC))
++CSRC_ALL = $(notdir $(wildcard $(INET_RPC_DIR)/*.c))
++CSRC-y := $(if $(UCLIBC_HAS_FULL_RPC),$(CSRC_ALL),$(CSRC_NFS))
++# rpc_thread.oS is better, because the header adds unneeded references
++# to __pthread_internal_tsd*
++CSRC-y := $(filter-out rpc_thread.c,$(CSRC-y))
+
+-INET_RPC_OBJ:=$(patsubst $(INET_RPC_DIR)/%.c,$(INET_RPC_OUT)/%.o,$(INET_RPC_SRC))
+-
+-libc-static-$(UCLIBC_HAS_RPC)+=$(INET_RPC_OUT)/rpc_thread.o
+-libc-shared-$(UCLIBC_HAS_RPC)+=$(INET_RPC_OUT)/rpc_thread.oS
++INET_RPC_SRC:=$(patsubst %.c,$(INET_RPC_DIR)/%.c,$(CSRC-y))
++INET_RPC_OBJ:=$(patsubst %.c,$(INET_RPC_OUT)/%.o,$(CSRC-y))
+
++libc-static-$(UCLIBC_HAS_RPC) += $(INET_RPC_OUT)/rpc_thread.o
++libc-shared-$(UCLIBC_HAS_RPC) += $(INET_RPC_OUT)/rpc_thread.oS
+ libc-nomulti-$(UCLIBC_HAS_RPC) += $(INET_RPC_OUT)/rpc_thread.o
+-
+-libc-$(UCLIBC_HAS_RPC)+=$(INET_RPC_OBJ)
++libc-$(UCLIBC_HAS_RPC) += $(INET_RPC_OBJ)
+
+ objclean-y+=CLEAN_libc/inet/rpc
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/pmap_clnt.c uClibc-git/libc/inet/rpc/pmap_clnt.c
+--- uClibc-0.9.33.2/libc/inet/rpc/pmap_clnt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/pmap_clnt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -34,9 +34,6 @@
+ * Client interface to pmap rpc service.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <net/if.h>
+@@ -44,7 +41,7 @@
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <rpc/pmap_prot.h>
+ #include <rpc/pmap_clnt.h>
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/pmap_rmt.c uClibc-git/libc/inet/rpc/pmap_rmt.c
+--- uClibc-0.9.33.2/libc/inet/rpc/pmap_rmt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/pmap_rmt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -39,12 +39,9 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <unistd.h>
+ #include <string.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <rpc/pmap_prot.h>
+ #include <rpc/pmap_clnt.h>
+ #include <rpc/pmap_rmt.h>
+@@ -52,17 +49,12 @@
+ #include <sys/socket.h>
+ #include <stdio.h>
+ #include <errno.h>
+-#undef _POSIX_SOURCE /* Ultrix <sys/param.h> needs --roland@gnu */
+ #include <sys/param.h> /* Ultrix needs before net/if --roland@gnu */
+ #include <net/if.h>
+ #include <sys/ioctl.h>
+ #include <arpa/inet.h>
+ #define MAX_BROADCAST_SIZE 1400
+
+-
+-
+-extern u_long _create_xid (void) attribute_hidden;
+-
+ static const struct timeval timeout = {3, 0};
+
+ /*
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/pm_getmaps.c uClibc-git/libc/inet/rpc/pm_getmaps.c
+--- uClibc-0.9.33.2/libc/inet/rpc/pm_getmaps.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/pm_getmaps.c 2014-02-03 12:32:56.000000000 +0100
+@@ -39,7 +39,7 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <rpc/pmap_prot.h>
+ #include <rpc/pmap_clnt.h>
+ #include <netdb.h>
+@@ -78,7 +78,7 @@
+ }
+ CLNT_DESTROY (client);
+ }
+- /* (void)__close(_socket); CLNT_DESTROY already closed it */
++ /* (void)close(_socket); CLNT_DESTROY already closed it */
+ address->sin_port = 0;
+ return head;
+ }
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/pm_getport.c uClibc-git/libc/inet/rpc/pm_getport.c
+--- uClibc-0.9.33.2/libc/inet/rpc/pm_getport.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/pm_getport.c 2014-02-03 12:32:56.000000000 +0100
+@@ -65,7 +65,19 @@
+ struct pmap parms;
+
+ address->sin_port = htons (PMAPPORT);
+- client = clntudp_bufcreate (address, PMAPPROG,
++ if (protocol == IPPROTO_TCP)
++ {
++ // glibc does this:
++ ///* Don't need a reserved port to get ports from the portmapper. */
++ //socket = __get_socket(address); // does socket(TCP),bind(),connect(address)
++ //if (_socket != -1)
++ // closeit = true;
++ // do we need/want to do the same?
++ client = clnttcp_create (address, PMAPPROG,
++ PMAPVERS, &_socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
++ }
++ else
++ client = clntudp_bufcreate (address, PMAPPROG,
+ PMAPVERS, timeout, &_socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
+ if (client != (CLIENT *) NULL)
+ {
+@@ -87,7 +99,7 @@
+ }
+ CLNT_DESTROY (client);
+ }
+- /* (void)__close(_socket); CLNT_DESTROY already closed it */
++ /* (void)close(_socket); CLNT_DESTROY already closed it */
+ address->sin_port = 0;
+ return port;
+ }
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rcmd.c uClibc-git/libc/inet/rpc/rcmd.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rcmd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rcmd.c 2014-02-03 12:32:56.000000000 +0100
+@@ -76,7 +76,6 @@
+ #include <pwd.h>
+ #include <errno.h>
+ #include <stdio.h>
+-#include <stdio_ext.h>
+ #include <ctype.h>
+ #include <string.h>
+ #include <libintl.h>
+@@ -87,6 +86,11 @@
+ #include <sys/uio.h>
+ #include <bits/uClibc_alloc.h>
+
++/* sigsetmask and sigblock are not provided anymore, until this file is corrected,
++ * include the sources */
++#include "../../signal/sigblock.c"
++#include "../../signal/sigsetmask.c"
++
+
+ /* some forward declarations */
+ static int __ivaliduser2(FILE *hostf, u_int32_t raddr,
+@@ -146,7 +150,7 @@
+ pfd[1].events = POLLIN;
+
+ *ahost = hp->h_name;
+- oldmask = sigblock(sigmask(SIGURG)); /* __sigblock */
++ oldmask = sigblock(__sigmask(SIGURG)); /* sigblock */
+ for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
+ s = rresvport(&lport);
+ if (s < 0) {
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rexec.c uClibc-git/libc/inet/rpc/rexec.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rexec.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rexec.c 2014-02-03 12:32:56.000000000 +0100
+@@ -27,8 +27,6 @@
+ * SUCH DAMAGE.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rpc_cmsg.c uClibc-git/libc/inet/rpc/rpc_cmsg.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rpc_cmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rpc_cmsg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -38,9 +38,6 @@
+ *
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <string.h>
+ #include <sys/param.h>
+ #include <rpc/rpc.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rpc_dtablesize.c uClibc-git/libc/inet/rpc/rpc_dtablesize.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rpc_dtablesize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rpc_dtablesize.c 2014-02-03 12:32:56.000000000 +0100
+@@ -31,10 +31,6 @@
+ static char sccsid[] = "@(#)rpc_dtablesize.c 1.2 87/08/11 Copyr 1987 Sun Micro";
+ #endif
+
+-#define __FORCE_GLIBC
+-#define __USE_BSD
+-#include <features.h>
+-
+ #include <unistd.h>
+ #include <rpc/clnt.h>
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rpc_private.h uClibc-git/libc/inet/rpc/rpc_private.h
+--- uClibc-0.9.33.2/libc/inet/rpc/rpc_private.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rpc_private.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,7 @@
+-#ifndef _RPC_RPC_H
++#ifndef _RPC_PRIVATE_H
++#define _RPC_PRIVATE_H
+ #include <rpc/rpc.h>
++#include <libintl.h>
+
+ /* Now define the internal interfaces. */
+ extern u_long _create_xid (void) attribute_hidden;
+@@ -12,14 +14,13 @@
+ */
+ #ifdef __UCLIBC_HAS_THREADS__
+ #include <pthread.h>
++#include <bits/libc-lock.h>
+ struct rpc_thread_variables {
+ fd_set svc_fdset_s; /* Global, rpc_common.c */
+ struct rpc_createerr rpc_createerr_s; /* Global, rpc_common.c */
+ struct pollfd *svc_pollfd_s; /* Global, rpc_common.c */
+ int svc_max_pollfd_s; /* Global, rpc_common.c */
+
+- void *authnone_private_s; /* auth_none.c */
+-
+ void *clnt_perr_buf_s; /* clnt_perr.c */
+
+ void *clntraw_private_s; /* clnt_raw.c */
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rpc_prot.c uClibc-git/libc/inet/rpc/rpc_prot.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rpc_prot.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rpc_prot.c 2014-02-03 12:32:56.000000000 +0100
+@@ -44,9 +44,6 @@
+ * routines are also in this program.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <sys/param.h>
+
+ #include <rpc/rpc.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rpc_thread.c uClibc-git/libc/inet/rpc/rpc_thread.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rpc_thread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rpc_thread.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,8 +4,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <stdio.h>
+ #include <assert.h>
+ #include "rpc_private.h"
+@@ -32,7 +30,6 @@
+ __rpc_thread_svc_cleanup ();
+ __rpc_thread_clnt_cleanup ();
+ /*__rpc_thread_key_cleanup (); */
+- free (tvp->authnone_private_s);
+ free (tvp->clnt_perr_buf_s);
+ free (tvp->clntraw_private_s);
+ free (tvp->svcraw_private_s);
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/rtime.c uClibc-git/libc/inet/rpc/rtime.c
+--- uClibc-0.9.33.2/libc/inet/rpc/rtime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/rtime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -43,9 +43,6 @@
+ * what unix uses.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <rpc/rpc.h>
+@@ -150,4 +147,3 @@
+ timep->tv_usec = 0;
+ return 0;
+ }
+-libc_hidden_def (rtime)
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/ruserpass.c uClibc-git/libc/inet/rpc/ruserpass.c
+--- uClibc-0.9.33.2/libc/inet/rpc/ruserpass.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/ruserpass.c 2014-02-03 12:32:56.000000000 +0100
+@@ -27,8 +27,6 @@
+ * SUCH DAMAGE.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
+@@ -37,13 +35,14 @@
+ #include <errno.h>
+ #include <netdb.h>
+ #include <stdio.h>
+-#include <stdio_ext.h>
++#ifdef __UCLIBC_HAS_THREADS__
++# include <stdio_ext.h>
++#endif
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <libintl.h>
+
+-
+-#define _(X) (X)
+ /* #include "ftp_var.h" */
+
+ static int token (void);
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/sa_len.c uClibc-git/libc/inet/rpc/sa_len.c
+--- uClibc-0.9.33.2/libc/inet/rpc/sa_len.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/sa_len.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,17 +12,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+-#include <netipx/ipx.h>
+ #include <sys/un.h>
+ #if 0
++#include <netipx/ipx.h>
+ #include <netash/ash.h>
+ #include <netatalk/at.h>
+ #include <netax25/ax25.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_auth.c uClibc-git/libc/inet/rpc/svc_auth.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_auth.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_auth.c 2014-02-03 12:32:56.000000000 +0100
+@@ -58,9 +58,9 @@
+
+ static enum auth_stat _svcauth_null (struct svc_req *, struct rpc_msg *);
+ /* no authentication */
+-extern enum auth_stat _svcauth_unix (struct svc_req *, struct rpc_msg *);
++extern enum auth_stat _svcauth_unix (struct svc_req *, struct rpc_msg *) attribute_hidden;
+ /* unix style (uid, gids) */
+-extern enum auth_stat _svcauth_short (struct svc_req *, struct rpc_msg *);
++extern enum auth_stat _svcauth_short (struct svc_req *, struct rpc_msg *) attribute_hidden;
+ /* short hand unix style */
+ #ifdef CONFIG_AUTH_DES
+ extern enum auth_stat _svcauth_des (struct svc_req *, struct rpc_msg *);
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_authux.c uClibc-git/libc/inet/rpc/svc_authux.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_authux.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_authux.c 2014-02-03 12:32:56.000000000 +0100
+@@ -38,9 +38,6 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <string.h>
+ #include <rpc/rpc.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc.c uClibc-git/libc/inet/rpc/svc.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -36,9 +36,6 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <errno.h>
+ #include <unistd.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_raw.c uClibc-git/libc/inet/rpc/svc_raw.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_raw.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_raw.c 2014-02-03 12:32:56.000000000 +0100
+@@ -40,8 +40,6 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include "rpc_private.h"
+ #include <rpc/svc.h>
+
+@@ -69,7 +67,7 @@
+ static bool_t svcraw_freeargs (SVCXPRT *, xdrproc_t, caddr_t);
+ static void svcraw_destroy (SVCXPRT *);
+
+-static struct xp_ops server_ops =
++static const struct xp_ops server_ops =
+ {
+ svcraw_recv,
+ svcraw_stat,
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_run.c uClibc-git/libc/inet/rpc/svc_run.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_run.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_run.c 2014-02-03 12:32:56.000000000 +0100
+@@ -31,13 +31,10 @@
+ * Wait for input, call server program.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <errno.h>
+ #include <unistd.h>
+ #include <sys/poll.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+
+ /* used by svc_[max_]pollfd */
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_simple.c uClibc-git/libc/inet/rpc/svc_simple.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_simple.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_simple.c 2014-02-03 12:32:56.000000000 +0100
+@@ -38,9 +38,6 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
+@@ -49,13 +46,6 @@
+ #include <sys/socket.h>
+ #include <netdb.h>
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fputs(s, f) _IO_fputs (s, f)
+-#endif
+-
+-
+ struct proglst_
+ {
+ char *(*p_progname) (char *);
+@@ -127,12 +117,7 @@
+ return 0;
+
+ err_out:
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) __fwprintf (stderr, L"%s", buf);
+- else
+-#endif
+- (void) fputs (buf, stderr);
++ (void) fputs (buf, stderr);
+ free (buf);
+ return -1;
+ }
+@@ -186,12 +171,7 @@
+ return;
+ }
+ (void) asprintf (&buf, _("never registered prog %d\n"), prog);
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- __fwprintf (stderr, L"%s", buf);
+- else
+-#endif
+- fputs (buf, stderr);
++ fputs (buf, stderr);
+ free (buf);
+ exit (1);
+ }
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_tcp.c uClibc-git/libc/inet/rpc/svc_tcp.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_tcp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_tcp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -41,25 +41,15 @@
+ * and a record/tcp stream.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <string.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <sys/socket.h>
+ #include <sys/poll.h>
+ #include <errno.h>
+ #include <stdlib.h>
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fputs(s, f) _IO_fputs (s, f)
+-#endif
+-
+-
+ /*
+ * Ops vector for TCP/IP based rpc service handle
+ */
+@@ -180,12 +170,7 @@
+ xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));
+ if (r == NULL || xprt == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) __fwprintf (stderr, L"%s", _("svctcp_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("svctcp_create: out of memory\n"), stderr);
++ (void) fputs (_("svctcp_create: out of memory\n"), stderr);
+ mem_free (r, sizeof (*r));
+ mem_free (xprt, sizeof (SVCXPRT));
+ return NULL;
+@@ -225,13 +210,7 @@
+ cd = (struct tcp_conn *) mem_alloc (sizeof (struct tcp_conn));
+ if (xprt == (SVCXPRT *) NULL || cd == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) __fwprintf (stderr, L"%s",
+- _("svc_tcp: makefd_xprt: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr);
++ (void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr);
+ mem_free (xprt, sizeof (SVCXPRT));
+ mem_free (cd, sizeof (struct tcp_conn));
+ return NULL;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_udp.c uClibc-git/libc/inet/rpc/svc_udp.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_udp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_udp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -39,13 +39,10 @@
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <string.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <sys/socket.h>
+ #include <errno.h>
+
+@@ -53,13 +50,6 @@
+ #include <sys/uio.h>
+ #endif
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fputs(s, f) _IO_fputs (s, f)
+-#endif
+-
+-
+ #define rpc_buffer(xprt) ((xprt)->xp_p1)
+ #ifndef MAX
+ #define MAX(a, b) ((a > b) ? a : b)
+@@ -151,12 +141,7 @@
+ buf = mem_alloc (((MAX (sendsz, recvsz) + 3) / 4) * 4);
+ if (xprt == NULL || su == NULL || buf == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s", _("svcudp_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("svcudp_create: out of memory\n"), stderr);
++ (void) fputs (_("svcudp_create: out of memory\n"), stderr);
+ mem_free (xprt, sizeof (SVCXPRT));
+ mem_free (su, sizeof (*su));
+ mem_free (buf, ((MAX (sendsz, recvsz) + 3) / 4) * 4);
+@@ -177,13 +162,7 @@
+ + sizeof(struct cmsghdr) + sizeof (struct in_pktinfo))
+ > sizeof (xprt->xp_pad))
+ {
+-# ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("svcudp_create: xp_pad is too small for IP_PKTINFO\n"));
+- else
+-# endif
+- (void) fputs (_("svcudp_create: xp_pad is too small for IP_PKTINFO\n"),
++ (void) fputs (_("svcudp_create: xp_pad is too small for IP_PKTINFO\n"),
+ stderr);
+ return NULL;
+ }
+@@ -378,16 +357,8 @@
+
+ #define SPARSENESS 4 /* 75% sparse */
+
+-#ifdef USE_IN_LIBIO
+-# define CACHE_PERROR(msg) \
+- if (_IO_fwide (stderr, 0) > 0) \
+- (void) __fwprintf(stderr, L"%s\n", msg); \
+- else \
+- (void) fprintf(stderr, "%s\n", msg)
+-#else
+-# define CACHE_PERROR(msg) \
++#define CACHE_PERROR(msg) \
+ (void) fprintf(stderr,"%s\n", msg)
+-#endif
+
+ #define ALLOC(type, size) \
+ (type *) mem_alloc((unsigned) (sizeof(type) * (size)))
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/svc_unix.c uClibc-git/libc/inet/rpc/svc_unix.c
+--- uClibc-0.9.33.2/libc/inet/rpc/svc_unix.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/svc_unix.c 2014-02-03 12:32:56.000000000 +0100
+@@ -37,13 +37,10 @@
+ * and a record/unix stream.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <string.h>
+-#include <rpc/rpc.h>
++#include "rpc_private.h"
+ #include <rpc/svc.h>
+ #include <sys/socket.h>
+ #include <sys/uio.h>
+@@ -51,11 +48,6 @@
+ #include <errno.h>
+ #include <stdlib.h>
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+-
+-
+ /*
+ * Ops vector for AF_UNIX based rpc service handle
+ */
+@@ -176,12 +168,7 @@
+ xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));
+ if (r == NULL || xprt == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- __fwprintf (stderr, L"%s", _("svcunix_create: out of memory\n"));
+- else
+-#endif
+- fputs (_("svcunix_create: out of memory\n"), stderr);
++ fputs (_("svcunix_create: out of memory\n"), stderr);
+ mem_free (r, sizeof (*r));
+ mem_free (xprt, sizeof (SVCXPRT));
+ return NULL;
+@@ -221,13 +208,7 @@
+ cd = (struct unix_conn *) mem_alloc (sizeof (struct unix_conn));
+ if (xprt == (SVCXPRT *) NULL || cd == (struct unix_conn *) NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) __fwprintf (stderr, L"%s",
+- _("svc_unix: makefd_xprt: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("svc_unix: makefd_xprt: out of memory\n"), stderr);
++ (void) fputs (_("svc_unix: makefd_xprt: out of memory\n"), stderr);
+ mem_free (xprt, sizeof (SVCXPRT));
+ mem_free (cd, sizeof (struct unix_conn));
+ return NULL;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_array.c uClibc-git/libc/inet/rpc/xdr_array.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_array.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_array.c 2014-02-03 12:32:56.000000000 +0100
+@@ -40,23 +40,15 @@
+ * arrays. See xdr.h for more info on the interface to xdr.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <string.h>
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
+ #include <limits.h>
+-
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+-
++#include <libintl.h>
+
+ #define LASTUNSIGNED ((u_int)0-1)
+
+-
+ /*
+ * XDR an array of arbitrary elements
+ * *addrp is a pointer to the array, *sizep is the number of elements.
+@@ -102,13 +94,7 @@
+ *addrp = target = mem_alloc (nodesize);
+ if (target == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("xdr_array: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("xdr_array: out of memory\n"), stderr);
++ (void) fputs (_("xdr_array: out of memory\n"), stderr);
+ return FALSE;
+ }
+ memset (target, 0, nodesize);
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr.c uClibc-git/libc/inet/rpc/xdr.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -41,21 +41,14 @@
+ * xdr.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <limits.h>
+ #include <string.h>
++#include <libintl.h>
+
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
+
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-#endif
+-
+-
+ /*
+ * constants specific to the xdr "protocol"
+ */
+@@ -564,12 +557,7 @@
+ }
+ if (sp == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s", _("xdr_bytes: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("xdr_bytes: out of memory\n"), stderr);
++ (void) fputs (_("xdr_bytes: out of memory\n"), stderr);
+ return FALSE;
+ }
+ /* fall into ... */
+@@ -706,13 +694,7 @@
+ *cpp = sp = (char *) mem_alloc (nodesize);
+ if (sp == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("xdr_string: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("xdr_string: out of memory\n"), stderr);
++ (void) fputs (_("xdr_string: out of memory\n"), stderr);
+ return FALSE;
+ }
+ sp[size] = 0;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_float.c uClibc-git/libc/inet/rpc/xdr_float.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_float.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_float.c 2014-02-03 12:32:56.000000000 +0100
+@@ -41,9 +41,6 @@
+ * xdr.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <endian.h>
+
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_intXX_t.c uClibc-git/libc/inet/rpc/xdr_intXX_t.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_intXX_t.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_intXX_t.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
+@@ -47,6 +46,7 @@
+ return FALSE;
+ }
+ }
++strong_alias_untyped(xdr_int64_t,xdr_quad_t)
+
+ /* XDR 64bit unsigned integers */
+ bool_t
+@@ -75,6 +75,7 @@
+ return FALSE;
+ }
+ }
++strong_alias_untyped(xdr_uint64_t,xdr_u_quad_t)
+
+ /* XDR 32bit integers */
+ bool_t
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_mem.c uClibc-git/libc/inet/rpc/xdr_mem.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_mem.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_mem.c 2014-02-03 12:32:56.000000000 +0100
+@@ -77,9 +77,7 @@
+ xdrmem_create (XDR *xdrs, const caddr_t addr, u_int size, enum xdr_op op)
+ {
+ xdrs->x_op = op;
+- /* We have to add the const since the `struct xdr_ops' in `struct XDR'
+- is not `const'. */
+- xdrs->x_ops = (struct xdr_ops *) &xdrmem_ops;
++ xdrs->x_ops = &xdrmem_ops;
+ xdrs->x_private = xdrs->x_base = addr;
+ xdrs->x_handy = size;
+ }
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_rec.c uClibc-git/libc/inet/rpc/xdr_rec.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_rec.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_rec.c 2014-02-03 12:32:56.000000000 +0100
+@@ -44,21 +44,10 @@
+ * The other 31 bits encode the byte length of the fragment.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+-
+ #include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
+-#include <rpc/rpc.h>
+-
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fputs(s, f) _IO_fputs (s, f)
+-#endif
+-
++#include "rpc_private.h"
+
+ static bool_t xdrrec_getbytes (XDR *, caddr_t, u_int);
+ static bool_t xdrrec_putbytes (XDR *, const char *, u_int);
+@@ -165,12 +154,7 @@
+
+ if (rstrm == NULL || buf == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s", _("xdrrec_create: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("xdrrec_create: out of memory\n"), stderr);
++ (void) fputs (_("xdrrec_create: out of memory\n"), stderr);
+ mem_free (rstrm, sizeof (RECSTREAM));
+ mem_free (buf, sendsize + recvsize + BYTES_PER_XDR_UNIT);
+ /*
+@@ -193,9 +177,7 @@
+ /*
+ * now the rest ...
+ */
+- /* We have to add the const since the `struct xdr_ops' in `struct XDR'
+- is not `const'. */
+- xdrs->x_ops = (struct xdr_ops *) &xdrrec_ops;
++ xdrs->x_ops = &xdrrec_ops;
+ xdrs->x_private = (caddr_t) rstrm;
+ rstrm->tcp_handle = tcp_handle;
+ rstrm->readit = readit;
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_reference.c uClibc-git/libc/inet/rpc/xdr_reference.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_reference.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_reference.c 2014-02-03 12:32:56.000000000 +0100
+@@ -40,20 +40,11 @@
+ * "pointers". See xdr.h for more info on the interface to xdr.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+ #include <string.h>
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
+-
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fputs(s, f) _IO_fputs (s, f)
+-#endif
+-
++#include <libintl.h>
+
+ #define LASTUNSIGNED ((u_int)0-1)
+
+@@ -82,13 +73,7 @@
+ *pp = loc = (caddr_t) mem_alloc (size);
+ if (loc == NULL)
+ {
+-#ifdef USE_IN_LIBIO
+- if (_IO_fwide (stderr, 0) > 0)
+- (void) fwprintf (stderr, L"%s",
+- _("xdr_reference: out of memory\n"));
+- else
+-#endif
+- (void) fputs (_("xdr_reference: out of memory\n"), stderr);
++ (void) fputs (_("xdr_reference: out of memory\n"), stderr);
+ return FALSE;
+ }
+ memset (loc, 0, (int) size);
+diff -Nur uClibc-0.9.33.2/libc/inet/rpc/xdr_stdio.c uClibc-git/libc/inet/rpc/xdr_stdio.c
+--- uClibc-0.9.33.2/libc/inet/rpc/xdr_stdio.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/rpc/xdr_stdio.c 2014-02-03 12:32:56.000000000 +0100
+@@ -41,15 +41,6 @@
+ #include <stdio.h>
+ #include <rpc/xdr.h>
+
+-#ifdef USE_IN_LIBIO
+-# include <libio/iolibio.h>
+-# define fflush(s) _IO_fflush (s)
+-# define fread(p, m, n, s) _IO_fread (p, m, n, s)
+-# define ftell(s) _IO_ftell (s)
+-# define fwrite(p, m, n, s) _IO_fwrite (p, m, n, s)
+-#endif
+-
+-
+ static bool_t xdrstdio_getlong (XDR *, long *);
+ static bool_t xdrstdio_putlong (XDR *, const long *);
+ static bool_t xdrstdio_getbytes (XDR *, caddr_t, u_int);
+@@ -87,9 +78,7 @@
+ xdrstdio_create (XDR *xdrs, FILE *file, enum xdr_op op)
+ {
+ xdrs->x_op = op;
+- /* We have to add the const since the `struct xdr_ops' in `struct XDR'
+- is not `const'. */
+- xdrs->x_ops = (struct xdr_ops *) &xdrstdio_ops;
++ xdrs->x_ops = &xdrstdio_ops;
+ xdrs->x_private = (caddr_t) file;
+ xdrs->x_handy = 0;
+ xdrs->x_base = 0;
+diff -Nur uClibc-0.9.33.2/libc/inet/socketcalls.c uClibc-git/libc/inet/socketcalls.c
+--- uClibc-0.9.33.2/libc/inet/socketcalls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/inet/socketcalls.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,15 +4,12 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-#include <errno.h>
+-#include <syscall.h>
++#include <stddef.h>
++#include <sys/syscall.h>
+ #include <sys/socket.h>
++#include <cancel.h>
+
+ #ifdef __NR_socketcall
+-extern int __socketcall(int call, unsigned long *args) attribute_hidden;
+-
+ /* Various socketcall numbers */
+ #define SYS_SOCKET 1
+ #define SYS_BIND 2
+@@ -34,53 +31,24 @@
+ #define SYS_ACCEPT4 18
+ #endif
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#include <pthreadP.h>
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+ #ifdef L_accept
+-extern __typeof(accept) __libc_accept;
+-#ifdef __NR_accept
+-#define __NR___sys_accept __NR_accept
+-static
+-_syscall3(int, __sys_accept, int, call, struct sockaddr *, addr, socklen_t *,addrlen)
+-int __libc_accept(int s, struct sockaddr *addr, socklen_t * addrlen)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_accept(s, addr, addrlen);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_accept(s, addr, addrlen);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-int __libc_accept(int s, struct sockaddr *addr, socklen_t * addrlen)
++static int __NC(accept)(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
+ {
++# ifdef __NR_accept
++ return INLINE_SYSCALL(accept, 3, sockfd, addr, addrlen);
++# else
+ unsigned long args[3];
+
+- args[0] = s;
++ args[0] = sockfd;
+ args[1] = (unsigned long) addr;
+ args[2] = (unsigned long) addrlen;
+
+- if (SINGLE_THREAD_P)
+- return __socketcall(SYS_ACCEPT, args);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_ACCEPT, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
++ return __socketcall(SYS_ACCEPT, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_accept,accept)
+-libc_hidden_weak(accept)
++CANCELLABLE_SYSCALL(int, accept, (int sockfd, struct sockaddr *addr, socklen_t *addrlen),
++ (sockfd, addr, addrlen))
++lt_libc_hidden(accept)
+ #endif
+
+ #ifdef L_accept4
+@@ -124,104 +92,81 @@
+ #endif
+
+ #ifdef L_bind
+-#ifdef __NR_bind
+-_syscall3(int, bind, int, sockfd, const struct sockaddr *, myaddr, socklen_t, addrlen)
+-#elif defined(__NR_socketcall)
+ int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen)
+ {
++# ifdef __NR_bind
++ return INLINE_SYSCALL(bind, 3, sockfd, myaddr, addrlen);
++# else
+ unsigned long args[3];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) myaddr;
+ args[2] = addrlen;
+ return __socketcall(SYS_BIND, args);
++# endif
+ }
+-#endif
+ libc_hidden_def(bind)
+ #endif
+
+ #ifdef L_connect
+-extern __typeof(connect) __libc_connect;
+-#ifdef __NR_connect
+-#define __NR___sys_connect __NR_connect
+-static
+-_syscall3(int, __sys_connect, int, sockfd, const struct sockaddr *, saddr, socklen_t, addrlen)
+-int __libc_connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_connect(sockfd, saddr, addrlen);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_connect(sockfd, saddr, addrlen);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-int __libc_connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
++static int __NC(connect)(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
+ {
++# ifdef __NR_connect
++ return INLINE_SYSCALL(connect, 3, sockfd, saddr, addrlen);
++# else
+ unsigned long args[3];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) saddr;
+ args[2] = addrlen;
+-
+- if (SINGLE_THREAD_P)
+- return __socketcall(SYS_CONNECT, args);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_CONNECT, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
++ return __socketcall(SYS_CONNECT, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_connect,connect)
+-libc_hidden_weak(connect)
++CANCELLABLE_SYSCALL(int, connect, (int sockfd, const struct sockaddr *saddr, socklen_t addrlen),
++ (sockfd, saddr, addrlen))
++lt_libc_hidden(connect)
+ #endif
+
+ #ifdef L_getpeername
+-#ifdef __NR_getpeername
+-_syscall3(int, getpeername, int, sockfd, struct sockaddr *, addr, socklen_t *,paddrlen)
+-#elif defined(__NR_socketcall)
+-int getpeername(int sockfd, struct sockaddr *addr, socklen_t * paddrlen)
++int getpeername(int sockfd, struct sockaddr *addr, socklen_t *paddrlen)
+ {
++# ifdef __NR_getpeername
++ return INLINE_SYSCALL(getpeername, 3, sockfd, addr, paddrlen);
++# else
+ unsigned long args[3];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) addr;
+ args[2] = (unsigned long) paddrlen;
+ return __socketcall(SYS_GETPEERNAME, args);
++# endif
+ }
+ #endif
+-#endif
+
+ #ifdef L_getsockname
+-#ifdef __NR_getsockname
+-_syscall3(int, getsockname, int, sockfd, struct sockaddr *, addr, socklen_t *,paddrlen)
+-#elif defined(__NR_socketcall)
+ int getsockname(int sockfd, struct sockaddr *addr, socklen_t * paddrlen)
+ {
++# ifdef __NR_getsockname
++ return INLINE_SYSCALL(getsockname, 3, sockfd, addr, paddrlen);
++# else
+ unsigned long args[3];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) addr;
+ args[2] = (unsigned long) paddrlen;
+ return __socketcall(SYS_GETSOCKNAME, args);
++# endif
+ }
+-#endif
+ libc_hidden_def(getsockname)
+ #endif
+
+ #ifdef L_getsockopt
+-#ifdef __NR_getsockopt
+-_syscall5(int, getsockopt, int, fd, int, level, int, optname, __ptr_t, optval, socklen_t *, optlen)
+-#elif defined(__NR_socketcall)
+-int getsockopt(int fd, int level, int optname, __ptr_t optval,
+- socklen_t * optlen)
++int getsockopt(int fd, int level, int optname, void *optval,
++ socklen_t *optlen)
+ {
++# ifdef __NR_getsockopt
++ return INLINE_SYSCALL(getsockopt, 5, fd, level, optname, optval, optlen);
++# else
+ unsigned long args[5];
+
+ args[0] = fd;
+@@ -230,101 +175,56 @@
+ args[3] = (unsigned long) optval;
+ args[4] = (unsigned long) optlen;
+ return (__socketcall(SYS_GETSOCKOPT, args));
++# endif
+ }
+ #endif
+-#endif
+
+ #ifdef L_listen
+-#ifdef __NR_listen
+-_syscall2(int, listen, int, sockfd, int, backlog)
+-#elif defined(__NR_socketcall)
+ int listen(int sockfd, int backlog)
+ {
++# ifdef __NR_listen
++ return INLINE_SYSCALL(listen, 2, sockfd, backlog);
++# else
+ unsigned long args[2];
+
+ args[0] = sockfd;
+ args[1] = backlog;
+ return __socketcall(SYS_LISTEN, args);
++# endif
+ }
+-#endif
+ libc_hidden_def(listen)
+ #endif
+
+ #ifdef L_recv
+-extern __typeof(recv) __libc_recv;
+-#ifdef __NR_recv
+-#define __NR___sys_recv __NR_recv
+-static
+-_syscall4(ssize_t, __sys_recv, int, sockfd, __ptr_t, buffer, size_t, len,
+- int, flags)
+-ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_recv(sockfd, buffer, len, flags);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_recv(sockfd, buffer, len, flags);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-/* recv, recvfrom added by bir7@leland.stanford.edu */
+-ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
++static ssize_t __NC(recv)(int sockfd, void *buffer, size_t len, int flags)
+ {
++# ifdef __NR_recv
++ return (ssize_t)INLINE_SYSCALL(recv, 4, sockfd, buffer, len, flags);
++# elif defined __NR_recvfrom && defined _syscall6
++ return __NC(recvfrom)(sockfd, buffer, len, flags, NULL, NULL);
++# else
+ unsigned long args[4];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) buffer;
+ args[2] = len;
+ args[3] = flags;
+-
+- if (SINGLE_THREAD_P)
+- return (__socketcall(SYS_RECV, args));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_RECV, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_recvfrom)
+-ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
+-{
+- return (recvfrom(sockfd, buffer, len, flags, NULL, NULL));
++ return (ssize_t)__socketcall(SYS_RECV, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_recv,recv)
+-libc_hidden_weak(recv)
++CANCELLABLE_SYSCALL(ssize_t, recv, (int sockfd, void *buffer, size_t len, int flags),
++ (sockfd, buffer, len, flags))
++lt_libc_hidden(recv)
+ #endif
+
+ #ifdef L_recvfrom
+-extern __typeof(recvfrom) __libc_recvfrom;
+-#ifdef __NR_recvfrom
+-#define __NR___sys_recvfrom __NR_recvfrom
+-static
+-_syscall6(ssize_t, __sys_recvfrom, int, sockfd, __ptr_t, buffer, size_t, len,
+- int, flags, struct sockaddr *, to, socklen_t *, tolen)
+-ssize_t __libc_recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,
+- struct sockaddr *to, socklen_t * tolen)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_recvfrom(sockfd, buffer, len, flags, to, tolen);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_recvfrom(sockfd, buffer, len, flags, to, tolen);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-/* recv, recvfrom added by bir7@leland.stanford.edu */
+-ssize_t __libc_recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,
+- struct sockaddr *to, socklen_t * tolen)
++ssize_t __NC(recvfrom)(int sockfd, void *buffer, size_t len, int flags,
++ struct sockaddr *to, socklen_t *tolen)
+ {
++# if defined __NR_recvfrom && defined _syscall6
++ return (ssize_t)INLINE_SYSCALL(recvfrom, 6, sockfd, buffer, len,
++ flags, to, tolen);
++# else
+ unsigned long args[6];
+
+ args[0] = sockfd;
+@@ -333,180 +233,82 @@
+ args[3] = flags;
+ args[4] = (unsigned long) to;
+ args[5] = (unsigned long) tolen;
+-
+- if (SINGLE_THREAD_P)
+- return (__socketcall(SYS_RECVFROM, args));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_RECVFROM, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
++ return (ssize_t)__socketcall(SYS_RECVFROM, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_recvfrom,recvfrom)
+-libc_hidden_weak(recvfrom)
++CANCELLABLE_SYSCALL(ssize_t, recvfrom, (int sockfd, void *buffer, size_t len,
++ int flags, struct sockaddr *to, socklen_t *tolen),
++ (sockfd, buffer, len, flags, to, tolen))
++lt_libc_hidden(recvfrom)
+ #endif
+
+ #ifdef L_recvmsg
+-extern __typeof(recvmsg) __libc_recvmsg;
+-#ifdef __NR_recvmsg
+-#define __NR___sys_recvmsg __NR_recvmsg
+-static
+-_syscall3(ssize_t, __sys_recvmsg, int, sockfd, struct msghdr *, msg, int, flags)
+-ssize_t __libc_recvmsg(int sockfd, struct msghdr *msg, int flags)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_recvmsg(sockfd, msg, flags);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_recvmsg(sockfd, msg, flags);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-ssize_t __libc_recvmsg(int sockfd, struct msghdr *msg, int flags)
++static ssize_t __NC(recvmsg)(int sockfd, struct msghdr *msg, int flags)
+ {
++# ifdef __NR_recvmsg
++ return (ssize_t)INLINE_SYSCALL(recvmsg, 3, sockfd, msg, flags);
++# else
+ unsigned long args[3];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) msg;
+ args[2] = flags;
+-
+- if (SINGLE_THREAD_P)
+- return (__socketcall(SYS_RECVMSG, args));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_RECVMSG, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
++ return (ssize_t)__socketcall(SYS_RECVMSG, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_recvmsg,recvmsg)
+-libc_hidden_weak(recvmsg)
++CANCELLABLE_SYSCALL(ssize_t, recvmsg, (int sockfd, struct msghdr *msg, int flags),
++ (sockfd, msg, flags))
++lt_libc_hidden(recvmsg)
+ #endif
+
+ #ifdef L_send
+-extern __typeof(send) __libc_send;
+-#ifdef __NR_send
+-#define __NR___sys_send __NR_send
+-static
+-_syscall4(ssize_t, __sys_send, int, sockfd, const void *, buffer, size_t, len, int, flags)
+-ssize_t __libc_send(int sockfd, const void *buffer, size_t len, int flags)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_send(sockfd, buffer, len, flags);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_send(sockfd, buffer, len, flags);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-/* send, sendto added by bir7@leland.stanford.edu */
+-ssize_t __libc_send(int sockfd, const void *buffer, size_t len, int flags)
++static ssize_t __NC(send)(int sockfd, const void *buffer, size_t len, int flags)
+ {
++# ifdef __NR_send
++ return (ssize_t)INLINE_SYSCALL(send, 4, sockfd, buffer, len, flags);
++# elif defined __NR_sendto && defined _syscall6
++ return __NC(sendto)(sockfd, buffer, len, flags, NULL, 0);
++# else
+ unsigned long args[4];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) buffer;
+ args[2] = len;
+ args[3] = flags;
+-
+- if (SINGLE_THREAD_P)
+- return (__socketcall(SYS_SEND, args));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_SEND, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-
+-#elif defined(__NR_sendto)
+-ssize_t __libc_send(int sockfd, const void *buffer, size_t len, int flags)
+-{
+- return (sendto(sockfd, buffer, len, flags, NULL, 0));
++ return (ssize_t)__socketcall(SYS_SEND, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_send,send)
+-libc_hidden_weak(send)
++CANCELLABLE_SYSCALL(ssize_t, send, (int sockfd, const void *buffer, size_t len, int flags),
++ (sockfd, buffer, len, flags))
++lt_libc_hidden(send)
+ #endif
+
+ #ifdef L_sendmsg
+-extern __typeof(sendmsg) __libc_sendmsg;
+-#ifdef __NR_sendmsg
+-#define __NR___sys_sendmsg __NR_sendmsg
+-static
+-_syscall3(ssize_t, __sys_sendmsg, int, sockfd, const struct msghdr *, msg, int, flags)
+-ssize_t __libc_sendmsg(int sockfd, const struct msghdr *msg, int flags)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_sendmsg(sockfd, msg, flags);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_sendmsg(sockfd, msg, flags);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-ssize_t __libc_sendmsg(int sockfd, const struct msghdr *msg, int flags)
++static ssize_t __NC(sendmsg)(int sockfd, const struct msghdr *msg, int flags)
+ {
++# ifdef __NR_sendmsg
++ return (ssize_t)INLINE_SYSCALL(sendmsg, 3, sockfd, msg, flags);
++# else
+ unsigned long args[3];
+
+ args[0] = sockfd;
+ args[1] = (unsigned long) msg;
+ args[2] = flags;
+-
+- if (SINGLE_THREAD_P)
+- return (__socketcall(SYS_SENDMSG, args));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_SENDMSG, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
++ return (ssize_t)__socketcall(SYS_SENDMSG, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_sendmsg,sendmsg)
+-libc_hidden_weak(sendmsg)
++CANCELLABLE_SYSCALL(ssize_t, sendmsg, (int sockfd, const struct msghdr *msg, int flags),
++ (sockfd, msg, flags))
++lt_libc_hidden(sendmsg)
+ #endif
+
+ #ifdef L_sendto
+-extern __typeof(sendto) __libc_sendto;
+-#ifdef __NR_sendto
+-#define __NR___sys_sendto __NR_sendto
+-static
+-_syscall6(ssize_t, __sys_sendto, int, sockfd, const void *, buffer,
+- size_t, len, int, flags, const struct sockaddr *, to, socklen_t, tolen)
+-ssize_t __libc_sendto(int sockfd, const void *buffer, size_t len, int flags,const struct sockaddr *to, socklen_t tolen)
+-{
+- if (SINGLE_THREAD_P)
+- return __sys_sendto(sockfd, buffer, len, flags, to, tolen);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __sys_sendto(sockfd, buffer, len, flags, to, tolen);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-#elif defined(__NR_socketcall)
+-/* send, sendto added by bir7@leland.stanford.edu */
+-ssize_t __libc_sendto(int sockfd, const void *buffer, size_t len, int flags,
+- const struct sockaddr *to, socklen_t tolen)
++ssize_t __NC(sendto)(int sockfd, const void *buffer, size_t len, int flags,
++ const struct sockaddr *to, socklen_t tolen)
+ {
++# if defined __NR_sendto && defined _syscall6
++ return (ssize_t)INLINE_SYSCALL(sendto, 6, sockfd, buffer, len, flags, to, tolen);
++# else
+ unsigned long args[6];
+
+ args[0] = sockfd;
+@@ -515,30 +317,21 @@
+ args[3] = flags;
+ args[4] = (unsigned long) to;
+ args[5] = tolen;
+-
+- if (SINGLE_THREAD_P)
+- return (__socketcall(SYS_SENDTO, args));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __socketcall(SYS_SENDTO, args);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
++ return (ssize_t)__socketcall(SYS_SENDTO, args);
++# endif
+ }
+-#endif
+-weak_alias(__libc_sendto,sendto)
+-libc_hidden_weak(sendto)
++CANCELLABLE_SYSCALL(ssize_t, sendto, (int sockfd, const void *buffer, size_t len,
++ int flags, const struct sockaddr *to, socklen_t tolen),
++ (sockfd, buffer, len, flags, to, tolen))
++lt_libc_hidden(sendto)
+ #endif
+
+ #ifdef L_setsockopt
+-#ifdef __NR_setsockopt
+-_syscall5(int, setsockopt, int, fd, int, level, int, optname, const void *, optval, socklen_t, optlen)
+-#elif defined(__NR_socketcall)
+-/* [sg]etsockoptions by bir7@leland.stanford.edu */
+-int setsockopt(int fd, int level, int optname, const void *optval,
+- socklen_t optlen)
++int setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen)
+ {
++# ifdef __NR_setsockopt
++ return INLINE_SYSCALL(setsockopt, 5, fd, level, optname, optval, optlen);
++# else
+ unsigned long args[5];
+
+ args[0] = fd;
+@@ -546,51 +339,50 @@
+ args[2] = optname;
+ args[3] = (unsigned long) optval;
+ args[4] = optlen;
+- return (__socketcall(SYS_SETSOCKOPT, args));
++ return __socketcall(SYS_SETSOCKOPT, args);
++# endif
+ }
+-#endif
+ libc_hidden_def(setsockopt)
+ #endif
+
+ #ifdef L_shutdown
+-#ifdef __NR_shutdown
+-_syscall2(int, shutdown, int, sockfd, int, how)
+-#elif defined(__NR_socketcall)
+-/* shutdown by bir7@leland.stanford.edu */
+ int shutdown(int sockfd, int how)
+ {
++# ifdef __NR_shutdown
++ return INLINE_SYSCALL(shutdown, 2, sockfd, how);
++# else
+ unsigned long args[2];
+
+ args[0] = sockfd;
+ args[1] = how;
+- return (__socketcall(SYS_SHUTDOWN, args));
++ return __socketcall(SYS_SHUTDOWN, args);
++# endif
+ }
+ #endif
+-#endif
+
+ #ifdef L_socket
+-#ifdef __NR_socket
+-_syscall3(int, socket, int, family, int, type, int, protocol)
+-#elif defined(__NR_socketcall)
+ int socket(int family, int type, int protocol)
+ {
++# ifdef __NR_socket
++ return INLINE_SYSCALL(socket, 3, family, type, protocol);
++# else
+ unsigned long args[3];
+
+ args[0] = family;
+ args[1] = type;
+ args[2] = (unsigned long) protocol;
+ return __socketcall(SYS_SOCKET, args);
++# endif
+ }
+-#endif
+ libc_hidden_def(socket)
+ #endif
+
+ #ifdef L_socketpair
+-#ifdef __NR_socketpair
+-_syscall4(int, socketpair, int, family, int, type, int, protocol, int *, sockvec)
+-#elif defined(__NR_socketcall)
+ int socketpair(int family, int type, int protocol, int sockvec[2])
+ {
++# ifdef __NR_socketpair
++ return INLINE_SYSCALL(socketpair, 4, family, type, protocol, sockvec);
++# else
+ unsigned long args[4];
+
+ args[0] = family;
+@@ -598,7 +390,6 @@
+ args[2] = protocol;
+ args[3] = (unsigned long) sockvec;
+ return __socketcall(SYS_SOCKETPAIR, args);
++# endif
+ }
+ #endif
+-#endif
+-
+diff -Nur uClibc-0.9.33.2/libc/misc/assert/__assert.c uClibc-git/libc/misc/assert/__assert.c
+--- uClibc-0.9.33.2/libc/misc/assert/__assert.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/assert/__assert.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Oct 28, 2002
+diff -Nur uClibc-0.9.33.2/libc/misc/assert/Makefile.in uClibc-git/libc/misc/assert/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/assert/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/assert/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,13 @@
+
+ subdirs += libc/misc/assert
+
+-CSRC := __assert.c
++CSRC-y := __assert.c
+
+ MISC_ASSERT_DIR := $(top_srcdir)libc/misc/assert
+ MISC_ASSERT_OUT := $(top_builddir)libc/misc/assert
+
+-MISC_ASSERT_SRC := $(MISC_ASSERT_DIR)/__assert.c
+-MISC_ASSERT_OBJ := $(MISC_ASSERT_OUT)/__assert.o
++MISC_ASSERT_SRC := $(patsubst %.c,$(MISC_ASSERT_DIR)/%.c,$(CSRC-y))
++MISC_ASSERT_OBJ := $(patsubst %.c,$(MISC_ASSERT_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_ASSERT_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/ctype/ctype.c uClibc-git/libc/misc/ctype/ctype.c
+--- uClibc-0.9.33.2/libc/misc/ctype/ctype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ctype/ctype.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -36,10 +36,6 @@
+ #include <assert.h>
+ #include <locale.h>
+
+-#ifdef __UCLIBC_HAS_XLOCALE__
+-# include <xlocale.h>
+-#endif
+-
+ /**********************************************************************/
+ #ifdef __UCLIBC_HAS_CTYPE_TABLES__
+
+diff -Nur uClibc-0.9.33.2/libc/misc/ctype/Makefile.in uClibc-git/libc/misc/ctype/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/ctype/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ctype/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -8,31 +8,25 @@
+ subdirs += libc/misc/ctype
+
+ # multi source ctype.c
+-COM_SRC := \
++COM_SRC-y := \
+ isalnum.c isalpha.c iscntrl.c isdigit.c \
+ isgraph.c islower.c isprint.c ispunct.c isspace.c \
+ isupper.c isxdigit.c tolower.c toupper.c \
+ isblank.c
+-ifeq ($(UCLIBC_SUSV4_LEGACY),y)
+-COM_SRC += isascii.c toascii.c
+-endif
+-CSRC := $(COM_SRC)
++COM_SRC-$(UCLIBC_SUSV4_LEGACY) += isascii.c toascii.c
++CSRC-y := $(COM_SRC-y)
+
+-ifeq ($(UCLIBC_HAS_CTYPE_TABLES),y)
+-CSRC += __C_ctype_b.c __C_ctype_tolower.c __C_ctype_toupper.c \
++CSRC-$(UCLIBC_HAS_CTYPE_TABLES) += \
++ __C_ctype_b.c __C_ctype_tolower.c __C_ctype_toupper.c \
+ __ctype_b_loc.c __ctype_tolower_loc.c __ctype_toupper_loc.c \
+ __ctype_assert.c isctype.c
+-endif
+-
+-ifeq ($(UCLIBC_HAS_XLOCALE),y)
+-CSRC += $(patsubst %.c,%_l.c,$(COM_SRC))
+-endif
++CSRC-$(UCLIBC_HAS_XLOCALE) += $(patsubst %.c,%_l.c,$(COM_SRC-y))
+
+ MISC_CTYPE_DIR := $(top_srcdir)libc/misc/ctype
+ MISC_CTYPE_OUT := $(top_builddir)libc/misc/ctype
+
+-MISC_CTYPE_SRC := $(patsubst %.c,$(MISC_CTYPE_DIR)/%.c,$(CSRC))
+-MISC_CTYPE_OBJ := $(patsubst %.c,$(MISC_CTYPE_OUT)/%.o,$(CSRC))
++MISC_CTYPE_SRC := $(patsubst %.c,$(MISC_CTYPE_DIR)/%.c,$(CSRC-y))
++MISC_CTYPE_OBJ := $(patsubst %.c,$(MISC_CTYPE_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_CTYPE_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/alphasort64.c uClibc-git/libc/misc/dirent/alphasort64.c
+--- uClibc-0.9.33.2/libc/misc/dirent/alphasort64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/alphasort64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,12 +5,14 @@
+ */
+
+ #include <_lfs_64.h>
+-
+ #include <dirent.h>
+-#include <string.h>
+-#include "dirstream.h"
++
++#if __WORDSIZE != 64
++# include <string.h>
++# include "dirstream.h"
+
+ int alphasort64(const struct dirent64 **a, const struct dirent64 **b)
+ {
+- return strcmp((*a)->d_name, (*b)->d_name);
++ return strcoll((*a)->d_name, (*b)->d_name);
+ }
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/alphasort.c uClibc-git/libc/misc/dirent/alphasort.c
+--- uClibc-0.9.33.2/libc/misc/dirent/alphasort.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/alphasort.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,8 @@
+
+ int alphasort(const struct dirent **a, const struct dirent **b)
+ {
+- return strcmp((*a)->d_name, (*b)->d_name);
++ return strcoll((*a)->d_name, (*b)->d_name);
+ }
+-
++#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias_untyped(alphasort,alphasort64)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/dirstream.h uClibc-git/libc/misc/dirent/dirstream.h
+--- uClibc-0.9.33.2/libc/misc/dirent/dirstream.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/dirstream.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 5.1.2 Directory Operations <dirent.h>
+@@ -29,18 +28,6 @@
+
+ #include <bits/uClibc_mutex.h>
+
+-/* For now, syscall readdir () only supports one entry at a time. It
+- * will be changed in the future.
+-#define NUMENT 3
+-*/
+-#ifndef NUMENT
+-#define NUMENT 1
+-#endif
+-
+-#define SINGLE_READDIR 11
+-#define MULTI_READDIR 12
+-#define NEW_READDIR 13
+-
+ /* Directory stream type. */
+ struct __dirstream {
+ /* file descriptor */
+@@ -65,10 +52,4 @@
+ __UCLIBC_MUTEX(dd_lock);
+ }; /* stream data from opendir() */
+
+-
+-extern ssize_t __getdents(int fd, char *buf, size_t count) attribute_hidden;
+-#ifdef __UCLIBC_HAS_LFS__
+-extern ssize_t __getdents64 (int fd, char *buf, size_t count) attribute_hidden;
+-#endif
+-
+ #endif /* dirent.h */
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/Makefile.in uClibc-git/libc/misc/dirent/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/dirent/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,18 +7,18 @@
+
+ subdirs += libc/misc/dirent
+
+-CSRC := alphasort.c closedir.c dirfd.c opendir.c readdir.c rewinddir.c \
+- scandir.c seekdir.c telldir.c readdir_r.c versionsort.c
+-
+-ifeq ($(UCLIBC_HAS_LFS),y)
+-CSRC += readdir64.c alphasort64.c scandir64.c readdir64_r.c versionsort64.c
+-endif
++CSRC := alphasort.c readdir.c scandir.c versionsort.c
++CSRC_R := readdir_r.c
++CSRC-y := closedir.c dirfd.c opendir.c rewinddir.c seekdir.c telldir.c $(CSRC) \
++ $(CSRC_R)
++CSRC-$(UCLIBC_HAS_LFS) += $(patsubst %.c,%64.c,$(CSRC))
++CSRC-$(UCLIBC_HAS_LFS) += $(patsubst %_r.c,%64_r.c,$(CSRC_R))
+
+ MISC_DIRENT_DIR := $(top_srcdir)libc/misc/dirent
+ MISC_DIRENT_OUT := $(top_builddir)libc/misc/dirent
+
+-MISC_DIRENT_SRC := $(patsubst %.c,$(MISC_DIRENT_DIR)/%.c,$(CSRC))
+-MISC_DIRENT_OBJ := $(patsubst %.c,$(MISC_DIRENT_OUT)/%.o,$(CSRC))
++MISC_DIRENT_SRC := $(patsubst %.c,$(MISC_DIRENT_DIR)/%.c,$(CSRC-y))
++MISC_DIRENT_OBJ := $(patsubst %.c,$(MISC_DIRENT_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_DIRENT_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/readdir64.c uClibc-git/libc/misc/dirent/readdir64.c
+--- uClibc-0.9.33.2/libc/misc/dirent/readdir64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/readdir64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,52 +5,12 @@
+ */
+
+ #include <_lfs_64.h>
+-
+-#include <errno.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <unistd.h>
+ #include <dirent.h>
+-#include "dirstream.h"
+-
+-struct dirent64 *readdir64(DIR * dir)
+-{
+- ssize_t bytes;
+- struct dirent64 *de;
+-
+- if (!dir) {
+- __set_errno(EBADF);
+- return NULL;
+- }
+-
+- __UCLIBC_MUTEX_LOCK(dir->dd_lock);
+-
+- do {
+- if (dir->dd_size <= dir->dd_nextloc) {
+- /* read dir->dd_max bytes of directory entries. */
+- bytes = __getdents64(dir->dd_fd, dir->dd_buf, dir->dd_max);
+- if (bytes <= 0) {
+- de = NULL;
+- goto all_done;
+- }
+- dir->dd_size = bytes;
+- dir->dd_nextloc = 0;
+- }
+-
+- de = (struct dirent64 *) (((char *) dir->dd_buf) + dir->dd_nextloc);
+-
+- /* Am I right? H.J. */
+- dir->dd_nextloc += de->d_reclen;
+-
+- /* We have to save the next offset here. */
+- dir->dd_nextoff = de->d_off;
+-
+- /* Skip deleted files. */
+- } while (de->d_ino == 0);
+
+-all_done:
+- __UCLIBC_MUTEX_UNLOCK(dir->dd_lock);
++#if __WORDSIZE != 64
++# define __READDIR readdir64
++# define __DIRENT_TYPE struct dirent64
++# define __GETDENTS __getdents64
+
+- return de;
+-}
+-libc_hidden_def(readdir64)
++# include "readdir.c"
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/readdir64_r.c uClibc-git/libc/misc/dirent/readdir64_r.c
+--- uClibc-0.9.33.2/libc/misc/dirent/readdir64_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/readdir64_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,62 +5,12 @@
+ */
+
+ #include <_lfs_64.h>
+-
+-#include <errno.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <unistd.h>
+ #include <dirent.h>
+-#include "dirstream.h"
+-
+-
+-int readdir64_r(DIR *dir, struct dirent64 *entry, struct dirent64 **result)
+-{
+- int ret;
+- ssize_t bytes;
+- struct dirent64 *de;
+-
+- if (!dir) {
+- __set_errno(EBADF);
+- return(EBADF);
+- }
+- de = NULL;
+-
+- __UCLIBC_MUTEX_LOCK(dir->dd_lock);
+-
+- do {
+- if (dir->dd_size <= dir->dd_nextloc) {
+- /* read dir->dd_max bytes of directory entries. */
+- bytes = __getdents64(dir->dd_fd, dir->dd_buf, dir->dd_max);
+- if (bytes <= 0) {
+- *result = NULL;
+- ret = (bytes==0)? 0 : errno;
+- goto all_done;
+- }
+- dir->dd_size = bytes;
+- dir->dd_nextloc = 0;
+- }
+-
+- de = (struct dirent64 *) (((char *) dir->dd_buf) + dir->dd_nextloc);
+-
+- /* Am I right? H.J. */
+- dir->dd_nextloc += de->d_reclen;
+-
+- /* We have to save the next offset here. */
+- dir->dd_nextoff = de->d_off;
+- /* Skip deleted files. */
+- } while (de->d_ino == 0);
+-
+- if (de == NULL) {
+- *result = NULL;
+- } else {
+- *result = memcpy (entry, de, de->d_reclen);
+- }
+- ret = 0;
+
+-all_done:
++#if __WORDSIZE != 64
++# define __READDIR_R readdir64_r
++# define __DIRENT_TYPE struct dirent64
++# define __GETDENTS __getdents64
+
+- __UCLIBC_MUTEX_UNLOCK(dir->dd_lock);
+- return((de != NULL)? 0 : ret);
+-}
+-libc_hidden_def(readdir64_r)
++# include "readdir_r.c"
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/readdir.c uClibc-git/libc/misc/dirent/readdir.c
+--- uClibc-0.9.33.2/libc/misc/dirent/readdir.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/readdir.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,20 +4,22 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-
+-#include <errno.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <unistd.h>
+ #include <dirent.h>
++#include <errno.h>
++#define __need_NULL
++#include <stddef.h>
+ #include "dirstream.h"
+
++#ifndef __READDIR
++# define __READDIR readdir
++# define __DIRENT_TYPE struct dirent
++# define __GETDENTS __getdents
++#endif
+
+-struct dirent *readdir(DIR * dir)
++__DIRENT_TYPE *__READDIR(DIR * dir)
+ {
+ ssize_t bytes;
+- struct dirent *de;
++ __DIRENT_TYPE *de;
+
+ if (!dir) {
+ __set_errno(EBADF);
+@@ -29,7 +31,7 @@
+ do {
+ if (dir->dd_size <= dir->dd_nextloc) {
+ /* read dir->dd_max bytes of directory entries. */
+- bytes = __getdents(dir->dd_fd, dir->dd_buf, dir->dd_max);
++ bytes = __GETDENTS(dir->dd_fd, dir->dd_buf, dir->dd_max);
+ if (bytes <= 0) {
+ de = NULL;
+ goto all_done;
+@@ -38,7 +40,7 @@
+ dir->dd_nextloc = 0;
+ }
+
+- de = (struct dirent *) (((char *) dir->dd_buf) + dir->dd_nextloc);
++ de = (__DIRENT_TYPE *) (((char *) dir->dd_buf) + dir->dd_nextloc);
+
+ /* Am I right? H.J. */
+ dir->dd_nextloc += de->d_reclen;
+@@ -53,4 +55,8 @@
+ __UCLIBC_MUTEX_UNLOCK(dir->dd_lock);
+ return de;
+ }
+-libc_hidden_def(readdir)
++libc_hidden_def(__READDIR)
++#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias_untyped(readdir,readdir64)
++libc_hidden_def(readdir64)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/readdir_r.c uClibc-git/libc/misc/dirent/readdir_r.c
+--- uClibc-0.9.33.2/libc/misc/dirent/readdir_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/readdir_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,19 +4,24 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <dirent.h>
+ #include <errno.h>
+-#include <stdlib.h>
+ #include <string.h>
+-#include <unistd.h>
+-#include <dirent.h>
++#define __need_NULL
++#include <stddef.h>
+ #include "dirstream.h"
+
++#ifndef __READDIR_R
++# define __READDIR_R readdir_r
++# define __DIRENT_TYPE struct dirent
++# define __GETDENTS __getdents
++#endif
+
+-int readdir_r(DIR *dir, struct dirent *entry, struct dirent **result)
++int __READDIR_R(DIR *dir, __DIRENT_TYPE *entry, __DIRENT_TYPE **result)
+ {
+ int ret;
+ ssize_t bytes;
+- struct dirent *de;
++ __DIRENT_TYPE *de;
+
+ if (!dir) {
+ __set_errno(EBADF);
+@@ -29,7 +34,7 @@
+ do {
+ if (dir->dd_size <= dir->dd_nextloc) {
+ /* read dir->dd_max bytes of directory entries. */
+- bytes = __getdents(dir->dd_fd, dir->dd_buf, dir->dd_max);
++ bytes = __GETDENTS(dir->dd_fd, dir->dd_buf, dir->dd_max);
+ if (bytes <= 0) {
+ *result = NULL;
+ ret = (bytes==0)? 0 : errno;
+@@ -39,7 +44,7 @@
+ dir->dd_nextloc = 0;
+ }
+
+- de = (struct dirent *) (((char *) dir->dd_buf) + dir->dd_nextloc);
++ de = (__DIRENT_TYPE *) (((char *) dir->dd_buf) + dir->dd_nextloc);
+
+ /* Am I right? H.J. */
+ dir->dd_nextloc += de->d_reclen;
+@@ -61,4 +66,8 @@
+ __UCLIBC_MUTEX_UNLOCK(dir->dd_lock);
+ return((de != NULL)? 0 : ret);
+ }
+-libc_hidden_def(readdir_r)
++libc_hidden_def(__READDIR_R)
++#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias_untyped(readdir_r,readdir64_r)
++libc_hidden_def(readdir64_r)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/scandir64.c uClibc-git/libc/misc/dirent/scandir64.c
+--- uClibc-0.9.33.2/libc/misc/dirent/scandir64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/scandir64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,111 +1,16 @@
+-/* Copyright (C) 1992-1998, 2000 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
+- */
+-
+-/* Modified for uClibc by Erik Andersen
+- */
++/*
++ * Copyright (C) 2000-2011 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
+
+ #include <_lfs_64.h>
+-
+ #include <dirent.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include <stdlib.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include "dirstream.h"
+-
+-int scandir64(const char *dir, struct dirent64 ***namelist,
+- int (*selector) (const struct dirent64 *),
+- int (*compar) (const struct dirent64 **, const struct dirent64 **))
+-{
+- DIR *dp = opendir (dir);
+- struct dirent64 *current;
+- struct dirent64 **names = NULL;
+- size_t names_size = 0, pos;
+- int save;
+-
+- if (dp == NULL)
+- return -1;
+-
+- save = errno;
+- __set_errno (0);
+-
+- pos = 0;
+- while ((current = readdir64 (dp)) != NULL) {
+- int use_it = selector == NULL;
+-
+- if (! use_it)
+- {
+- use_it = (*selector) (current);
+- /* The selector function might have changed errno.
+- * It was zero before and it need to be again to make
+- * the latter tests work. */
+- if (! use_it)
+- __set_errno (0);
+- }
+- if (use_it)
+- {
+- struct dirent64 *vnew;
+- size_t dsize;
+-
+- /* Ignore errors from selector or readdir64 */
+- __set_errno (0);
+-
+- if (unlikely(pos == names_size))
+- {
+- struct dirent64 **new;
+- if (names_size == 0)
+- names_size = 10;
+- else
+- names_size *= 2;
+- new = (struct dirent64 **) realloc (names,
+- names_size * sizeof (struct dirent64 *));
+- if (new == NULL)
+- break;
+- names = new;
+- }
+-
+- dsize = &current->d_name[_D_ALLOC_NAMLEN(current)] - (char*)current;
+- vnew = (struct dirent64 *) malloc (dsize);
+- if (vnew == NULL)
+- break;
+-
+- names[pos++] = (struct dirent64 *) memcpy (vnew, current, dsize);
+- }
+- }
+- if (unlikely(errno != 0))
+- {
+- save = errno;
+- closedir (dp);
+- while (pos > 0)
+- free (names[--pos]);
+- free (names);
+- __set_errno (save);
+- return -1;
+- }
+
+- closedir (dp);
+- __set_errno (save);
++#if __WORDSIZE != 64
++# define __SCANDIR scandir64
++# define __DIRENT_TYPE struct dirent64
++# define __READDIR readdir64
+
+- /* Sort the list if we have a comparison function to sort with. */
+- if (compar != NULL)
+- qsort (names, pos, sizeof (struct dirent64 *), (comparison_fn_t) compar);
+- *namelist = names;
+- return pos;
+-}
++# include "scandir.c"
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/scandir.c uClibc-git/libc/misc/dirent/scandir.c
+--- uClibc-0.9.33.2/libc/misc/dirent/scandir.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/scandir.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,24 +1,29 @@
++/* vi: set sw=4 ts=4: */
+ /*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ * Copyright (C) 2000-2011 Erik Andersen <andersen@uclibc.org>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+ #include <dirent.h>
+-#include <stdio.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #include <errno.h>
+-#include <sys/types.h>
+ #include "dirstream.h"
+
+-int scandir(const char *dir, struct dirent ***namelist,
+- int (*selector) (const struct dirent *),
+- int (*compar) (const struct dirent **, const struct dirent **))
++#ifndef __SCANDIR
++# define __SCANDIR scandir
++# define __DIRENT_TYPE struct dirent
++# define __READDIR readdir
++#endif
++
++int __SCANDIR(const char *dir, __DIRENT_TYPE ***namelist,
++ int (*selector) (const __DIRENT_TYPE *),
++ int (*compar) (const __DIRENT_TYPE **, const __DIRENT_TYPE **))
+ {
+ DIR *dp = opendir (dir);
+- struct dirent *current;
+- struct dirent **names = NULL;
++ __DIRENT_TYPE *current;
++ __DIRENT_TYPE **names = NULL;
+ size_t names_size = 0, pos;
+ int save;
+
+@@ -29,7 +34,7 @@
+ __set_errno (0);
+
+ pos = 0;
+- while ((current = readdir (dp)) != NULL) {
++ while ((current = __READDIR (dp)) != NULL) {
+ int use_it = selector == NULL;
+
+ if (! use_it)
+@@ -43,7 +48,7 @@
+ }
+ if (use_it)
+ {
+- struct dirent *vnew;
++ __DIRENT_TYPE *vnew;
+ size_t dsize;
+
+ /* Ignore errors from selector or readdir */
+@@ -51,24 +56,24 @@
+
+ if (unlikely(pos == names_size))
+ {
+- struct dirent **new;
++ __DIRENT_TYPE **new;
+ if (names_size == 0)
+ names_size = 10;
+ else
+ names_size *= 2;
+- new = (struct dirent **) realloc (names,
+- names_size * sizeof (struct dirent *));
++ new = (__DIRENT_TYPE **) realloc (names,
++ names_size * sizeof (__DIRENT_TYPE *));
+ if (new == NULL)
+ break;
+ names = new;
+ }
+
+ dsize = &current->d_name[_D_ALLOC_NAMLEN(current)] - (char*)current;
+- vnew = (struct dirent *) malloc (dsize);
++ vnew = (__DIRENT_TYPE *) malloc (dsize);
+ if (vnew == NULL)
+ break;
+
+- names[pos++] = (struct dirent *) memcpy (vnew, current, dsize);
++ names[pos++] = (__DIRENT_TYPE *) memcpy (vnew, current, dsize);
+ }
+ }
+
+@@ -88,7 +93,10 @@
+
+ /* Sort the list if we have a comparison function to sort with. */
+ if (compar != NULL)
+- qsort (names, pos, sizeof (struct dirent *), (comparison_fn_t) compar);
++ qsort (names, pos, sizeof (__DIRENT_TYPE *), (comparison_fn_t) compar);
+ *namelist = names;
+ return pos;
+ }
++#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias_untyped(scandir,scandir64)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/versionsort64.c uClibc-git/libc/misc/dirent/versionsort64.c
+--- uClibc-0.9.33.2/libc/misc/dirent/versionsort64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/versionsort64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,12 +5,14 @@
+ */
+
+ #include <_lfs_64.h>
+-
+ #include <dirent.h>
+-#include <string.h>
+-#include "dirstream.h"
++
++#if __WORDSIZE != 64
++# include <string.h>
++# include "dirstream.h"
+
+ int versionsort64(const struct dirent64 **a, const struct dirent64 **b)
+ {
+ return strverscmp((*a)->d_name, (*b)->d_name);
+ }
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/dirent/versionsort.c uClibc-git/libc/misc/dirent/versionsort.c
+--- uClibc-0.9.33.2/libc/misc/dirent/versionsort.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/dirent/versionsort.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,3 +12,6 @@
+ {
+ return strverscmp((*a)->d_name, (*b)->d_name);
+ }
++#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias_untyped(versionsort,versionsort64)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/elf/dl-iterate-phdr.c uClibc-git/libc/misc/elf/dl-iterate-phdr.c
+--- uClibc-0.9.33.2/libc/misc/elf/dl-iterate-phdr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/elf/dl-iterate-phdr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -18,10 +18,7 @@
+ /* we want this in libc but nowhere else */
+ #ifdef __USE_GNU
+
+-extern __typeof(dl_iterate_phdr) __dl_iterate_phdr;
+-
+-hidden_proto(__dl_iterate_phdr)
+-int
++static int
+ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, size_t size, void *data), void *data)
+ {
+ int ret = 0;
+@@ -41,7 +38,6 @@
+ #endif
+ return ret;
+ }
+-hidden_def (__dl_iterate_phdr)
+
+ # ifdef SHARED
+
+diff -Nur uClibc-0.9.33.2/libc/misc/elf/dl-support.c uClibc-git/libc/misc/elf/dl-support.c
+--- uClibc-0.9.33.2/libc/misc/elf/dl-support.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/elf/dl-support.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,6 +19,7 @@
+ #include <ldsodefs.h>
+ #include <string.h>
+ #endif
++#include <bits/uClibc_page.h>
+
+ #if defined(USE_TLS) && USE_TLS
+
+@@ -28,6 +29,7 @@
+
+ ElfW(Phdr) *_dl_phdr;
+ size_t _dl_phnum;
++size_t _dl_pagesize;
+
+ void internal_function _dl_aux_init (ElfW(auxv_t) *av);
+ void internal_function _dl_aux_init (ElfW(auxv_t) *av)
+@@ -37,6 +39,9 @@
+
+ /* Get the number of program headers from the aux vect */
+ _dl_phnum = (size_t) av[AT_PHNUM].a_un.a_val;
++
++ /* Get the pagesize from the aux vect */
++ _dl_pagesize = (av[AT_PAGESZ].a_un.a_val) ? (size_t) av[AT_PAGESZ].a_un.a_val : PAGE_SIZE;
+ }
+
+ #if defined(USE_TLS) && USE_TLS
+diff -Nur uClibc-0.9.33.2/libc/misc/error/err.c uClibc-git/libc/misc/error/err.c
+--- uClibc-0.9.33.2/libc/misc/error/err.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/error/err.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,6 @@
+ #include <stdarg.h>
+ #include <errno.h>
+ #include <err.h>
+-#ifdef __UCLIBC_HAS_THREADS__
+-#include <pthread.h>
+-#endif
+
+ #ifdef __UCLIBC_MJN3_ONLY__
+ #warning REMINDER: Deal with wide oriented stderr case.
+@@ -50,68 +47,68 @@
+ __STDIO_AUTO_THREADUNLOCK(stderr);
+ }
+
+-void vwarn(const char *format, va_list args)
++static void __vwarn(const char *format, va_list args)
+ {
+ vwarn_work(format, args, 1);
+ }
+-libc_hidden_def(vwarn)
++strong_alias(__vwarn,vwarn)
+
+ void warn(const char *format, ...)
+ {
+ va_list args;
+
+ va_start(args, format);
+- vwarn(format, args);
++ __vwarn(format, args);
+ va_end(args);
+ }
+
+-void vwarnx(const char *format, va_list args)
++static void __vwarnx(const char *format, va_list args)
+ {
+ vwarn_work(format, args, 0);
+ }
+-libc_hidden_def(vwarnx)
++strong_alias(__vwarnx,vwarnx)
+
+ void warnx(const char *format, ...)
+ {
+ va_list args;
+
+ va_start(args, format);
+- vwarnx(format, args);
++ __vwarnx(format, args);
+ va_end(args);
+ }
+
+-void verr(int status, const char *format, va_list args)
++static void attribute_noreturn __verr(int status, const char *format, va_list args)
+ {
+- vwarn(format, args);
++ __vwarn(format, args);
+ exit(status);
+ }
+-libc_hidden_def(verr)
++strong_alias(__verr,verr)
+
+-void attribute_noreturn err(int status, const char *format, ...)
++void err(int status, const char *format, ...)
+ {
+ va_list args;
+
+ va_start(args, format);
+- verr(status, format, args);
++ __verr(status, format, args);
+ /* This should get optimized away. We'll leave it now for safety. */
+ /* The loop is added only to keep gcc happy. */
+ while(1)
+ va_end(args);
+ }
+
+-void verrx(int status, const char *format, va_list args)
++static void attribute_noreturn __verrx(int status, const char *format, va_list args)
+ {
+- vwarnx(format, args);
++ __vwarnx(format, args);
+ exit(status);
+ }
+-libc_hidden_def(verrx)
++strong_alias(__verrx,verrx)
+
+-void attribute_noreturn errx(int status, const char *format, ...)
++void errx(int status, const char *format, ...)
+ {
+ va_list args;
+
+ va_start(args, format);
+- verrx(status, format, args);
++ __verrx(status, format, args);
+ /* This should get optimized away. We'll leave it now for safety. */
+ /* The loop is added only to keep gcc happy. */
+ while(1)
+diff -Nur uClibc-0.9.33.2/libc/misc/error/error.c uClibc-git/libc/misc/error/error.c
+--- uClibc-0.9.33.2/libc/misc/error/error.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/error/error.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
+ /* Adjusted slightly by Erik Andersen <andersen@uclibc.org> */
+@@ -37,8 +36,7 @@
+ function without parameters instead. */
+ void (*error_print_progname) (void) = NULL;
+
+-extern __typeof(error) __error attribute_hidden;
+-void __error (int status, int errnum, const char *message, ...)
++void error (int status, int errnum, const char *message, ...)
+ {
+ va_list args;
+
+@@ -60,11 +58,9 @@
+ if (status)
+ exit (status);
+ }
+-weak_alias(__error,error)
+
+-extern __typeof(error_at_line) __error_at_line attribute_hidden;
+-void __error_at_line (int status, int errnum, const char *file_name,
+- unsigned int line_number, const char *message, ...)
++void error_at_line (int status, int errnum, const char *file_name,
++ unsigned int line_number, const char *message, ...)
+ {
+ va_list args;
+
+@@ -103,4 +99,3 @@
+ if (status)
+ exit (status);
+ }
+-weak_alias(__error_at_line,error_at_line)
+diff -Nur uClibc-0.9.33.2/libc/misc/error/Makefile.in uClibc-git/libc/misc/error/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/error/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/error/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,19 +7,15 @@
+
+ subdirs += libc/misc/error
+
+-CSRC :=
+-ifeq ($(UCLIBC_HAS_BSD_ERR),y)
+-CSRC += err.c
+-endif
+-ifeq ($(UCLIBC_HAS_GNU_ERROR),y)
+-CSRC += error.c
+-endif
++CSRC-y :=
++CSRC-$(UCLIBC_HAS_BSD_ERR) += err.c
++CSRC-$(UCLIBC_HAS_GNU_ERROR) += error.c
+
+ MISC_ERROR_DIR := $(top_srcdir)libc/misc/error
+ MISC_ERROR_OUT := $(top_builddir)libc/misc/error
+
+-MISC_ERROR_SRC := $(patsubst %.c,$(MISC_ERROR_DIR)/%.c,$(CSRC))
+-MISC_ERROR_OBJ := $(patsubst %.c,$(MISC_ERROR_OUT)/%.o,$(CSRC))
++MISC_ERROR_SRC := $(patsubst %.c,$(MISC_ERROR_DIR)/%.c,$(CSRC-y))
++MISC_ERROR_OBJ := $(patsubst %.c,$(MISC_ERROR_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_ERROR_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/file/isfdtype.c uClibc-git/libc/misc/file/isfdtype.c
+--- uClibc-0.9.33.2/libc/misc/file/isfdtype.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/misc/file/isfdtype.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Determine whether descriptor has given property.
++ Copyright (C) 1996-2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <sys/stat.h>
++#include <sys/socket.h>
++#include <sys/types.h>
++#ifdef __UCLIBC_HAS_LFS__
++# include <_lfs_64.h>
++#else
++# define stat64 stat
++# define fstat64 fstat
++#endif
++
++int
++isfdtype (int fildes, int fdtype)
++{
++ struct stat64 st;
++ int save_error = errno;
++ int result = fstat64 (fildes, &st);
++ __set_errno (save_error);
++ if (result)
++ return result;
++ return (st.st_mode & S_IFMT) == (mode_t) fdtype;
++}
+diff -Nur uClibc-0.9.33.2/libc/misc/file/lockf64.c uClibc-git/libc/misc/file/lockf64.c
+--- uClibc-0.9.33.2/libc/misc/file/lockf64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/file/lockf64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+
+@@ -90,4 +89,3 @@
+
+ return fcntl(fd, cmd, &fl);
+ }
+-libc_hidden_def(lockf64)
+diff -Nur uClibc-0.9.33.2/libc/misc/file/lockf.c uClibc-git/libc/misc/file/lockf.c
+--- uClibc-0.9.33.2/libc/misc/file/lockf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/file/lockf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,19 +13,15 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+-
+ #include <sys/types.h>
+-#include <unistd.h>
+ #include <fcntl.h>
++#include <unistd.h>
+ #include <errno.h>
+ #include <string.h>
+
+-
+-
+ /* lockf is a simplified interface to fcntl's locking facilities. */
+
+ int lockf (int fd, int cmd, off_t len)
+diff -Nur uClibc-0.9.33.2/libc/misc/file/Makefile.in uClibc-git/libc/misc/file/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/file/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/file/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -10,12 +10,12 @@
+ MISC_FILE_DIR := $(top_srcdir)libc/misc/file
+ MISC_FILE_OUT := $(top_builddir)libc/misc/file
+
+-MISC_FILE_SRC := $(wildcard $(MISC_FILE_DIR)/*.c)
+-ifneq ($(UCLIBC_HAS_LFS),y)
+-MISC_FILE_SRC := $(filter-out $(MISC_FILE_DIR)/lockf64.c,$(MISC_FILE_SRC))
+-endif
+-MISC_FILE_OBJ := $(patsubst $(MISC_FILE_DIR)/%.c,$(MISC_FILE_OUT)/%.o,$(MISC_FILE_SRC))
++CSRC-y := $(wildcard $(MISC_FILE_DIR)/*.c)
++CSRC_LFS := $(wildcard $(MISC_FILE_DIR)/*64.c)
++CSRC-y := $(filter-out $(CSRC_LFS),$(CSRC-y))
++CSRC-$(UCLIBC_HAS_LFS) += $(CSRC_LFS)
+
++MISC_FILE_OBJ := $(patsubst $(MISC_FILE_DIR)/%.c,$(MISC_FILE_OUT)/%.o,$(CSRC-y))
+ libc-y += $(MISC_FILE_OBJ)
+
+ libc-nomulti-$(UCLIBC_HAS_LFS) += $(MISC_FILE_OUT)/lockf64.o
+diff -Nur uClibc-0.9.33.2/libc/misc/fnmatch/fnmatch.c uClibc-git/libc/misc/fnmatch/fnmatch.c
+--- uClibc-0.9.33.2/libc/misc/fnmatch/fnmatch.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/fnmatch/fnmatch.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+@@ -54,10 +53,6 @@
+ # include <stdlib.h>
+ #endif
+
+-#ifdef __UCLIBC__
+-# define __memset memset
+-#endif
+-
+ /* For platform which support the ISO C amendement 1 functionality we
+ support user defined character classes. */
+ #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+@@ -347,7 +342,7 @@
+ wchar_t *wstring = NULL;
+
+ /* Convert the strings into wide characters. */
+- __memset (&ps, '\0', sizeof (ps));
++ memset (&ps, '\0', sizeof (ps));
+ p = pattern;
+ #ifdef _LIBC
+ n = strnlen (pattern, 1024);
+@@ -364,7 +359,7 @@
+ already done? */
+ return -1;
+ if (p)
+- __memset (&ps, '\0', sizeof (ps));
++ memset (&ps, '\0', sizeof (ps));
+ }
+ if (__builtin_expect (p != NULL, 0))
+ {
+@@ -396,7 +391,7 @@
+ already done? */
+ return -1;
+ if (p)
+- __memset (&ps, '\0', sizeof (ps));
++ memset (&ps, '\0', sizeof (ps));
+ }
+ if (__builtin_expect (p != NULL, 0))
+ {
+diff -Nur uClibc-0.9.33.2/libc/misc/fnmatch/fnmatch_loop.c uClibc-git/libc/misc/fnmatch/fnmatch_loop.c
+--- uClibc-0.9.33.2/libc/misc/fnmatch/fnmatch_loop.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/fnmatch/fnmatch_loop.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Match STRING against the filename pattern PATTERN, returning zero if
+ it matches, nonzero if not. */
+@@ -508,7 +507,7 @@
+ if (symb_table[2 * elem] == hash
+ && (c1
+ == extra[symb_table[2 * elem + 1]])
+- && __memcmp (str,
++ && memcmp (str,
+ &extra[symb_table[2 * elem
+ + 1]
+ + 1], c1) == 0)
+@@ -729,7 +728,7 @@
+ if (symb_table[2 * elem] == hash
+ && (c1
+ == extra[symb_table[2 * elem + 1]])
+- && __memcmp (str,
++ && memcmp (str,
+ &extra[symb_table[2 * elem + 1]
+ + 1], c1) == 0)
+ {
+diff -Nur uClibc-0.9.33.2/libc/misc/fnmatch/fnmatch_old.c uClibc-git/libc/misc/fnmatch/fnmatch_old.c
+--- uClibc-0.9.33.2/libc/misc/fnmatch/fnmatch_old.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/fnmatch/fnmatch_old.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/fnmatch/Makefile.in uClibc-git/libc/misc/fnmatch/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/fnmatch/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/fnmatch/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,17 +7,13 @@
+
+ subdirs += libc/misc/fnmatch
+
+-ifeq ($(UCLIBC_HAS_FNMATCH_OLD),y)
+-CSRC := fnmatch_old.c
+-else
+-CSRC := fnmatch.c
+-endif
++CSRC-y := $(if $(UCLIBC_HAS_FNMATCH_OLD),fnmatch_old.c,fnmatch.c)
+
+ MISC_FNMATCH_DIR := $(top_srcdir)libc/misc/fnmatch
+ MISC_FNMATCH_OUT := $(top_builddir)libc/misc/fnmatch
+
+-MISC_FNMATCH_SRC := $(patsubst %.c,$(MISC_FNMATCH_DIR)/%.c,$(CSRC))
+-MISC_FNMATCH_OBJ := $(patsubst %.c,$(MISC_FNMATCH_OUT)/%.o,$(CSRC))
++MISC_FNMATCH_SRC := $(patsubst %.c,$(MISC_FNMATCH_DIR)/%.c,$(CSRC-y))
++MISC_FNMATCH_OBJ := $(patsubst %.c,$(MISC_FNMATCH_OUT)/%.o,$(CSRC-y))
+
+ libc-$(UCLIBC_HAS_FNMATCH) += $(MISC_FNMATCH_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/fts/fts.c uClibc-git/libc/misc/fts/fts.c
+--- uClibc-0.9.33.2/libc/misc/fts/fts.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/fts/fts.c 2014-02-15 14:18:15.000000000 +0100
+@@ -38,6 +38,7 @@
+ #include <unistd.h>
+
+ #ifdef __UCLIBC_HAS_LFS__
++/* this is wrong, either you include this header as first, or not at all */
+ # include <_lfs_64.h>
+ #else
+ # define stat64 stat
+@@ -576,7 +577,7 @@
+ FTSENT *cur, *tail;
+ DIR *dirp;
+ void *oldaddr;
+- int cderrno, descend, len, level, nlinks, saved_errno,
++ int /*cderrno,*/ descend, len, level, nlinks, saved_errno,
+ nostat, doadjust;
+ size_t maxlen;
+ char *cp;
+@@ -641,14 +642,14 @@
+ * needed sorted entries or stat information, they had better be
+ * checking FTS_NS on the returned nodes.
+ */
+- cderrno = 0;
++ /* cderrno = 0; */
+ if (nlinks || type == BREAD) {
+ if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
+ if (nlinks && type == BREAD)
+ cur->fts_errno = errno;
+ cur->fts_flags |= FTS_DONTCHDIR;
+ descend = 0;
+- cderrno = errno;
++ /* cderrno = errno; */
+ (void)closedir(dirp);
+ dirp = NULL;
+ } else
+diff -Nur uClibc-0.9.33.2/libc/misc/fts/Makefile.in uClibc-git/libc/misc/fts/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/fts/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/fts/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,13 @@
+ #
+
+ subdirs += libc/misc/fts
+-CSRC := fts.c
++CSRC-y := fts.c
+
+ MISC_FTS_DIR := $(top_srcdir)libc/misc/fts
+ MISC_FTS_OUT := $(top_builddir)libc/misc/fts
+
+-MISC_FTS_SRC := $(patsubst %.c,$(MISC_FTS_DIR)/%.c,$(CSRC))
+-MISC_FTS_OBJ := $(patsubst %.c,$(MISC_FTS_OUT)/%.o,$(CSRC))
++MISC_FTS_SRC := $(patsubst %.c,$(MISC_FTS_DIR)/%.c,$(CSRC-y))
++MISC_FTS_OBJ := $(patsubst %.c,$(MISC_FTS_OUT)/%.o,$(CSRC-y))
+
+ libc-$(UCLIBC_HAS_FTS) += $(MISC_FTS_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/ftw/ftw64.c uClibc-git/libc/misc/ftw/ftw64.c
+--- uClibc-0.9.33.2/libc/misc/ftw/ftw64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ftw/ftw64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FTW_NAME ftw64
+ #define NFTW_NAME nftw64
+diff -Nur uClibc-0.9.33.2/libc/misc/ftw/ftw.c uClibc-git/libc/misc/ftw/ftw.c
+--- uClibc-0.9.33.2/libc/misc/ftw/ftw.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ftw/ftw.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,15 +14,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
+
+ #include <features.h>
++/* need errno.h before undefining _LIBC */
++#include <errno.h>
+ #ifdef __UCLIBC__
+ #undef _LIBC
+ #define HAVE_DIRENT_H 1
+@@ -32,6 +33,7 @@
+ #endif
+
+ #if __GNUC__
++# undef alloca
+ # define alloca __builtin_alloca
+ #else
+ # if HAVE_ALLOCA_H
+@@ -67,7 +69,6 @@
+ # endif
+ #endif
+
+-#include <errno.h>
+ #include <ftw.h>
+ #include <limits.h>
+ #include <search.h>
+@@ -77,11 +78,7 @@
+ #if HAVE_SYS_PARAM_H || defined _LIBC
+ # include <sys/param.h>
+ #endif
+-#ifdef _LIBC
+-# include <include/sys/stat.h>
+-#else
+-# include <sys/stat.h>
+-#endif
++#include <sys/stat.h>
+
+ #if !defined _LIBC && !HAVE_DECL_STPCPY && !defined stpcpy
+ char *stpcpy ();
+diff -Nur uClibc-0.9.33.2/libc/misc/ftw/Makefile.in uClibc-git/libc/misc/ftw/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/ftw/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ftw/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,16 +7,14 @@
+
+ subdirs += libc/misc/ftw
+
+-CSRC := ftw.c
+-ifeq ($(UCLIBC_HAS_LFS),y)
+-CSRC += ftw64.c
+-endif
++CSRC-y := ftw.c
++CSRC-$(UCLIBC_HAS_LFS) += ftw64.c
+
+ MISC_FTW_DIR := $(top_srcdir)libc/misc/ftw
+ MISC_FTW_OUT := $(top_builddir)libc/misc/ftw
+
+-MISC_FTW_SRC := $(patsubst %.c,$(MISC_FTW_DIR)/%.c,$(CSRC))
+-MISC_FTW_OBJ := $(patsubst %.c,$(MISC_FTW_OUT)/%.o,$(CSRC))
++MISC_FTW_SRC := $(patsubst %.c,$(MISC_FTW_DIR)/%.c,$(CSRC-y))
++MISC_FTW_OBJ := $(patsubst %.c,$(MISC_FTW_OUT)/%.o,$(CSRC-y))
+
+ libc-$(findstring y,$(UCLIBC_HAS_FTW)$(UCLIBC_HAS_NFTW)) += $(MISC_FTW_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/glob/glob.c uClibc-git/libc/misc/glob/glob.c
+--- uClibc-0.9.33.2/libc/misc/glob/glob.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/glob/glob.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #undef ENABLE_GLOB_BRACE_EXPANSION
+ #undef ENABLE_GLOB_TILDE_EXPANSION
+diff -Nur uClibc-0.9.33.2/libc/misc/glob/Makefile.in uClibc-git/libc/misc/glob/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/glob/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/glob/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,23 +7,15 @@
+
+ subdirs += libc/misc/glob
+
+-ifeq ($(UCLIBC_HAS_GNU_GLOB),y)
+-CSRC := glob.c
+-ifeq ($(UCLIBC_HAS_LFS),y)
+-CSRC += glob64.c
+-endif
+-else
+-CSRC := glob-susv3.c
+-ifeq ($(UCLIBC_HAS_LFS),y)
+-CSRC += glob64-susv3.c
+-endif
+-endif
++VARIANT := $(if $(UCLIBC_HAS_GNU_GLOB),,-susv3)
++CSRC-y := glob$(VARIANT).c
++CSRC-$(UCLIBC_HAS_LFS) += glob64$(VARIANT).c
+
+ MISC_GLOB_DIR := $(top_srcdir)libc/misc/glob
+ MISC_GLOB_OUT := $(top_builddir)libc/misc/glob
+
+-MISC_GLOB_SRC := $(patsubst %.c,$(MISC_GLOB_DIR)/%.c,$(CSRC))
+-MISC_GLOB_OBJ := $(patsubst %.c,$(MISC_GLOB_OUT)/%.o,$(CSRC))
++MISC_GLOB_SRC := $(patsubst %.c,$(MISC_GLOB_DIR)/%.c,$(CSRC-y))
++MISC_GLOB_OBJ := $(patsubst %.c,$(MISC_GLOB_OUT)/%.o,$(CSRC-y))
+
+ libc-$(UCLIBC_HAS_GLOB) += $(MISC_GLOB_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/gnu/Makefile.in uClibc-git/libc/misc/gnu/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/gnu/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/gnu/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,14 @@
+
+ subdirs += libc/misc/gnu
+
+-CSRC := obstack.c
++CSRC-y :=
++CSRC-$(UCLIBC_HAS_OBSTACK) := obstack.c obprintf.c
+
+ MISC_GNU_DIR := $(top_srcdir)libc/misc/gnu
+ MISC_GNU_OUT := $(top_builddir)libc/misc/gnu
+
+-MISC_GNU_SRC := $(MISC_GNU_DIR)/obstack.c
+-MISC_GNU_OBJ := $(MISC_GNU_OUT)/obstack.o
++MISC_GNU_SRC := $(patsubst %.c,$(MISC_GNU_DIR)/%.c,$(CSRC-y))
++MISC_GNU_OBJ := $(patsubst %.c,$(MISC_GNU_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_GNU_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/gnu/obprintf.c uClibc-git/libc/misc/gnu/obprintf.c
+--- uClibc-0.9.33.2/libc/misc/gnu/obprintf.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/misc/gnu/obprintf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Copyright (C) 2013 Gentoo Foundation
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <stdio.h>
++#include <stdarg.h>
++#include <obstack.h>
++
++int
++obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
++{
++ int n;
++ char *s;
++ n = vasprintf(&s, format, args);
++ obstack_grow(obstack, s, n);
++ return n;
++}
++libc_hidden_def(obstack_vprintf)
++
++int
++obstack_printf (struct obstack *obstack, const char *format, ...)
++{
++ int n;
++ va_list ap;
++ va_start (ap, format);
++ n = obstack_vprintf (obstack, format, ap);
++ va_end (ap);
++ return n;
++}
+diff -Nur uClibc-0.9.33.2/libc/misc/gnu/obstack.c uClibc-git/libc/misc/gnu/obstack.c
+--- uClibc-0.9.33.2/libc/misc/gnu/obstack.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/gnu/obstack.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #ifdef HAVE_CONFIG_H
+@@ -30,11 +29,6 @@
+ #else
+ # define HAVE_INTTYPES_H 1
+ # define HAVE_STDINT_H 1
+-# define SHLIB_COMPAT(x,y,z) 0
+-# undef libc_hidden_def
+-# define libc_hidden_def(x)
+-# undef strong_alias
+-# define strong_alias(x,y)
+ #endif
+ #else
+ # include "obstack.h"
+@@ -112,19 +106,19 @@
+ `print_and_abort'. */
+ static void print_and_abort (void);
+ static void (*__obstack_alloc_failed_handler) (void) = print_and_abort;
+-weak_alias(__obstack_alloc_failed_handler,obstack_alloc_failed_handler)
++strong_alias(__obstack_alloc_failed_handler,obstack_alloc_failed_handler)
+
+ /* Exit value used when `print_and_abort' is used. */
+ # include <stdlib.h>
+ # ifdef _LIBC
+ static int __obstack_exit_failure = EXIT_FAILURE;
+-weak_alias(__obstack_exit_failure,obstack_exit_failure)
++strong_alias(__obstack_exit_failure,obstack_exit_failure)
+ # else
+ # include "exitfail.h"
+ # define __obstack_exit_failure exit_failure
+ # endif
+
+-# ifdef _LIBC
++# if 0
+ # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+ /* A looong time ago (before 1994, anyway; we're not sure) this global variable
+ was used by non-GNU-C macros to avoid multiple evaluation. The GNU C
+@@ -328,9 +322,7 @@
+ /* The new chunk certainly contains no empty object yet. */
+ h->maybe_empty_object = 0;
+ }
+-# ifdef _LIBC
+-libc_hidden_def (_obstack_newchunk)
+-# endif
++libc_hidden_def(_obstack_newchunk)
+
+ /* Return nonzero if object OBJ has been allocated from obstack H.
+ This is here for debugging.
+@@ -393,7 +385,7 @@
+ abort ();
+ }
+
+-# ifdef _LIBC
++# if 0
+ /* Older versions of libc used a function _obstack_free intended to be
+ called by non-GCC compilers. */
+ strong_alias (obstack_free, _obstack_free)
+@@ -418,9 +410,6 @@
+ # else
+ # include "gettext.h"
+ # endif
+-/* NLS: Disable gettext in obstack for now: */
+-# undef _
+-# define _(Str) (Str)
+ # ifndef _
+ # define _(msgid) gettext (msgid)
+ # endif
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/errno.c uClibc-git/libc/misc/internals/errno.c
+--- uClibc-0.9.33.2/libc/misc/internals/errno.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/errno.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,21 +1,14 @@
+ #include <features.h>
++#include <errno.h>
++#undef errno
+
+ #ifdef __UCLIBC_HAS_TLS__
+ __thread int errno;
+-__thread int h_errno;
+-
+ extern __thread int __libc_errno __attribute__ ((alias ("errno"))) attribute_hidden;
+-extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) attribute_hidden;
+-#define h_errno __libc_h_errno
+-
+ #else
+-#include "internal_errno.h"
++extern int errno;
+ int errno = 0;
+-int h_errno = 0;
+-#ifdef __UCLIBC_HAS_THREADS__
+-libc_hidden_def(errno)
+-weak_alias(errno, _errno)
+-libc_hidden_def(h_errno)
+-weak_alias(h_errno, _h_errno)
+-#endif
++# ifdef __UCLIBC_HAS_THREADS__
++strong_alias(errno,_errno)
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/__errno_location.c uClibc-git/libc/misc/internals/__errno_location.c
+--- uClibc-0.9.33.2/libc/misc/internals/__errno_location.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/__errno_location.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,17 +4,16 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "internal_errno.h"
++#include <features.h>
++#include <errno.h>
+
+-/* psm: moved to bits/errno.h: */
+-int *
+-#ifndef __UCLIBC_HAS_THREADS__
+-weak_const_function
++#ifndef __UCLIBC_HAS_TLS__
++# undef errno
++extern int errno;
+ #endif
+-__errno_location (void)
++
++int *__errno_location(void)
+ {
+ return &errno;
+ }
+-#ifdef IS_IN_libc /* not really need, only to keep in sync w/ libc_hidden_proto */
+ libc_hidden_weak(__errno_location)
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/h_errno.c uClibc-git/libc/misc/internals/h_errno.c
+--- uClibc-0.9.33.2/libc/misc/internals/h_errno.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/misc/internals/h_errno.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,14 @@
++#include <features.h>
++#include <netdb.h>
++#undef h_errno
++
++#ifdef __UCLIBC_HAS_TLS__
++__thread int h_errno;
++extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) attribute_hidden;
++#else
++extern int h_errno;
++int h_errno = 0;
++# ifdef __UCLIBC_HAS_THREADS__
++strong_alias(h_errno,_h_errno)
++# endif
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/__h_errno_location.c uClibc-git/libc/misc/internals/__h_errno_location.c
+--- uClibc-0.9.33.2/libc/misc/internals/__h_errno_location.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/__h_errno_location.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,9 +4,15 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "internal_errno.h"
++#include <features.h>
++#include <netdb.h>
+
+-int * weak_const_function __h_errno_location (void)
++#ifndef __UCLIBC_HAS_TLS__
++# undef h_errno
++extern int h_errno;
++#endif
++
++int *__h_errno_location(void)
+ {
+ return &h_errno;
+ }
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/internal_errno.h uClibc-git/libc/misc/internals/internal_errno.h
+--- uClibc-0.9.33.2/libc/misc/internals/internal_errno.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/internal_errno.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,21 +0,0 @@
+-/*
+- *
+- */
+-
+-#include <features.h>
+-#include <errno.h>
+-#include <netdb.h>
+-
+-#ifndef __UCLIBC_HAS_TLS__
+-
+-#undef errno
+-#undef h_errno
+-
+-extern int h_errno;
+-extern int errno;
+-
+-#ifdef __UCLIBC_HAS_THREADS__
+-libc_hidden_proto(h_errno)
+-libc_hidden_proto(errno)
+-#endif
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/Makefile.in uClibc-git/libc/misc/internals/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/internals/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,14 +7,14 @@
+
+ subdirs += libc/misc/internals
+
+-CSRC := tempname.c errno.c __errno_location.c __h_errno_location.c \
++CSRC-y := tempname.c errno.c h_errno.c __errno_location.c __h_errno_location.c \
+ parse_config.c
+
+ MISC_INTERNALS_DIR := $(top_srcdir)libc/misc/internals
+ MISC_INTERNALS_OUT := $(top_builddir)libc/misc/internals
+
+-MISC_INTERNALS_SRC := $(patsubst %.c,$(MISC_INTERNALS_DIR)/%.c,$(CSRC))
+-MISC_INTERNALS_OBJ := $(patsubst %.c,$(MISC_INTERNALS_OUT)/%.o,$(CSRC))
++MISC_INTERNALS_SRC := $(patsubst %.c,$(MISC_INTERNALS_DIR)/%.c,$(CSRC-y))
++MISC_INTERNALS_OBJ := $(patsubst %.c,$(MISC_INTERNALS_OUT)/%.o,$(CSRC-y))
+
+ CFLAGS-__uClibc_main.c := $(SSP_DISABLE_FLAGS)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/parse_config.c uClibc-git/libc/misc/internals/parse_config.c
+--- uClibc-0.9.33.2/libc/misc/internals/parse_config.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/parse_config.c 2014-02-03 12:32:56.000000000 +0100
+@@ -129,7 +129,7 @@
+ return parser;
+ }
+
+-parser_t attribute_hidden * FAST_FUNC config_open(const char *filename)
++parser_t * FAST_FUNC config_open(const char *filename)
+ {
+ return config_open2(filename, fopen_or_warn_stdin);
+ }
+@@ -142,7 +142,7 @@
+ }
+ #endif
+
+-void attribute_hidden FAST_FUNC config_close(parser_t *parser)
++void FAST_FUNC config_close(parser_t *parser)
+ {
+ if (parser) {
+ fclose(parser->fp);
+@@ -176,7 +176,7 @@
+ (but more than 0) are found. Empty lines are always skipped (not warned about).
+ */
+ #undef config_read
+-int attribute_hidden FAST_FUNC config_read(parser_t *parser, char ***tokens,
++int FAST_FUNC config_read(parser_t *parser, char ***tokens,
+ unsigned flags, const char *delims)
+ {
+ char *line;
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/tempname.c uClibc-git/libc/misc/internals/tempname.c
+--- uClibc-0.9.33.2/libc/misc/internals/tempname.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/tempname.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* March 11, 2002 Manuel Novoa III
+ *
+@@ -58,7 +57,7 @@
+ for use with mk[s]temp. Will fail (-1) if DIR is non-null and
+ doesn't exist, none of the searched dirs exists, or there's not
+ enough space in TMPL. */
+-int attribute_hidden ___path_search (char *tmpl, size_t tmpl_len, const char *dir,
++int ___path_search (char *tmpl, size_t tmpl_len, const char *dir,
+ const char *pfx /*, int try_tmpdir*/)
+ {
+ /*const char *d; */
+diff -Nur uClibc-0.9.33.2/libc/misc/internals/__uClibc_main.c uClibc-git/libc/misc/internals/__uClibc_main.c
+--- uClibc-0.9.33.2/libc/misc/internals/__uClibc_main.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/internals/__uClibc_main.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,6 @@
+ */
+
+ #include <features.h>
+-#ifndef __UCLIBC_HAS_THREADS_NATIVE__
+-#define _ERRNO_H
+-#endif
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -25,20 +22,23 @@
+ #include <link.h>
+ #include <bits/uClibc_page.h>
+ #include <paths.h>
+-#include <unistd.h>
+-#include <asm/errno.h>
++#include <errno.h>
++#include <netdb.h>
++#include <stdio.h>
++#ifndef __ARCH_HAS_NO_LDSO__
+ #include <fcntl.h>
+-#include <sys/stat.h>
+-#include <sys/sysmacros.h>
++#endif
+ #ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <errno.h>
+ #include <pthread-functions.h>
+ #include <not-cancel.h>
+ #include <atomic.h>
+ #endif
+ #ifdef __UCLIBC_HAS_THREADS__
+ #include <pthread.h>
+-#endif
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <locale.h>
++#endif
+
+ #ifndef SHARED
+ void *__libc_stack_end = NULL;
+@@ -116,12 +116,6 @@
+ /*
+ * Prototypes.
+ */
+-extern int *weak_const_function __errno_location(void);
+-extern int *weak_const_function __h_errno_location(void);
+-extern void weak_function _stdio_init(void) attribute_hidden;
+-#ifdef __UCLIBC_HAS_LOCALE__
+-extern void weak_function _locale_init(void) attribute_hidden;
+-#endif
+ #ifdef __UCLIBC_HAS_THREADS__
+ #if !defined (__UCLIBC_HAS_THREADS_NATIVE__) || defined (SHARED)
+ extern void weak_function __pthread_initialize_minimal(void);
+@@ -146,18 +140,24 @@
+ # endif
+ #endif
+
+-#if defined (__LDSO_STANDALONE_SUPPORT__) && defined (SHARED) && defined __sh__
+-extern unsigned long _dl_skip_args;
++#ifdef SHARED
++extern int _dl_secure;
+ #endif
++extern size_t _dl_pagesize;
+
+-attribute_hidden const char *__uclibc_progname = "";
+-#ifdef __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__
+-const char *program_invocation_short_name = "";
+-const char *program_invocation_name = "";
+-#endif
+-#ifdef __UCLIBC_HAS___PROGNAME__
+-weak_alias (program_invocation_short_name, __progname)
+-weak_alias (program_invocation_name, __progname_full)
++const char *__uclibc_progname = "";
++#if !defined __UCLIBC_HAS___PROGNAME__ && defined __USE_GNU && defined __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__
++# define __progname program_invocation_short_name
++# define __progname_full program_invocation_name
++#endif
++#if defined __UCLIBC_HAS___PROGNAME__ || (defined __USE_GNU && defined __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__)
++const char *__progname = "";
++/* psm: why have a visible __progname_full? */
++const char *__progname_full = "";
++# if defined __UCLIBC_HAS___PROGNAME__ && defined __USE_GNU && defined __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__
++weak_alias (__progname, program_invocation_short_name)
++weak_alias (__progname_full, program_invocation_name)
++# endif
+ #endif
+
+ /*
+@@ -167,7 +167,6 @@
+ char **__environ = 0;
+ weak_alias(__environ, environ)
+
+-/* TODO: don't export __pagesize; we cant now because libpthread uses it */
+ size_t __pagesize = 0;
+
+ #ifndef O_NOFOLLOW
+@@ -192,6 +191,7 @@
+ }
+ }
+
++#ifndef SHARED
+ static int __check_suid(void)
+ {
+ uid_t uid, euid;
+@@ -208,6 +208,7 @@
+ return 0; /* we are not suid */
+ }
+ #endif
++#endif
+
+ /* __uClibc_init completely initialize uClibc so it is ready to use.
+ *
+@@ -222,8 +223,7 @@
+ * __uClibc_main.
+ */
+
+-extern void __uClibc_init(void);
+-libc_hidden_proto(__uClibc_init)
++extern void __uClibc_init(void) attribute_hidden;
+ void __uClibc_init(void)
+ {
+ /* Don't recurse */
+@@ -276,7 +276,6 @@
+ _stdio_init();
+
+ }
+-libc_hidden_def(__uClibc_init)
+
+ #ifdef __UCLIBC_CTOR_DTOR__
+ void attribute_hidden (*__app_fini)(void) = NULL;
+@@ -284,8 +283,7 @@
+
+ void attribute_hidden (*__rtld_fini)(void) = NULL;
+
+-extern void __uClibc_fini(void);
+-libc_hidden_proto(__uClibc_fini)
++extern void __uClibc_fini(void) attribute_hidden;
+ void __uClibc_fini(void)
+ {
+ #ifdef __UCLIBC_CTOR_DTOR__
+@@ -304,7 +302,6 @@
+ if (__rtld_fini != NULL)
+ (__rtld_fini)();
+ }
+-libc_hidden_def(__uClibc_fini)
+
+ #ifndef SHARED
+ extern void __nptl_deallocate_tsd (void) __attribute ((weak));
+@@ -323,7 +320,7 @@
+ char **argv, void (*app_init)(void), void (*app_fini)(void),
+ void (*rtld_fini)(void), void *stack_end attribute_unused)
+ {
+-#ifndef __ARCH_HAS_NO_LDSO__
++#if !defined __ARCH_HAS_NO_LDSO__ && !defined SHARED
+ unsigned long *aux_dat;
+ ElfW(auxv_t) auxvt[AT_EGID + 1];
+ #endif
+@@ -339,18 +336,6 @@
+
+ __rtld_fini = rtld_fini;
+
+-#if defined __LDSO_STANDALONE_SUPPORT__ && defined SHARED && defined __sh__
+- /*
+- * Skip ld.so and its arguments
+- * Other archs except for SH do this in _dl_start before passing
+- * control to the application.
+- * FIXME: align SH _dl_start to other archs and remove this from here,
+- * so that we can keep the visibility hidden.
+- */
+- argc -= _dl_skip_args;
+- argv += _dl_skip_args;
+-#endif
+-
+ /* The environment begins right after argv. */
+ __environ = &argv[argc + 1];
+
+@@ -361,7 +346,7 @@
+ __environ = &argv[argc];
+ }
+
+-#ifndef __ARCH_HAS_NO_LDSO__
++#if !defined __ARCH_HAS_NO_LDSO__ && !defined SHARED
+ /* Pull stuff from the ELF header when possible */
+ memset(auxvt, 0x00, sizeof(auxvt));
+ aux_dat = (unsigned long*)__environ;
+@@ -376,13 +361,11 @@
+ }
+ aux_dat += 2;
+ }
+-#ifndef SHARED
+ /* Get the program headers (_dl_phdr) from the aux vector
+ It will be used into __libc_setup_tls. */
+
+ _dl_aux_init (auxvt);
+ #endif
+-#endif
+
+ /* We need to initialize uClibc. If we are dynamically linked this
+ * may have already been completed by the shared lib loader. We call
+@@ -390,15 +373,20 @@
+ __uClibc_init();
+
+ #ifndef __ARCH_HAS_NO_LDSO__
+- /* Make certain getpagesize() gives the correct answer */
+- __pagesize = (auxvt[AT_PAGESZ].a_un.a_val)? auxvt[AT_PAGESZ].a_un.a_val : PAGE_SIZE;
++ /* Make certain getpagesize() gives the correct answer.
++ * _dl_pagesize is defined into ld.so if SHARED or into libc.a otherwise. */
++ __pagesize = _dl_pagesize;
+
++#ifndef SHARED
+ /* Prevent starting SUID binaries where the stdin. stdout, and
+ * stderr file descriptors are not already opened. */
+ if ((auxvt[AT_UID].a_un.a_val == (size_t)-1 && __check_suid()) ||
+ (auxvt[AT_UID].a_un.a_val != (size_t)-1 &&
+ (auxvt[AT_UID].a_un.a_val != auxvt[AT_EUID].a_un.a_val ||
+ auxvt[AT_GID].a_un.a_val != auxvt[AT_EGID].a_un.a_val)))
++#else
++ if (_dl_secure)
++#endif
+ {
+ __check_one_fd (STDIN_FILENO, O_RDONLY | O_NOFOLLOW);
+ __check_one_fd (STDOUT_FILENO, O_RDWR | O_NOFOLLOW);
+@@ -407,14 +395,14 @@
+ #endif
+
+ __uclibc_progname = *argv;
+-#ifdef __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__
++#if defined __UCLIBC_HAS___PROGNAME__ || (defined __USE_GNU && defined __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__)
+ if (*argv != NULL) {
+- program_invocation_name = *argv;
+- program_invocation_short_name = strrchr(*argv, '/');
+- if (program_invocation_short_name != NULL)
+- ++program_invocation_short_name;
++ __progname_full = *argv;
++ __progname = strrchr(*argv, '/');
++ if (__progname != NULL)
++ ++__progname;
+ else
+- program_invocation_short_name = program_invocation_name;
++ __progname = *argv;
+ }
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/misc/locale/locale.c uClibc-git/libc/misc/locale/locale.c
+--- uClibc-0.9.33.2/libc/misc/locale/locale.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/locale/locale.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Nov. 1, 2002
+@@ -85,19 +85,17 @@
+ #endif
+ #endif
+
+-/* Need to include this before locale.h and xlocale.h! */
++/* Need to include this before locale.h! */
+ #include <bits/uClibc_locale.h>
+
+ #undef CODESET_LIST
+ #define CODESET_LIST (__locale_mmap->codeset_list)
+
+ #ifdef __UCLIBC_HAS_XLOCALE__
+-#include <xlocale.h>
+ #include <locale.h>
+ #else /* __UCLIBC_HAS_XLOCALE__ */
+ /* We need this internally... */
+ #define __UCLIBC_HAS_XLOCALE__ 1
+-#include <xlocale.h>
+ #include <locale.h>
+ #undef __UCLIBC_HAS_XLOCALE__
+ #endif /* __UCLIBC_HAS_XLOCALE__ */
+@@ -908,7 +906,6 @@
+ _locale_set_l((unsigned char*) C_LOCALE_SELECTOR, base);
+ }
+
+-void _locale_init(void) attribute_hidden;
+ void _locale_init(void)
+ {
+ /* TODO: mmap the locale file */
+@@ -1396,6 +1393,7 @@
+ {
+ return __curlocale_var; /* This is overriden by the thread version. */
+ }
++libc_hidden_weak(__curlocale)
+
+ __locale_t weak_function __curlocale_set(__locale_t newloc)
+ {
+@@ -1404,6 +1402,7 @@
+ __curlocale_var = newloc;
+ return oldloc;
+ }
++libc_hidden_weak(__curlocale_set)
+
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/misc/locale/Makefile.in uClibc-git/libc/misc/locale/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/locale/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/locale/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -8,19 +8,16 @@
+ subdirs += libc/misc/locale
+
+ # multi source locale.c
+-CSRC := setlocale.c localeconv.c _locale_init.c nl_langinfo.c
+-ifeq ($(UCLIBC_HAS_LOCALE),y)
+-CSRC += newlocale.c __locale_mbrtowc_l.c
+-endif
+-ifeq ($(UCLIBC_HAS_XLOCALE),y)
+-CSRC += nl_langinfo_l.c duplocale.c freelocale.c uselocale.c __curlocale.c
+-endif
++CSRC-y := setlocale.c localeconv.c _locale_init.c nl_langinfo.c
++CSRC-$(UCLIBC_HAS_LOCALE) += newlocale.c __locale_mbrtowc_l.c
++CSRC-$(UCLIBC_HAS_XLOCALE) += nl_langinfo_l.c duplocale.c freelocale.c \
++ uselocale.c __curlocale.c
+
+ MISC_LOCALE_DIR := $(top_srcdir)libc/misc/locale
+ MISC_LOCALE_OUT := $(top_builddir)libc/misc/locale
+
+-MISC_LOCALE_SRC := $(patsubst %.c,$(MISC_LOCALE_DIR)/%.c,$(CSRC))
+-MISC_LOCALE_OBJ := $(patsubst %.c,$(MISC_LOCALE_OUT)/%.o,$(CSRC))
++MISC_LOCALE_SRC := $(patsubst %.c,$(MISC_LOCALE_DIR)/%.c,$(CSRC-y))
++MISC_LOCALE_OBJ := $(patsubst %.c,$(MISC_LOCALE_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_LOCALE_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/mntent/Makefile.in uClibc-git/libc/misc/mntent/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/mntent/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/mntent/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,13 @@
+
+ subdirs += libc/misc/mntent
+
+-CSRC := mntent.c
++CSRC-y := mntent.c
+
+ MISC_MNTENT_DIR := $(top_srcdir)libc/misc/mntent
+ MISC_MNTENT_OUT := $(top_builddir)libc/misc/mntent
+
+-MISC_MNTENT_SRC := $(MISC_MNTENT_DIR)/mntent.c
+-MISC_MNTENT_OBJ := $(MISC_MNTENT_OUT)/mntent.o
++MISC_MNTENT_SRC := $(patsubst %.c,$(MISC_MNTENT_DIR)/%.c,$(CSRC-y))
++MISC_MNTENT_OBJ := $(patsubst %.c,$(MISC_MNTENT_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_MNTENT_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/pthread/tsd.c uClibc-git/libc/misc/pthread/tsd.c
+--- uClibc-0.9.33.2/libc/misc/pthread/tsd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/pthread/tsd.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* libpthread sets _dl_error_catch_tsd to point to this function.
+- We define it here instead of in libpthread so t here instead of in libpthread so that it doesn't
++ We define it here instead of in libpthread so that it doesn't
+ need to have a TLS segment of its own just for this one pointer. */
+
+ void **__libc_dl_error_tsd(void) __attribute__ ((const));
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/Makefile.in uClibc-git/libc/misc/regex/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/regex/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,17 +7,14 @@
+
+ subdirs += libc/misc/regex
+
+-ifeq ($(UCLIBC_HAS_REGEX_OLD),y)
+-CSRC := regex_old.c
+-else
+-CSRC := regex.c
+-endif
++VARIANT := $(if $(UCLIBC_HAS_REGEX_OLD),_old)
++CSRC-y := regex$(VARIANT).c
+
+ MISC_REGEX_DIR := $(top_srcdir)libc/misc/regex
+ MISC_REGEX_OUT := $(top_builddir)libc/misc/regex
+
+-MISC_REGEX_SRC := $(patsubst %.c,$(MISC_REGEX_DIR)/%.c,$(CSRC))
+-MISC_REGEX_OBJ := $(patsubst %.c,$(MISC_REGEX_OUT)/%.o,$(CSRC))
++MISC_REGEX_SRC := $(patsubst %.c,$(MISC_REGEX_DIR)/%.c,$(CSRC-y))
++MISC_REGEX_OBJ := $(patsubst %.c,$(MISC_REGEX_OUT)/%.o,$(CSRC-y))
+
+ libc-$(UCLIBC_HAS_REGEX) += $(MISC_REGEX_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/regcomp.c uClibc-git/libc/misc/regex/regcomp.c
+--- uClibc-0.9.33.2/libc/misc/regex/regcomp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/regcomp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
+ size_t length, reg_syntax_t syntax);
+@@ -91,7 +90,7 @@
+ re_charset_t *mbcset,
+ int *equiv_class_alloc,
+ const unsigned char *name);
+-static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
++static reg_errcode_t build_charclass (__RE_TRANSLATE_TYPE trans,
+ bitset_t sbcset,
+ re_charset_t *mbcset,
+ int *char_class_alloc,
+@@ -100,13 +99,13 @@
+ #else /* not RE_ENABLE_I18N */
+ static reg_errcode_t build_equiv_class (bitset_t sbcset,
+ const unsigned char *name);
+-static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
++static reg_errcode_t build_charclass (__RE_TRANSLATE_TYPE trans,
+ bitset_t sbcset,
+ const unsigned char *class_name,
+ reg_syntax_t syntax);
+ #endif /* not RE_ENABLE_I18N */
+ static bin_tree_t *build_charclass_op (re_dfa_t *dfa,
+- RE_TRANSLATE_TYPE trans,
++ __RE_TRANSLATE_TYPE trans,
+ const unsigned char *class_name,
+ const unsigned char *extra,
+ int non_match, reg_errcode_t *err);
+@@ -3414,11 +3413,11 @@
+
+ static reg_errcode_t
+ #ifdef RE_ENABLE_I18N
+-build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
++build_charclass (__RE_TRANSLATE_TYPE trans, bitset_t sbcset,
+ re_charset_t *mbcset, int *char_class_alloc,
+ const unsigned char *class_name, reg_syntax_t syntax)
+ #else
+-build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
++build_charclass (__RE_TRANSLATE_TYPE trans, bitset_t sbcset,
+ const unsigned char *class_name, reg_syntax_t syntax)
+ #endif
+ {
+@@ -3496,7 +3495,7 @@
+ }
+
+ static bin_tree_t *
+-build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
++build_charclass_op (re_dfa_t *dfa, __RE_TRANSLATE_TYPE trans,
+ const unsigned char *class_name,
+ const unsigned char *extra, int non_match,
+ reg_errcode_t *err)
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/regex.c uClibc-git/libc/misc/regex/regex.c
+--- uClibc-0.9.33.2/libc/misc/regex/regex.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/regex.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+@@ -30,7 +29,12 @@
+ # include <stdlib.h>
+ # ifdef __UCLIBC_HAS_WCHAR__
+ # define RE_ENABLE_I18N
++# define HAVE_WCHAR_H 1
++# define HAVE_WCRTOMB 1
++# define HAVE_MBRTOWC 1
++# define HAVE_WCSCOLL 1
+ # include <wchar.h>
++# define HAVE_WCTYPE_H 1
+ # include <wctype.h>
+ # define __iswctype iswctype
+ # define __wcrtomb wcrtomb
+@@ -38,6 +42,9 @@
+ # define __wctype wctype
+ # endif
+ # include <ctype.h>
++# ifdef __UCLIBC_HAS_LOCALE__
++# define HAVE_LOCALE_H 1
++# endif
+ #endif
+
+ /* Make sure noone compiles this code with a C++ compiler. */
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/regexec.c uClibc-git/libc/misc/regex/regexec.c
+--- uClibc-0.9.33.2/libc/misc/regex/regexec.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/regexec.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags,
+ int n) internal_function;
+@@ -564,7 +563,7 @@
+ re_match_context_t mctx;
+ char *fastmap = (preg->fastmap != NULL && preg->fastmap_accurate
+ && range && !preg->can_be_null) ? preg->fastmap : NULL;
+- RE_TRANSLATE_TYPE t = preg->translate;
++ __RE_TRANSLATE_TYPE t = preg->translate;
+
+ memset (&mctx, '\0', sizeof (re_match_context_t));
+ mctx.dfa = dfa;
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/regex_internal.c uClibc-git/libc/misc/regex/regex_internal.c
+--- uClibc-0.9.33.2/libc/misc/regex/regex_internal.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/regex_internal.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ static void re_string_construct_common (const char *str, int len,
+ re_string_t *pstr,
+- RE_TRANSLATE_TYPE trans, int icase,
++ __RE_TRANSLATE_TYPE trans, int icase,
+ const re_dfa_t *dfa) internal_function;
+ static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa,
+ const re_node_set *nodes,
+@@ -38,7 +37,7 @@
+ static reg_errcode_t
+ internal_function
+ re_string_allocate (re_string_t *pstr, const char *str, int len, int init_len,
+- RE_TRANSLATE_TYPE trans, int icase, const re_dfa_t *dfa)
++ __RE_TRANSLATE_TYPE trans, int icase, const re_dfa_t *dfa)
+ {
+ reg_errcode_t ret;
+ int init_buf_len;
+@@ -66,7 +65,7 @@
+ static reg_errcode_t
+ internal_function
+ re_string_construct (re_string_t *pstr, const char *str, int len,
+- RE_TRANSLATE_TYPE trans, int icase, const re_dfa_t *dfa)
++ __RE_TRANSLATE_TYPE trans, int icase, const re_dfa_t *dfa)
+ {
+ reg_errcode_t ret;
+ memset (pstr, '\0', sizeof (re_string_t));
+@@ -162,7 +161,7 @@
+ static void
+ internal_function
+ re_string_construct_common (const char *str, int len, re_string_t *pstr,
+- RE_TRANSLATE_TYPE trans, int icase,
++ __RE_TRANSLATE_TYPE trans, int icase,
+ const re_dfa_t *dfa)
+ {
+ pstr->raw_mbs = (const unsigned char *) str;
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/regex_internal.h uClibc-git/libc/misc/regex/regex_internal.h
+--- uClibc-0.9.33.2/libc/misc/regex/regex_internal.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/regex_internal.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,16 +14,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _REGEX_INTERNAL_H
+ #define _REGEX_INTERNAL_H 1
+
+ #include <assert.h>
+ #include <ctype.h>
+-#include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+
+@@ -315,7 +313,7 @@
+ the beginning of the input string. */
+ unsigned int tip_context;
+ /* The translation passed as a part of an argument of re_compile_pattern. */
+- RE_TRANSLATE_TYPE trans;
++ __RE_TRANSLATE_TYPE trans;
+ /* Copy of re_dfa_t's word_char. */
+ re_const_bitset_ptr_t word_char;
+ /* 1 if REG_ICASE. */
+diff -Nur uClibc-0.9.33.2/libc/misc/regex/regex_old.c uClibc-git/libc/misc/regex/regex_old.c
+--- uClibc-0.9.33.2/libc/misc/regex/regex_old.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/regex/regex_old.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,25 +16,25 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* To exclude some unwanted junk.... */
+ #undef emacs
+ #include <features.h>
+ /* unistd.h must be included with _LIBC defined: we need smallint */
+ #include <unistd.h>
++#include <stdio.h>
+ #ifdef __UCLIBC__
+ # undef _LIBC
+ # define _REGEX_RE_COMP
+ # define STDC_HEADERS
+-# define RE_TRANSLATE_TYPE char *
++# define __RE_TRANSLATE_TYPE char *
++# define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE
+ #endif
+ #include <stdlib.h>
+ #include <stdint.h>
+ #include <string.h>
+-#include <stdio.h>
+
+ /* AIX requires this to be the first thing in the file. */
+ #if defined _AIX && !defined REGEX_MALLOC
+@@ -64,10 +64,9 @@
+ # include <wctype.h>
+ # endif
+
+-# if defined _LIBC || defined __UCLIBC__
++# ifdef _LIBC
+ /* We have to keep the namespace clean. */
+
+-# ifndef __UCLIBC__
+ # define btowc __btowc
+
+ /* We are also using some library internals. */
+@@ -76,7 +75,6 @@
+ # include <langinfo.h>
+ # include <locale/coll-lookup.h>
+ # endif
+-# endif
+
+ /* This is for other GNU distributions with internationalized messages. */
+ # if defined HAVE_LIBINTL_H || defined _LIBC
+@@ -177,6 +175,7 @@
+
+ /* Get the interface, including the syntax bits. */
+ # include <regex.h>
++# define translate __REPB_PREFIX(translate)
+
+ /* isalpha etc. are used for the character classes. */
+ # include <ctype.h>
+@@ -1896,7 +1895,7 @@
+ static reg_errcode_t wcs_compile_range (CHAR_T range_start,
+ const CHAR_T **p_ptr,
+ const CHAR_T *pend,
+- char *translate,
++ __RE_TRANSLATE_TYPE translate,
+ reg_syntax_t syntax,
+ UCHAR_T *b,
+ CHAR_T *char_set);
+@@ -1905,7 +1904,7 @@
+ static reg_errcode_t byte_compile_range (unsigned int range_start,
+ const char **p_ptr,
+ const char *pend,
+- char *translate,
++ __RE_TRANSLATE_TYPE translate,
+ reg_syntax_t syntax,
+ unsigned char *b);
+ # endif /* WCHAR */
+@@ -2338,7 +2337,7 @@
+ #endif /* WCHAR */
+
+ /* How to translate the characters in the pattern. */
+- RE_TRANSLATE_TYPE translate = bufp->translate;
++ __RE_TRANSLATE_TYPE translate = bufp->translate;
+
+ /* Address of the count-byte of the most recently inserted `exactn'
+ command. This makes it possible to tell if a new exact-match
+@@ -4402,7 +4401,7 @@
+ wcs_compile_range (
+ CHAR_T range_start_char,
+ const CHAR_T **p_ptr, const CHAR_T *pend,
+- RE_TRANSLATE_TYPE translate,
++ __RE_TRANSLATE_TYPE translate,
+ reg_syntax_t syntax,
+ CHAR_T *b, CHAR_T *char_set)
+ {
+@@ -4488,7 +4487,7 @@
+ byte_compile_range (
+ unsigned int range_start_char,
+ const char **p_ptr, const char *pend,
+- RE_TRANSLATE_TYPE translate,
++ __RE_TRANSLATE_TYPE translate,
+ reg_syntax_t syntax,
+ unsigned char *b)
+ {
+@@ -5060,7 +5059,7 @@
+ {
+ int val;
+ register char *fastmap = bufp->fastmap;
+- register RE_TRANSLATE_TYPE translate = bufp->translate;
++ register __RE_TRANSLATE_TYPE translate = bufp->translate;
+ int total_size = size1 + size2;
+ int endpos = startpos + range;
+ #ifdef WCHAR
+@@ -5477,7 +5476,7 @@
+ UCHAR_T *end,
+ PREFIX(register_info_type) *reg_info);
+ static int PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2,
+- int len, char *translate);
++ int len, __RE_TRANSLATE_TYPE translate);
+ #else /* not INSIDE_RECURSION */
+
+ /* re_match_2 matches the compiled pattern in BUFP against the
+@@ -5637,7 +5636,7 @@
+ UCHAR_T *just_past_start_mem = 0;
+
+ /* We use this to map every character in the string. */
+- RE_TRANSLATE_TYPE translate = bufp->translate;
++ __RE_TRANSLATE_TYPE translate = bufp->translate;
+
+ /* Failure point stack. Each place that can handle a failure further
+ down the line pushes a failure point on this stack. It consists of
+@@ -7212,6 +7211,10 @@
+ POP_FAILURE_POINT (sdummy, pdummy,
+ dummy_low_reg, dummy_high_reg,
+ reg_dummy, reg_dummy, reg_info_dummy);
++
++ /* Silence 'set but not used' warnings. */
++ (void) pdummy;
++ (void) sdummy;
+ }
+ /* Note fall through. */
+
+@@ -7802,7 +7805,7 @@
+ PREFIX(bcmp_translate) (
+ const CHAR_T *s1, const CHAR_T *s2,
+ register int len,
+- RE_TRANSLATE_TYPE translate)
++ __RE_TRANSLATE_TYPE translate)
+ {
+ register const UCHAR_T *p1 = (const UCHAR_T *) s1;
+ register const UCHAR_T *p2 = (const UCHAR_T *) s2;
+@@ -8002,8 +8005,8 @@
+ unsigned i;
+
+ preg->translate
+- = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
+- * sizeof (*(RE_TRANSLATE_TYPE)0));
++ = (__RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
++ * sizeof (*(__RE_TRANSLATE_TYPE)0));
+ if (preg->translate == NULL)
+ return (int) REG_ESPACE;
+
+diff -Nur uClibc-0.9.33.2/libc/misc/search/hsearch.c uClibc-git/libc/misc/search/hsearch.c
+--- uClibc-0.9.33.2/libc/misc/search/hsearch.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/search/hsearch.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <search.h>
+
+diff -Nur uClibc-0.9.33.2/libc/misc/search/_hsearch_r.c uClibc-git/libc/misc/search/_hsearch_r.c
+--- uClibc-0.9.33.2/libc/misc/search/_hsearch_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/search/_hsearch_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,12 +13,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+-#include <malloc.h>
++#include <stdlib.h>
+ #include <string.h>
+
+ #include <search.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/search/insremque.c uClibc-git/libc/misc/search/insremque.c
+--- uClibc-0.9.33.2/libc/misc/search/insremque.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/search/insremque.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <stddef.h>
+@@ -27,12 +26,20 @@
+ void
+ insque (void *elem, void *prev)
+ {
+- struct qelem *next = ((struct qelem *) prev)->q_forw;
+- ((struct qelem *) prev)->q_forw = (struct qelem *) elem;
+- if (next != NULL)
+- next->q_back = (struct qelem *) elem;
+- ((struct qelem *) elem)->q_forw = next;
+- ((struct qelem *) elem)->q_back = (struct qelem *) prev;
++ if (prev == NULL)
++ {
++ ((struct qelem *) elem)->q_forw = NULL;
++ ((struct qelem *) elem)->q_back = NULL;
++ }
++ else
++ {
++ struct qelem *next = ((struct qelem *) prev)->q_forw;
++ ((struct qelem *) prev)->q_forw = (struct qelem *) elem;
++ if (next != NULL)
++ next->q_back = (struct qelem *) elem;
++ ((struct qelem *) elem)->q_forw = next;
++ ((struct qelem *) elem)->q_back = (struct qelem *) prev;
++ }
+ }
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/misc/search/Makefile.in uClibc-git/libc/misc/search/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/search/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/search/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,25 +7,25 @@
+
+ subdirs += libc/misc/search
+
+-CSRC := hsearch.c
++CSRC-y := hsearch.c
+
+ # multi source _tsearch.c
+-CSRC += tsearch.c tfind.c tdelete.c twalk.c tdestroy.c
++CSRC-y += tsearch.c tfind.c tdelete.c twalk.c tdestroy.c
+
+ # multi source _lsearch.c
+-CSRC += lfind.c lsearch.c
++CSRC-y += lfind.c lsearch.c
+
+ # multi source insremque.c
+-CSRC += insque.c remque.c
++CSRC-y += insque.c remque.c
+
+ # multi source _hsearch_r.c
+-CSRC += hcreate_r.c hdestroy_r.c hsearch_r.c
++CSRC-y += hcreate_r.c hdestroy_r.c hsearch_r.c
+
+ MISC_SEARCH_DIR := $(top_srcdir)libc/misc/search
+ MISC_SEARCH_OUT := $(top_builddir)libc/misc/search
+
+-MISC_SEARCH_SRC := $(patsubst %.c,$(MISC_SEARCH_DIR)/%.c,$(CSRC))
+-MISC_SEARCH_OBJ := $(patsubst %.c,$(MISC_SEARCH_OUT)/%.o,$(CSRC))
++MISC_SEARCH_SRC := $(patsubst %.c,$(MISC_SEARCH_DIR)/%.c,$(CSRC-y))
++MISC_SEARCH_OBJ := $(patsubst %.c,$(MISC_SEARCH_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_SEARCH_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/search/_tsearch.c uClibc-git/libc/misc/search/_tsearch.c
+--- uClibc-0.9.33.2/libc/misc/search/_tsearch.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/search/_tsearch.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Tree search generalized from Knuth (6.2.2) Algorithm T just like
+@@ -50,7 +49,7 @@
+ int (*compar)(); ordering function
+ */
+
+-void *tsearch(__const void *key, void **vrootp, __compar_fn_t compar)
++void *tsearch(const void *key, void **vrootp, __compar_fn_t compar)
+ {
+ register node *q;
+ register node **rootp = (node **) vrootp;
+@@ -80,7 +79,7 @@
+ #endif
+
+ #ifdef L_tfind
+-void *tfind(__const void *key, void * __const *vrootp, __compar_fn_t compar)
++void *tfind(const void *key, void * const *vrootp, __compar_fn_t compar)
+ {
+ register node **rootp = (node **) vrootp;
+
+@@ -107,7 +106,7 @@
+ register node **rootp; address of the root of tree
+ int (*compar)(); comparison function
+ */
+-void *tdelete(__const void *key, void ** vrootp, __compar_fn_t compar)
++void *tdelete(const void *key, void ** vrootp, __compar_fn_t compar)
+ {
+ node *p;
+ register node *q;
+@@ -157,7 +156,7 @@
+ register void (*action)(); Function to be called at each node
+ register int level;
+ */
+-static void trecurse(__const void *vroot, __action_fn_t action, int level)
++static void trecurse(const void *vroot, __action_fn_t action, int level)
+ {
+ register node *root = (node *) vroot;
+
+@@ -180,9 +179,9 @@
+ void (*action)(); Function to be called at each node
+ PTR
+ */
+-void twalk(__const void *vroot, __action_fn_t action)
++void twalk(const void *vroot, __action_fn_t action)
+ {
+- register __const node *root = (node *) vroot;
++ register const node *root = (node *) vroot;
+
+ if (root != (node *)0 && action != (__action_fn_t) 0)
+ trecurse(root, action, 0);
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/fstatfs64.c uClibc-git/libc/misc/statfs/fstatfs64.c
+--- uClibc-0.9.33.2/libc/misc/statfs/fstatfs64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/fstatfs64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+
+@@ -23,8 +22,10 @@
+ #include <string.h>
+ #include <sys/statfs.h>
+ #include <sys/statvfs.h>
++#include <sys/syscall.h>
+ #include <stddef.h>
+
++#if defined __NR_fstatfs
+ extern __typeof(fstatfs) __libc_fstatfs;
+
+ /* Return information about the filesystem on which FD resides. */
+@@ -43,9 +44,24 @@
+ buf->f_files = buf32.f_files;
+ buf->f_ffree = buf32.f_ffree;
+ buf->f_fsid = buf32.f_fsid;
++# ifdef _STATFS_F_FRSIZE
++ buf->f_frsize = buf32.f_frsize;
++# endif
+ buf->f_namelen = buf32.f_namelen;
+ memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare));
+
+ return 0;
+ }
++#else
++/*
++ * Use the fstatfs64 system call if fstatfs is not defined
++ * This is for backwards compatibility and it should be
++ * made default in the future
++ */
++int fstatfs64(int fd, struct statfs64 *buf)
++{
++ /* Signature has 2 arguments but syscalls wants 3 */
++ return INLINE_SYSCALL(fstatfs64, 3, fd, sizeof(*buf), buf);
++}
++#endif
+ libc_hidden_def(fstatfs64)
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/fstatvfs64.c uClibc-git/libc/misc/statfs/fstatvfs64.c
+--- uClibc-0.9.33.2/libc/misc/statfs/fstatvfs64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/fstatvfs64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/fstatvfs.c uClibc-git/libc/misc/statfs/fstatvfs.c
+--- uClibc-0.9.33.2/libc/misc/statfs/fstatvfs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/fstatvfs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/internal_statvfs.c uClibc-git/libc/misc/statfs/internal_statvfs.c
+--- uClibc-0.9.33.2/libc/misc/statfs/internal_statvfs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/internal_statvfs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,20 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++/* The kernel hints us if the f_flags is valid */
++#define ST_VALID 0x0020
+
+ /* Now fill in the fields we have information for. */
+ buf->f_bsize = fsbuf.f_bsize;
+- /* Linux does not support f_frsize, so set it to the full block size. */
++#ifdef _STATFS_F_FRSIZE
++ buf->f_frsize = fsbuf.f_frsize;
++#else
++ /* No support for f_frsize so set it to the full block size. */
+ buf->f_frsize = fsbuf.f_bsize;
++#endif
+ buf->f_blocks = fsbuf.f_blocks;
+ buf->f_bfree = fsbuf.f_bfree;
+ buf->f_bavail = fsbuf.f_bavail;
+@@ -28,7 +34,7 @@
+ buf->f_ffree = fsbuf.f_ffree;
+ if (sizeof (buf->f_fsid) == sizeof (fsbuf.f_fsid))
+ buf->f_fsid = (fsbuf.f_fsid.__val[0]
+- | ((unsigned long int) fsbuf.f_fsid.__val[1]
++ | ((unsigned long long int) fsbuf.f_fsid.__val[1]
+ << (8 * (sizeof (buf->f_fsid)
+ - sizeof (fsbuf.f_fsid.__val[0])))));
+ else
+@@ -39,10 +45,7 @@
+ buf->__f_unused = 0;
+ #endif
+ buf->f_namemax = fsbuf.f_namelen;
+- memset (buf->__f_spare, '\0', 6 * sizeof (int));
+-
+- /* What remains to do is to fill the fields f_favail and f_flag. */
+-
++ memset (buf->__f_spare, '\0', sizeof(buf->__f_spare));
+ /* XXX I have no idea how to compute f_favail. Any idea??? */
+ buf->f_favail = buf->f_ffree;
+
+@@ -51,61 +54,63 @@
+ file. The way we can test for matching filesystem is using the
+ device number. */
+ buf->f_flag = 0;
+- if (STAT (&st) >= 0)
+- {
+- int save_errno = errno;
+- struct mntent mntbuf;
+- FILE *mtab;
+-
+- mtab = setmntent ("/proc/mounts", "r");
+- if (mtab == NULL)
+- mtab = setmntent (_PATH_MOUNTED, "r");
+-
+- if (mtab != NULL)
+- {
+- char tmpbuf[1024];
+-
+- while (getmntent_r (mtab, &mntbuf, tmpbuf, sizeof (tmpbuf)))
+- {
+- struct stat fsst;
+-
+- /* Find out about the device the current entry is for. */
+- if (stat (mntbuf.mnt_dir, &fsst) >= 0
+- && st.st_dev == fsst.st_dev)
+- {
+- /* Bingo, we found the entry for the device FD is on.
+- Now interpret the option string. */
+- char *cp = mntbuf.mnt_opts;
+- char *opt;
+-
+- while ((opt = strsep (&cp, ",")) != NULL)
+- if (strcmp (opt, "ro") == 0)
+- buf->f_flag |= ST_RDONLY;
+- else if (strcmp (opt, "nosuid") == 0)
+- buf->f_flag |= ST_NOSUID;
++ if (STAT (&st) >= 0
++#ifdef _STATFS_F_FLAGS
++ && (fsbuf.f_flags & ST_VALID) == 0
++#endif
++ ) {
++ int save_errno = errno;
++ struct mntent mntbuf;
++ FILE *mtab;
++
++ mtab = setmntent ("/proc/mounts", "r");
++ if (mtab == NULL)
++ mtab = setmntent (_PATH_MOUNTED, "r");
++ if (mtab != NULL) {
++ char tmpbuf[1024];
++
++ while (getmntent_r (mtab, &mntbuf, tmpbuf, sizeof (tmpbuf))) {
++ struct stat fsst;
++
++ /* Find out about the device the current entry is for. */
++ if (stat (mntbuf.mnt_dir, &fsst) >= 0
++ && st.st_dev == fsst.st_dev) {
++ /* Bingo, we found the entry for the device FD is on.
++ Now interpret the option string. */
++ char *cp = mntbuf.mnt_opts;
++ char *opt;
++
++ while ((opt = strsep (&cp, ",")) != NULL)
++ if (strcmp (opt, "ro") == 0)
++ buf->f_flag |= ST_RDONLY;
++ else if (strcmp (opt, "nosuid") == 0)
++ buf->f_flag |= ST_NOSUID;
+ #ifdef __USE_GNU
+- else if (strcmp (opt, "noexec") == 0)
+- buf->f_flag |= ST_NOEXEC;
+- else if (strcmp (opt, "nodev") == 0)
+- buf->f_flag |= ST_NODEV;
+- else if (strcmp (opt, "sync") == 0)
+- buf->f_flag |= ST_SYNCHRONOUS;
+- else if (strcmp (opt, "mand") == 0)
+- buf->f_flag |= ST_MANDLOCK;
+- else if (strcmp (opt, "noatime") == 0)
+- buf->f_flag |= ST_NOATIME;
+- else if (strcmp (opt, "nodiratime") == 0)
+- buf->f_flag |= ST_NODIRATIME;
++ else if (strcmp (opt, "noexec") == 0)
++ buf->f_flag |= ST_NOEXEC;
++ else if (strcmp (opt, "nodev") == 0)
++ buf->f_flag |= ST_NODEV;
++ else if (strcmp (opt, "sync") == 0)
++ buf->f_flag |= ST_SYNCHRONOUS;
++ else if (strcmp (opt, "mand") == 0)
++ buf->f_flag |= ST_MANDLOCK;
++ else if (strcmp (opt, "noatime") == 0)
++ buf->f_flag |= ST_NOATIME;
++ else if (strcmp (opt, "nodiratime") == 0)
++ buf->f_flag |= ST_NODIRATIME;
++ else if (strcmp (opt, "relatime") == 0)
++ buf->f_flag |= ST_RELATIME;
+ #endif
+-
+- /* We can stop looking for more entries. */
+- break;
++ /* We can stop looking for more entries. */
++ break;
++ }
+ }
+- }
+-
+- /* Close the file. */
+- endmntent (mtab);
+- }
+-
+- __set_errno (save_errno);
+- }
++ /* Close the file. */
++ endmntent (mtab);
++ }
++ __set_errno (save_errno);
++ }
++#ifdef _STATFS_F_FLAGS
++ else
++ buf->f_flag = fsbuf.f_flags ^ ST_VALID;
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/Makefile.in uClibc-git/libc/misc/statfs/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/statfs/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,19 +7,16 @@
+
+ subdirs += libc/misc/statfs
+
+-CSRC := statvfs.c fstatvfs.c
+-ifeq ($(UCLIBC_HAS_LFS),y)
+-ifeq ($(UCLIBC_LINUX_SPECIFIC),y)
+-CSRC += fstatfs64.c statfs64.c
+-endif
+-CSRC += statvfs64.c fstatvfs64.c
+-endif
++CSRC-y := statvfs.c fstatvfs.c
++CSRC-$(UCLIBC_HAS_LFS) += $(patsubst %.c,%64.c,$(CSRC-y))
++CSRC-$(if $(findstring yy,$(UCLIBC_HAS_LFS)$(UCLIBC_LINUX_SPECIFIC)),y) += \
++ fstatfs64.c statfs64.c
+
+ MISC_STATFS_DIR := $(top_srcdir)libc/misc/statfs
+ MISC_STATFS_OUT := $(top_builddir)libc/misc/statfs
+
+-MISC_STATFS_SRC := $(patsubst %.c,$(MISC_STATFS_DIR)/%.c,$(CSRC))
+-MISC_STATFS_OBJ := $(patsubst %.c,$(MISC_STATFS_OUT)/%.o,$(CSRC))
++MISC_STATFS_SRC := $(patsubst %.c,$(MISC_STATFS_DIR)/%.c,$(CSRC-y))
++MISC_STATFS_OBJ := $(patsubst %.c,$(MISC_STATFS_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_STATFS_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/statfs64.c uClibc-git/libc/misc/statfs/statfs64.c
+--- uClibc-0.9.33.2/libc/misc/statfs/statfs64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/statfs64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,18 +13,19 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+
+ #include <string.h>
+ #include <stddef.h>
+ #include <sys/statfs.h>
++#include <sys/syscall.h>
+
+ extern __typeof(statfs) __libc_statfs;
+
++#if defined __NR_statfs
+ /* Return information about the filesystem on which FILE resides. */
+ int statfs64 (const char *file, struct statfs64 *buf)
+ {
+@@ -42,8 +43,21 @@
+ buf->f_ffree = buf32.f_ffree;
+ buf->f_fsid = buf32.f_fsid;
+ buf->f_namelen = buf32.f_namelen;
++#ifdef _STATFS_F_FRSIZE
++ buf->f_frsize = buf32.f_frsize;
++#endif
++#ifdef _STATFS_F_FLAGS
++ buf->f_flags = buf32.f_flags;
++#endif
+ memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare));
+
+ return 0;
+ }
++#else
++int statfs64 (const char *file, struct statfs64 *buf)
++{
++ return INLINE_SYSCALL(statfs64, 3, file, sizeof(*buf), buf);
++}
++#endif
++
+ libc_hidden_def(statfs64)
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/statvfs64.c uClibc-git/libc/misc/statfs/statvfs64.c
+--- uClibc-0.9.33.2/libc/misc/statfs/statvfs64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/statvfs64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+
+diff -Nur uClibc-0.9.33.2/libc/misc/statfs/statvfs.c uClibc-git/libc/misc/statfs/statvfs.c
+--- uClibc-0.9.33.2/libc/misc/statfs/statvfs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/statfs/statvfs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/syslog/Makefile.in uClibc-git/libc/misc/syslog/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/syslog/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/syslog/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,13 @@
+
+ subdirs += libc/misc/syslog
+
+-CSRC := syslog.c
++CSRC-y := syslog.c
+
+ MISC_SYSLOG_DIR := $(top_srcdir)libc/misc/syslog
+ MISC_SYSLOG_OUT := $(top_builddir)libc/misc/syslog
+
+-MISC_SYSLOG_SRC := $(patsubst %.c,$(MISC_SYSLOG_DIR)/%.c,$(CSRC))
+-MISC_SYSLOG_OBJ := $(patsubst %.c,$(MISC_SYSLOG_OUT)/%.o,$(CSRC))
++MISC_SYSLOG_SRC := $(patsubst %.c,$(MISC_SYSLOG_DIR)/%.c,$(CSRC-y))
++MISC_SYSLOG_OBJ := $(patsubst %.c,$(MISC_SYSLOG_OUT)/%.o,$(CSRC-y))
+
+ ifeq ($(UCLIBC_HAS_SYSLOG),y)
+ libc-y += $(MISC_SYSLOG_OBJ)
+diff -Nur uClibc-0.9.33.2/libc/misc/syslog/syslog.c uClibc-git/libc/misc/syslog/syslog.c
+--- uClibc-0.9.33.2/libc/misc/syslog/syslog.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/syslog/syslog.c 2014-02-03 12:32:56.000000000 +0100
+@@ -58,8 +58,6 @@
+ * - Major code cleanup.
+ */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/file.h>
+@@ -177,14 +175,17 @@
+ openlog_intern(ident, logstat, logfac);
+ __UCLIBC_MUTEX_UNLOCK(mylock);
+ }
+-libc_hidden_def(openlog)
+
+ /*
+ * syslog, vsyslog --
+ * print message on log file; output is intended for syslogd(8).
+ */
++static
++#ifndef __USE_BSD
++__always_inline
++#endif
+ void
+-vsyslog(int pri, const char *fmt, va_list ap)
++__vsyslog(int pri, const char *fmt, va_list ap)
+ {
+ register char *p;
+ char *last_chr, *head_end, *end, *stdp;
+@@ -303,7 +304,9 @@
+ getout:
+ __UCLIBC_MUTEX_UNLOCK(mylock);
+ }
+-libc_hidden_def(vsyslog)
++#ifdef __USE_BSD
++strong_alias(__vsyslog,vsyslog)
++#endif
+
+ void
+ syslog(int pri, const char *fmt, ...)
+@@ -311,7 +314,7 @@
+ va_list ap;
+
+ va_start(ap, fmt);
+- vsyslog(pri, fmt, ap);
++ __vsyslog(pri, fmt, ap);
+ va_end(ap);
+ }
+ libc_hidden_def(syslog)
+@@ -326,7 +329,6 @@
+ closelog_intern(0); /* 0: reset LogXXX globals to default */
+ __UCLIBC_MUTEX_UNLOCK(mylock);
+ }
+-libc_hidden_def(closelog)
+
+ /* setlogmask -- set the log mask level */
+ int setlogmask(int pmask)
+@@ -335,9 +337,9 @@
+
+ omask = LogMask;
+ if (pmask != 0) {
+- __UCLIBC_MUTEX_LOCK(mylock);
++/* __UCLIBC_MUTEX_LOCK(mylock);*/
+ LogMask = pmask;
+- __UCLIBC_MUTEX_UNLOCK(mylock);
++/* __UCLIBC_MUTEX_UNLOCK(mylock);*/
+ }
+ return omask;
+ }
+diff -Nur uClibc-0.9.33.2/libc/misc/sysvipc/ftok.c uClibc-git/libc/misc/sysvipc/ftok.c
+--- uClibc-0.9.33.2/libc/misc/sysvipc/ftok.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/sysvipc/ftok.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <sys/ipc.h>
+ #include <sys/stat.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/sysvipc/ipc.h uClibc-git/libc/misc/sysvipc/ipc.h
+--- uClibc-0.9.33.2/libc/misc/sysvipc/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/sysvipc/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -3,10 +3,14 @@
+ #include <syscall.h>
+ #include <bits/wordsize.h>
+
+-#if __WORDSIZE == 32 || defined __alpha__ || defined __mips__
+-# define __IPC_64 0x100
++#ifndef __ARCH_HAS_DEPRECATED_SYSCALLS__
++# define __IPC_64 0x0
+ #else
+-# define __IPC_64 0x0
++# if __WORDSIZE == 32 || defined __alpha__ || defined __mips__
++# define __IPC_64 0x100
++# else
++# define __IPC_64 0x0
++# endif
+ #endif
+
+ #ifdef __NR_ipc
+diff -Nur uClibc-0.9.33.2/libc/misc/sysvipc/Makefile.in uClibc-git/libc/misc/sysvipc/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/sysvipc/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/sysvipc/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,22 +7,22 @@
+
+ subdirs += libc/misc/sysvipc
+
+-CSRC := ftok.c __syscall_ipc.c
++CSRC-y := ftok.c __syscall_ipc.c
+
+ # multi source sem.c
+-CSRC += semget.c semctl.c semop.c semtimedop.c
++CSRC-y += semget.c semctl.c semop.c semtimedop.c
+
+ # multi source shm.c
+-CSRC += shmat.c shmctl.c shmdt.c shmget.c
++CSRC-y += shmat.c shmctl.c shmdt.c shmget.c
+
+ # multi source msgq.c
+-CSRC += msgctl.c msgget.c msgrcv.c msgsnd.c
++CSRC-y += msgctl.c msgget.c msgrcv.c msgsnd.c
+
+ MISC_SYSVIPC_DIR := $(top_srcdir)libc/misc/sysvipc
+ MISC_SYSVIPC_OUT := $(top_builddir)libc/misc/sysvipc
+
+-MISC_SYSVIPC_SRC := $(patsubst %.c,$(MISC_SYSVIPC_DIR)/%.c,$(CSRC))
+-MISC_SYSVIPC_OBJ := $(patsubst %.c,$(MISC_SYSVIPC_OUT)/%.o,$(CSRC))
++MISC_SYSVIPC_SRC := $(patsubst %.c,$(MISC_SYSVIPC_DIR)/%.c,$(CSRC-y))
++MISC_SYSVIPC_OBJ := $(patsubst %.c,$(MISC_SYSVIPC_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_SYSVIPC_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/sysvipc/sem.c uClibc-git/libc/misc/sysvipc/sem.c
+--- uClibc-0.9.33.2/libc/misc/sysvipc/sem.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/sysvipc/sem.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sys/sem.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/sysvipc/shm.c uClibc-git/libc/misc/sysvipc/shm.c
+--- uClibc-0.9.33.2/libc/misc/sysvipc/shm.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/sysvipc/shm.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* SHMLBA uses it on most of the archs (not mips) */
+ #define __getpagesize getpagesize
+@@ -54,13 +53,13 @@
+ #ifdef L_shmctl
+ /* Provide operations to control over shared memory segments. */
+ #ifdef __NR_shmctl
+-#define __NR___libc_shmctl __NR_shmctl
+-static __inline__ _syscall3(int, __libc_shmctl, int, shmid, int, cmd, struct shmid_ds *, buf)
++#define __NR___syscall_shmctl __NR_shmctl
++static __always_inline _syscall3(int, __syscall_shmctl, int, shmid, int, cmd, struct shmid_ds *, buf)
+ #endif
+ int shmctl(int shmid, int cmd, struct shmid_ds *buf)
+ {
+ #ifdef __NR_shmctl
+- return __libc_shmctl(shmid, cmd | __IPC_64, buf);
++ return __syscall_shmctl(shmid, cmd | __IPC_64, buf);
+ #else
+ return __syscall_ipc(IPCOP_shmctl, shmid, cmd | __IPC_64, 0, buf, 0);
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/misc/time/ftime.c uClibc-git/libc/misc/time/ftime.c
+--- uClibc-0.9.33.2/libc/misc/time/ftime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/time/ftime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/timeb.h>
+ #include <sys/time.h>
+diff -Nur uClibc-0.9.33.2/libc/misc/time/Makefile.in uClibc-git/libc/misc/time/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/time/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/time/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,33 +7,24 @@
+
+ subdirs += libc/misc/time
+
+-CSRC := adjtime.c
+-ifeq ($(UCLIBC_SUSV3_LEGACY),y)
+-CSRC += ftime.c
+-endif
++CSRC-y := adjtime.c
++CSRC-$(UCLIBC_SUSV3_LEGACY) += ftime.c
+ # multi source time.c
+-CSRC += asctime.c asctime_r.c clock.c ctime.c ctime_r.c gmtime.c gmtime_r.c \
++CSRC-y += asctime.c asctime_r.c clock.c ctime.c ctime_r.c gmtime.c gmtime_r.c \
+ localtime.c localtime_r.c mktime.c strftime.c strptime.c tzset.c \
+ _time_t2tm.c __time_tm.c _time_mktime.c dysize.c timegm.c \
+ _time_mktime_tzi.c _time_localtime_tzi.c
+-ifeq ($(UCLIBC_HAS_FLOATS),y)
+-CSRC += difftime.c
+-endif
+-ifeq ($(UCLIBC_HAS_XLOCALE),y)
+-CSRC += strftime_l.c strptime_l.c
+-endif
+-ifeq ($(UCLIBC_HAS_WCHAR),y)
+-CSRC += wcsftime.c
+-ifeq ($(UCLIBC_HAS_XLOCALE),y)
+-CSRC += wcsftime_l.c
+-endif
+-endif
++CSRC-$(UCLIBC_HAS_FLOATS) += difftime.c
++CSRC-$(UCLIBC_HAS_XLOCALE) += strftime_l.c strptime_l.c
++CSRC-$(UCLIBC_HAS_WCHAR) += wcsftime.c
++CSRC-$(if $(findstring yy,$(UCLIBC_HAS_WCHAR)$(UCLIBC_HAS_XLOCALE)),y) += \
++ wcsftime_l.c
+
+ MISC_TIME_DIR := $(top_srcdir)libc/misc/time
+ MISC_TIME_OUT := $(top_builddir)libc/misc/time
+
+-MISC_TIME_SRC := $(patsubst %.c,$(MISC_TIME_DIR)/%.c,$(CSRC))
+-MISC_TIME_OBJ := $(patsubst %.c,$(MISC_TIME_OUT)/%.o,$(CSRC))
++MISC_TIME_SRC := $(patsubst %.c,$(MISC_TIME_DIR)/%.c,$(CSRC-y))
++MISC_TIME_OBJ := $(patsubst %.c,$(MISC_TIME_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_TIME_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/time/time.c uClibc-git/libc/misc/time/time.c
+--- uClibc-0.9.33.2/libc/misc/time/time.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/time/time.c 2014-02-03 12:32:56.000000000 +0100
+@@ -149,10 +149,6 @@
+ #ifdef __UCLIBC_HAS_WCHAR__
+ #include <wchar.h>
+ #endif
+-#ifdef __UCLIBC_HAS_XLOCALE__
+-#include <xlocale.h>
+-#endif
+-
+
+ #ifndef __isleap
+ #define __isleap(y) ( !((y) % 4) && ( ((y) % 100) || !((y) % 400) ) )
+@@ -212,7 +208,7 @@
+ char tzname[TZNAME_MAX+1];
+ } rule_struct;
+
+-__UCLIBC_MUTEX_EXTERN(_time_tzlock);
++__UCLIBC_MUTEX_EXTERN(_time_tzlock) attribute_hidden;
+
+ extern rule_struct _time_tzinfo[2] attribute_hidden;
+
+@@ -605,11 +601,11 @@
+ } ll_tzname_item_t;
+
+ /* Structures form a list "UTC" -> "???" -> "tzname1" -> "tzname2"... */
+-struct {
++static struct {
+ struct ll_tzname_item *next;
+ char tzname[4];
+ } ll_tzname_UNKNOWN = { NULL, "???" };
+-const struct {
++static const struct {
+ struct ll_tzname_item *next;
+ char tzname[4];
+ } ll_tzname_UTC = { (void*)&ll_tzname_UNKNOWN, "UTC" };
+@@ -671,7 +667,7 @@
+ isleap = __isleap(i);
+ --i;
+ day0 = (1
+- + i /* Normal years increment 1 wday. */
++ + i /* Normal years increment 1 wday. */
+ + (i/4)
+ - (i/100)
+ + (i/400) ) % 7;
+@@ -684,20 +680,22 @@
+ }
+ } else if (r->rule_type == 'M') {
+ /* Find 0-based day number for 1st of the month. */
+- day = 31*r->month - day_cor[r->month -1];
++ day = 31 * r->month - day_cor[r->month - 1];
+ if (isleap && (day >= 59)) {
+ ++day;
+ }
+- monlen = 31 + day_cor[r->month -1] - day_cor[r->month];
++ monlen = 31 + day_cor[r->month - 1] - day_cor[r->month];
+ if (isleap && (r->month == 2)) {
+ ++monlen;
+ }
+- /* Wweekday (0 is Sunday) of 1st of the month
++ /* Weekday (0 is Sunday) of 1st of the month
+ * is (day0 + day) % 7. */
+- if ((mday = r->day - ((day0 + day) % 7)) >= 0) {
+- mday -= 7; /* Back up into prev month since r->week>0. */
++ mday = r->day - ((day0 + day) % 7);
++ if (mday >= 0) {
++ mday -= 7; /* Back up into prev month since r->week > 0. */
+ }
+- if ((mday += 7 * r->week) >= monlen) {
++ mday += 7 * r->week;
++ if (mday >= monlen) {
+ mday -= 7;
+ }
+ /* So, 0-based day number is... */
+@@ -2100,7 +2098,8 @@
+ daylight = !!_time_tzinfo[1].tzname[0];
+ timezone = _time_tzinfo[0].gmt_offset;
+
+-#if defined(__UCLIBC_HAS_TZ_FILE__) || defined(__UCLIBC_HAS_TZ_CACHING__)
++#if (defined(__UCLIBC_HAS_TZ_FILE__) && !defined(__UCLIBC_HAS_TZ_FILE_READ_MANY__)) || \
++ defined(__UCLIBC_HAS_TZ_CACHING__)
+ FAST_DONE:
+ #endif
+ __UCLIBC_MUTEX_UNLOCK(_time_tzlock);
+diff -Nur uClibc-0.9.33.2/libc/misc/ttyent/getttyent.c uClibc-git/libc/misc/ttyent/getttyent.c
+--- uClibc-0.9.33.2/libc/misc/ttyent/getttyent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ttyent/getttyent.c 2014-02-03 12:32:56.000000000 +0100
+@@ -30,12 +30,11 @@
+ #include <features.h>
+ #include <ttyent.h>
+ #include <stdio.h>
+-#include <stdio_ext.h>
+ #include <ctype.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #ifdef __UCLIBC_HAS_THREADS__
+-# include <pthread.h>
++# include <stdio_ext.h>
+ #endif
+
+ static char zapchar;
+diff -Nur uClibc-0.9.33.2/libc/misc/ttyent/Makefile.in uClibc-git/libc/misc/ttyent/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/ttyent/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/ttyent/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,13 @@
+
+ subdirs += libc/misc/ttyent
+
+-CSRC := getttyent.c
++CSRC-y := getttyent.c
+
+ MISC_TTYENT_DIR := $(top_srcdir)libc/misc/ttyent
+ MISC_TTYENT_OUT := $(top_builddir)libc/misc/ttyent
+
+-MISC_TTYENT_SRC := $(patsubst %.c,$(MISC_TTYENT_DIR)/%.c,$(CSRC))
+-MISC_TTYENT_OBJ := $(patsubst %.c,$(MISC_TTYENT_OUT)/%.o,$(CSRC))
++MISC_TTYENT_SRC := $(patsubst %.c,$(MISC_TTYENT_DIR)/%.c,$(CSRC-y))
++MISC_TTYENT_OBJ := $(patsubst %.c,$(MISC_TTYENT_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_TTYENT_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/utmp/Makefile.in uClibc-git/libc/misc/utmp/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/utmp/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/utmp/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,17 +7,14 @@
+
+ subdirs += libc/misc/utmp
+
+-CSRC := utent.c wtent.c
+-
+-ifeq ($(UCLIBC_HAS_UTMPX),y)
+-CSRC += utxent.c
+-endif
++CSRC-y := utent.c wtent.c
++CSRC-$(UCLIBC_HAS_UTMPX) += utxent.c
+
+ MISC_UTMP_DIR := $(top_srcdir)libc/misc/utmp
+ MISC_UTMP_OUT := $(top_builddir)libc/misc/utmp
+
+-MISC_UTMP_SRC := $(patsubst %.c,$(MISC_UTMP_DIR)/%.c,$(CSRC))
+-MISC_UTMP_OBJ := $(patsubst %.c,$(MISC_UTMP_OUT)/%.o,$(CSRC))
++MISC_UTMP_SRC := $(patsubst %.c,$(MISC_UTMP_DIR)/%.c,$(CSRC-y))
++MISC_UTMP_OBJ := $(patsubst %.c,$(MISC_UTMP_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_UTMP_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/utmp/utent.c uClibc-git/libc/misc/utmp/utent.c
+--- uClibc-0.9.33.2/libc/misc/utmp/utent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/utmp/utent.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,32 +19,22 @@
+ #include <errno.h>
+ #include <string.h>
+ #include <utmp.h>
++#ifdef __UCLIBC_HAS_UTMPX__
++# include <utmpx.h>
++#endif
+ #include <not-cancel.h>
+
+ #include <bits/uClibc_mutex.h>
+ __UCLIBC_MUTEX_STATIC(utmplock, PTHREAD_MUTEX_INITIALIZER);
+
+-
+-/* Do not create extra unlocked functions if no locking is needed */
+-#if defined __UCLIBC_HAS_THREADS__
+-# define static_if_threaded static
+-#else
+-# define static_if_threaded /* nothing */
+-# define __setutent setutent
+-# define __getutent getutent
+-# define __getutid getutid
+-#endif
+-
+-
+ /* Some global crap */
+ static int static_fd = -1;
+ static struct utmp static_utmp;
+ static const char default_file_name[] = _PATH_UTMP;
+ static const char *static_ut_name = default_file_name;
+
+-
+ /* This function must be called with the LOCK held */
+-static_if_threaded void __setutent(void)
++static void __setutent_unlocked(void)
+ {
+ if (static_fd < 0) {
+ static_fd = open_not_cancel_2(static_ut_name, O_RDWR | O_CLOEXEC);
+@@ -63,17 +53,24 @@
+ lseek(static_fd, 0, SEEK_SET);
+ }
+ #if defined __UCLIBC_HAS_THREADS__
+-void setutent(void)
++static void __setutent(void)
+ {
+ __UCLIBC_MUTEX_LOCK(utmplock);
+- __setutent();
++ __setutent_unlocked();
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ }
++#else
++static void __setutent(void);
++strong_alias(__setutent_unlocked,__setutent)
++#endif
++strong_alias(__setutent,setutent)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++strong_alias(__setutent,setutxent)
+ #endif
+-libc_hidden_def(setutent)
+
+ /* This function must be called with the LOCK held */
+-static_if_threaded struct utmp *__getutent(void)
++static struct utmp *__getutent_unlocked(void)
+ {
+ if (static_fd < 0) {
+ __setutent();
+@@ -89,19 +86,29 @@
+ return NULL;
+ }
+ #if defined __UCLIBC_HAS_THREADS__
+-struct utmp *getutent(void)
++static struct utmp *__getutent(void)
+ {
+ struct utmp *ret;
+
+ __UCLIBC_MUTEX_LOCK(utmplock);
+- ret = __getutent();
++ ret = __getutent_unlocked();
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ return ret;
+ }
++#else
++static struct utmp *__getutent(void);
++strong_alias(__getutent_unlocked,__getutent)
++#endif
++strong_alias(__getutent,getutent)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++struct utmpx *getutxent(void)
++{
++ return (struct utmpx *) __getutent ();
++}
+ #endif
+-libc_hidden_def(getutent)
+
+-void endutent(void)
++static void __endutent(void)
+ {
+ __UCLIBC_MUTEX_LOCK(utmplock);
+ if (static_fd >= 0)
+@@ -109,10 +116,14 @@
+ static_fd = -1;
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ }
+-libc_hidden_def(endutent)
++strong_alias(__endutent,endutent)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++strong_alias(__endutent,endutxent)
++#endif
+
+ /* This function must be called with the LOCK held */
+-static_if_threaded struct utmp *__getutid(const struct utmp *utmp_entry)
++static struct utmp *__getutid_unlocked(const struct utmp *utmp_entry)
+ {
+ struct utmp *lutmp;
+ unsigned type;
+@@ -122,7 +133,7 @@
+ type = utmp_entry->ut_type - 1;
+ type /= 4;
+
+- while ((lutmp = __getutent()) != NULL) {
++ while ((lutmp = __getutent_unlocked()) != NULL) {
+ if (type == 0 && lutmp->ut_type == utmp_entry->ut_type) {
+ /* one of RUN_LVL, BOOT_TIME, NEW_TIME, OLD_TIME */
+ return lutmp;
+@@ -136,24 +147,34 @@
+ return NULL;
+ }
+ #if defined __UCLIBC_HAS_THREADS__
+-struct utmp *getutid(const struct utmp *utmp_entry)
++static struct utmp *__getutid(const struct utmp *utmp_entry)
+ {
+ struct utmp *ret;
+
+ __UCLIBC_MUTEX_LOCK(utmplock);
+- ret = __getutid(utmp_entry);
++ ret = __getutid_unlocked(utmp_entry);
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ return ret;
+ }
++#else
++static struct utmp *__getutid(const struct utmp *utmp_entry);
++strong_alias(__getutid_unlocked,__getutid)
++#endif
++strong_alias(__getutid,getutid)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++struct utmpx *getutxid(const struct utmpx *utmp_entry)
++{
++ return (struct utmpx *) __getutid ((const struct utmp *) utmp_entry);
++}
+ #endif
+-libc_hidden_def(getutid)
+
+-struct utmp *getutline(const struct utmp *utmp_entry)
++static struct utmp *__getutline(const struct utmp *utmp_entry)
+ {
+ struct utmp *lutmp;
+
+ __UCLIBC_MUTEX_LOCK(utmplock);
+- while ((lutmp = __getutent()) != NULL) {
++ while ((lutmp = __getutent_unlocked()) != NULL) {
+ if (lutmp->ut_type == USER_PROCESS || lutmp->ut_type == LOGIN_PROCESS) {
+ if (strncmp(lutmp->ut_line, utmp_entry->ut_line, sizeof(lutmp->ut_line)) == 0) {
+ break;
+@@ -163,16 +184,23 @@
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ return lutmp;
+ }
+-libc_hidden_def(getutline)
++strong_alias(__getutline,getutline)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++struct utmpx *getutxline(const struct utmpx *utmp_entry)
++{
++ return (struct utmpx *) __getutline ((const struct utmp *) utmp_entry);
++}
++#endif
+
+-struct utmp *pututline(const struct utmp *utmp_entry)
++static struct utmp *__pututline(const struct utmp *utmp_entry)
+ {
+ __UCLIBC_MUTEX_LOCK(utmplock);
+ /* Ignore the return value. That way, if they've already positioned
+ the file pointer where they want it, everything will work out. */
+ lseek(static_fd, (off_t) - sizeof(struct utmp), SEEK_CUR);
+
+- if (__getutid(utmp_entry) != NULL)
++ if (__getutid_unlocked(utmp_entry) != NULL)
+ lseek(static_fd, (off_t) - sizeof(struct utmp), SEEK_CUR);
+ else
+ lseek(static_fd, (off_t) 0, SEEK_END);
+@@ -182,9 +210,16 @@
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ return (struct utmp *)utmp_entry;
+ }
+-libc_hidden_def(pututline)
++strong_alias(__pututline,pututline)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++struct utmpx *pututxline (const struct utmpx *utmp_entry)
++{
++ return (struct utmpx *) __pututline ((const struct utmp *) utmp_entry);
++}
++#endif
+
+-int utmpname(const char *new_ut_name)
++static int __utmpname(const char *new_ut_name)
+ {
+ __UCLIBC_MUTEX_LOCK(utmplock);
+ if (new_ut_name != NULL) {
+@@ -205,4 +240,8 @@
+ __UCLIBC_MUTEX_UNLOCK(utmplock);
+ return 0; /* or maybe return -(static_ut_name != new_ut_name)? */
+ }
+-libc_hidden_def(utmpname)
++strong_alias(__utmpname,utmpname)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++strong_alias(__utmpname,utmpxname)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/utmp/utxent.c uClibc-git/libc/misc/utmp/utxent.c
+--- uClibc-0.9.33.2/libc/misc/utmp/utxent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/utmp/utxent.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,6 +13,7 @@
+ #include <utmpx.h>
+ #include <utmp.h>
+
++#if 0 /* moved to utent.c */
+ void setutxent(void)
+ {
+ setutent ();
+@@ -48,10 +49,12 @@
+ return utmpname (new_ut_name);
+ }
+
++/* moved to wtent.c */
+ void updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx)
+ {
+ updwtmp (wtmpx_file, (const struct utmp *) utmpx);
+ }
++#endif
+
+ /* Copy the information in UTMPX to UTMP. */
+ void getutmp (const struct utmpx *utmpx, struct utmp *utmp)
+@@ -104,4 +107,3 @@
+ utmpx->ut_time = utmp->ut_time;
+ #endif
+ }
+-
+diff -Nur uClibc-0.9.33.2/libc/misc/utmp/wtent.c uClibc-git/libc/misc/utmp/wtent.c
+--- uClibc-0.9.33.2/libc/misc/utmp/wtent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/utmp/wtent.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,9 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include <utmp.h>
++#ifdef __UCLIBC_HAS_UTMPX__
++# include <utmpx.h>
++#endif
+ #include <fcntl.h>
+ #include <sys/file.h>
+ #include <not-cancel.h>
+@@ -33,11 +36,11 @@
+ }
+ #endif
+
+-void updwtmp(const char *wtmp_file, const struct utmp *lutmp)
++static void __updwtmp(const char *wtmp_file, const struct utmp *lutmp)
+ {
+ int fd;
+
+- fd = open_not_cancel(wtmp_file, O_APPEND | O_WRONLY, 0);
++ fd = open_not_cancel_2(wtmp_file, O_APPEND | O_WRONLY);
+ if (fd >= 0) {
+ if (lockf(fd, F_LOCK, 0) == 0) {
+ write_not_cancel(fd, lutmp, sizeof(struct utmp));
+@@ -46,4 +49,11 @@
+ }
+ }
+ }
+-libc_hidden_def(updwtmp)
++strong_alias(__updwtmp,updwtmp)
++
++#ifdef __UCLIBC_HAS_UTMPX__
++void updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx)
++{
++ __updwtmp (wtmpx_file, (const struct utmp *) utmpx);
++}
++#endif
+diff -Nur uClibc-0.9.33.2/libc/misc/wchar/Makefile.in uClibc-git/libc/misc/wchar/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/wchar/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/wchar/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -19,19 +19,17 @@
+ subdirs += libc/misc/wchar
+
+ # multi source wchar.c
+-CSRC := btowc.c wctob.c mbsinit.c mbrlen.c mbrtowc.c wcrtomb.c mbsrtowcs.c \
++CSRC-y := btowc.c wctob.c mbsinit.c mbrlen.c mbrtowc.c wcrtomb.c mbsrtowcs.c \
+ wcsrtombs.c _wchar_utf8sntowcs.c _wchar_wcsntoutf8s.c \
+ mbsnrtowcs.c wcsnrtombs.c wcwidth.c wcswidth.c
+
+-ifeq ($(UCLIBC_HAS_LOCALE),y)
+-CSRC += iconv.c
+-endif
++CSRC-$(UCLIBC_HAS_LOCALE) += iconv.c
+
+ MISC_WCHAR_DIR := $(top_srcdir)libc/misc/wchar
+ MISC_WCHAR_OUT := $(top_builddir)libc/misc/wchar
+
+-MISC_WCHAR_SRC := $(patsubst %.c,$(MISC_WCHAR_DIR)/%.c,$(CSRC))
+-MISC_WCHAR_OBJ := $(patsubst %.c,$(MISC_WCHAR_OUT)/%.o,$(CSRC))
++MISC_WCHAR_SRC := $(patsubst %.c,$(MISC_WCHAR_DIR)/%.c,$(CSRC-y))
++MISC_WCHAR_OBJ := $(patsubst %.c,$(MISC_WCHAR_OUT)/%.o,$(CSRC-y))
+
+ libc-$(UCLIBC_HAS_WCHAR) += $(MISC_WCHAR_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/wchar/wchar.c uClibc-git/libc/misc/wchar/wchar.c
+--- uClibc-0.9.33.2/libc/misc/wchar/wchar.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/wchar/wchar.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -1196,6 +1196,9 @@
+ #endif
+
+ #if defined L_iconv || defined L_iconv_main
++# ifdef L_iconv_main
++static
++# endif
+ const unsigned char __iconv_codesets[] =
+ "\x0a\xe0""WCHAR_T\x00" /* superset of UCS-4 but platform-endian */
+ #if __BYTE_ORDER == __BIG_ENDIAN
+diff -Nur uClibc-0.9.33.2/libc/misc/wctype/Makefile.in uClibc-git/libc/misc/wctype/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/wctype/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/wctype/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -14,19 +14,15 @@
+ iswxdigit.c iswblank.c wctrans.c towctrans.c \
+ wctype.c iswctype.c towlower.c towupper.c
+
+-CSRC :=
+-ifeq ($(UCLIBC_HAS_WCHAR),y)
+-CSRC += $(COM_SRC)
+-endif
+-ifeq ($(UCLIBC_HAS_XLOCALE),y)
+-CSRC += $(patsubst %.c,%_l.c,$(COM_SRC))
+-endif
++CSRC-y :=
++CSRC-$(UCLIBC_HAS_WCHAR) += $(COM_SRC)
++CSRC-$(UCLIBC_HAS_XLOCALE) += $(patsubst %.c,%_l.c,$(COM_SRC))
+
+ MISC_WCTYPE_DIR := $(top_srcdir)libc/misc/wctype
+ MISC_WCTYPE_OUT := $(top_builddir)libc/misc/wctype
+
+-MISC_WCTYPE_SRC := $(patsubst %.c,$(MISC_WCTYPE_DIR)/%.c,$(CSRC))
+-MISC_WCTYPE_OBJ := $(patsubst %.c,$(MISC_WCTYPE_OUT)/%.o,$(CSRC))
++MISC_WCTYPE_SRC := $(patsubst %.c,$(MISC_WCTYPE_DIR)/%.c,$(CSRC-y))
++MISC_WCTYPE_OBJ := $(patsubst %.c,$(MISC_WCTYPE_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(MISC_WCTYPE_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/wctype/_wctype.c uClibc-git/libc/misc/wctype/_wctype.c
+--- uClibc-0.9.33.2/libc/misc/wctype/_wctype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/wctype/_wctype.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -41,10 +41,6 @@
+ # error xlocale functionality is not supported in stub locale mode.
+ #endif
+
+-#ifdef __UCLIBC_HAS_XLOCALE__
+-# include <xlocale.h>
+-#endif
+-
+ /* We know wide char support is enabled. We wouldn't be here otherwise. */
+
+ /* Define this if you want to unify the towupper and towlower code in the
+diff -Nur uClibc-0.9.33.2/libc/misc/wordexp/Makefile.in uClibc-git/libc/misc/wordexp/Makefile.in
+--- uClibc-0.9.33.2/libc/misc/wordexp/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/wordexp/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,13 +7,13 @@
+
+ subdirs += libc/misc/wordexp
+
+-CSRC := wordexp.c
++CSRC-y := wordexp.c
+
+ MISC_WORDEXP_DIR := $(top_srcdir)libc/misc/wordexp
+ MISC_WORDEXP_OUT := $(top_builddir)libc/misc/wordexp
+
+-MISC_WORDEXP_SRC := $(patsubst %.c,$(MISC_WORDEXP_DIR)/%.c,$(CSRC))
+-MISC_WORDEXP_OBJ := $(patsubst %.c,$(MISC_WORDEXP_OUT)/%.o,$(CSRC))
++MISC_WORDEXP_SRC := $(patsubst %.c,$(MISC_WORDEXP_DIR)/%.c,$(CSRC-y))
++MISC_WORDEXP_OBJ := $(patsubst %.c,$(MISC_WORDEXP_OUT)/%.o,$(CSRC-y))
+
+ libc-$(UCLIBC_HAS_WORDEXP) += $(MISC_WORDEXP_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/misc/wordexp/wordexp.c uClibc-git/libc/misc/wordexp/wordexp.c
+--- uClibc-0.9.33.2/libc/misc/wordexp/wordexp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/misc/wordexp/wordexp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,11 +16,11 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <bits/kernel-features.h>
++#include <ctype.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <fcntl.h>
+@@ -36,6 +36,10 @@
+ #include <glob.h>
+ #include <wordexp.h>
+
++#ifndef __ARCH_USE_MMU__
++# define fork vfork
++#endif
++
+ #define __WORDEXP_FULL
+
+ /*
+diff -Nur uClibc-0.9.33.2/libc/pwd_grp/lckpwdf.c uClibc-git/libc/pwd_grp/lckpwdf.c
+--- uClibc-0.9.33.2/libc/pwd_grp/lckpwdf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/pwd_grp/lckpwdf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <fcntl.h>
+@@ -51,6 +50,7 @@
+ struct sigaction new_act; /* New signal action. */
+ struct flock fl; /* Information struct for locking. */
+ int result;
++ int rv = -1;
+
+ if (lock_fd != -1)
+ /* Still locked by own process. */
+@@ -111,11 +111,13 @@
+ if (result < 0) {
+ close(lock_fd);
+ lock_fd = -1;
++ goto DONE;
+ }
++ rv = 0;
+
+ DONE:
+ __UCLIBC_MUTEX_UNLOCK(mylock);
+- return 0; /* TODO: return result? */
++ return rv;
+ }
+
+
+diff -Nur uClibc-0.9.33.2/libc/pwd_grp/Makefile.in uClibc-git/libc/pwd_grp/Makefile.in
+--- uClibc-0.9.33.2/libc/pwd_grp/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/pwd_grp/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -10,20 +10,17 @@
+ PWDGRP_DIR := $(top_srcdir)libc/pwd_grp
+ PWDGRP_OUT := $(top_builddir)libc/pwd_grp
+
+-CSRC := $(notdir $(wildcard $(PWDGRP_DIR)/*.c))
+-CSRC := $(filter-out pwd_grp.c pwd_grp_internal.c,$(CSRC))
+-
+-ifneq ($(UCLIBC_HAS_SHADOW),y)
+-SHADOW_CSRC := \
+- fgetspent_r.c fgetspent.c getspent_r.c getspent.c \
++CSRC-y := $(notdir $(wildcard $(PWDGRP_DIR)/*.c))
++CSRC- := pwd_grp.c pwd_grp_internal.c # multi-source and helper
++CSRC-$(UCLIBC_HAS_SHADOW) += fgetspent_r.c fgetspent.c getspent_r.c getspent.c \
+ getspnam_r.c getspnam.c lckpwdf.c putspent.c \
+ sgetspent_r.c sgetspent.c __parsespent.c
+ # getspuid_r.c getspuid.c
+-CSRC := $(filter-out $(SHADOW_CSRC),$(CSRC))
+-endif
+
+-PWDGRP_SRC := $(patsubst %.c,$(PWDGRP_DIR)/%.c,$(CSRC))
+-PWDGRP_OBJ := $(patsubst %.c,$(PWDGRP_OUT)/%.o,$(CSRC))
++CSRC-y := $(filter-out $(CSRC-),$(CSRC-y))
++
++PWDGRP_SRC := $(patsubst %.c,$(PWDGRP_DIR)/%.c,$(CSRC-y))
++PWDGRP_OBJ := $(patsubst %.c,$(PWDGRP_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(PWDGRP_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/pwd_grp/pwd_grp.c uClibc-git/libc/pwd_grp/pwd_grp.c
+--- uClibc-0.9.33.2/libc/pwd_grp/pwd_grp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/pwd_grp/pwd_grp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -354,6 +354,7 @@
+ getpwnam_r(name, &resultbuf, buffer, sizeof(buffer), &result);
+ return result;
+ }
++libc_hidden_def(getpwnam)
+
+ #endif
+ /**********************************************************************/
+diff -Nur uClibc-0.9.33.2/libc/pwd_grp/pwd_grp_internal.c uClibc-git/libc/pwd_grp/pwd_grp_internal.c
+--- uClibc-0.9.33.2/libc/pwd_grp/pwd_grp_internal.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/pwd_grp/pwd_grp_internal.c 2014-02-03 12:32:56.000000000 +0100
+@@ -34,9 +34,6 @@
+ #ifdef __UCLIBC_HAS_SHADOW__
+ #include <shadow.h>
+ #endif
+-#ifdef __UCLIBC_HAS_THREADS__
+-#include <pthread.h>
+-#endif
+
+ /**********************************************************************/
+ /* Sizes for statically allocated buffers. */
+diff -Nur uClibc-0.9.33.2/libc/signal/allocrtsig.c uClibc-git/libc/signal/allocrtsig.c
+--- uClibc-0.9.33.2/libc/signal/allocrtsig.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/allocrtsig.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <signal.h>
+-#include <sys/types.h>
+ #include <sys/syscall.h>
+
+ /* Only enable rt signals when it is supported at compile time */
+@@ -34,6 +32,13 @@
+ #else
+ # ifdef __UCLIBC_HAS_THREADS_NATIVE__
+ static int current_rtmin = __SIGRTMIN + 2;
++# elif defined __UCLIBC_HAS_THREADS__ && !defined __LINUXTHREADS_OLD__
++/* psm: might be good for LT old as well, do not want to break it for now */
++/* Sanity check */
++# if !defined __SIGRTMIN || (__SIGRTMAX - __SIGRTMIN) < 3
++# error "This must not happen"
++# endif
++static int current_rtmin = __SIGRTMIN + 3;
+ # else
+ static int current_rtmin = __SIGRTMIN;
+ # endif
+@@ -52,6 +57,7 @@
+ return current_rtmax;
+ }
+
++#if 0
+ /* Allocate real-time signal with highest/lowest available
+ priority. Please note that we don't use a lock since we assume
+ this function to be called at program start. */
+@@ -64,3 +70,4 @@
+
+ return high ? current_rtmin++ : current_rtmax--;
+ }
++#endif
+diff -Nur uClibc-0.9.33.2/libc/signal/killpg.c uClibc-git/libc/signal/killpg.c
+--- uClibc-0.9.33.2/libc/signal/killpg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/killpg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,14 +12,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+
+-
+ /* Send SIG to all processes in process group PGRP.
+ If PGRP is zero, send SIG to all processes in
+ the current process's process group. */
+diff -Nur uClibc-0.9.33.2/libc/signal/Makefile.in uClibc-git/libc/signal/Makefile.in
+--- uClibc-0.9.33.2/libc/signal/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -8,20 +8,18 @@
+ subdirs += libc/signal
+
+ CSRC-y := allocrtsig.c killpg.c raise.c sigaction.c sigaddset.c sigandset.c \
+- sigblock.c sigdelset.c sigempty.c sigfillset.c siggetmask.c \
++ sigdelset.c sigempty.c sigfillset.c \
+ sigisempty.c sigismem.c sigjmp.c signal.c \
+- sigorset.c sigsetmask.c sigsetops.c sigwait.c
++ sigorset.c sigsetops.c sigwait.c
+ CSRC-$(UCLIBC_HAS_OBSOLETE_BSD_SIGNAL) += \
+ sighold.c sigignore.c sigrelse.c sigset.c
+ CSRC-$(UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL) += sysv_signal.c
+ CSRC-$(UCLIBC_SUSV4_LEGACY) += sigintr.c sigpause.c
+
+-ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC-y:=$(filter-out raise.c,$(CSRC-y))
+-endif
++CSRC-$(UCLIBC_HAS_THREADS_NATIVE):=$(filter-out raise.c,$(CSRC-y))
+
+-ifneq ($(strip $(ARCH_OBJS)),)
+-CSRC-y := $(filter-out $(notdir $(ARCH_OBJS:.o=.c)),$(CSRC-y))
++ifneq ($(strip $(ARCH_OBJS-y)),)
++CSRC-y := $(filter-out $(notdir $(ARCH_OBJS-y:.o=.c)),$(CSRC-y))
+ endif
+
+ ifneq ($(UCLIBC_HAS_BACKTRACE),)
+diff -Nur uClibc-0.9.33.2/libc/signal/raise.c uClibc-git/libc/signal/raise.c
+--- uClibc-0.9.33.2/libc/signal/raise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/raise.c 2014-02-03 12:32:56.000000000 +0100
+@@ -3,9 +3,7 @@
+ */
+
+ #include <unistd.h>
+-#include <string.h>
+ #include <signal.h>
+-#include <sys/types.h>
+
+ int raise(int signo)
+ {
+diff -Nur uClibc-0.9.33.2/libc/signal/sigaction.c uClibc-git/libc/signal/sigaction.c
+--- uClibc-0.9.33.2/libc/signal/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,23 +12,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#include <errno.h>
+ #include <signal.h>
+-#include <string.h>
+ #include <sys/syscall.h>
+
+-#include <bits/kernel_sigaction.h>
+-
+-#ifndef LIBC_SIGACTION
+-extern __typeof(sigaction) __libc_sigaction;
+-#endif
+-
+-
+ #if defined __NR_rt_sigaction
+
+ /* If ACT is not NULL, change the action for SIG to *ACT.
+@@ -47,6 +36,9 @@
+ }
+
+ #else
++# define __need_NULL
++# include <stddef.h>
++# include <bits/kernel_sigaction.h>
+
+ /* If ACT is not NULL, change the action for SIG to *ACT.
+ If OACT is not NULL, put the old action for SIG in *OACT. */
+diff -Nur uClibc-0.9.33.2/libc/signal/sigaddset.c uClibc-git/libc/signal/sigaddset.c
+--- uClibc-0.9.33.2/libc/signal/sigaddset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigaddset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,11 +12,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "sigsetops.h"
++#define __need_NULL
++#include <stddef.h>
++#include <signal.h>
++#include <errno.h>
+
+ /* Add SIGNO to SET. */
+ int
+diff -Nur uClibc-0.9.33.2/libc/signal/sigandset.c uClibc-git/libc/signal/sigandset.c
+--- uClibc-0.9.33.2/libc/signal/sigandset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigandset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libc/signal/sigblock.c uClibc-git/libc/signal/sigblock.c
+--- uClibc-0.9.33.2/libc/signal/sigblock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigblock.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,18 +12,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __UCLIBC_HIDE_DEPRECATED__
+-#include <errno.h>
++/*#define __UCLIBC_HIDE_DEPRECATED__*/
+ #include <signal.h>
+
+ #include "sigset-cvt-mask.h"
+
+ /* Block signals in MASK, returning the old mask. */
+-int sigblock (int mask)
++static int sigblock (int mask)
+ {
+ sigset_t set, oset;
+
+@@ -31,4 +29,3 @@
+ sigprocmask (SIG_BLOCK, &set, &oset); /* can't fail */
+ return sigset_get_old_mask (&oset);
+ }
+-libc_hidden_def(sigblock)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigdelset.c uClibc-git/libc/signal/sigdelset.c
+--- uClibc-0.9.33.2/libc/signal/sigdelset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigdelset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,11 +12,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "sigsetops.h"
++#define __need_NULL
++#include <stddef.h>
++#include <signal.h>
++#include <errno.h>
+
+ /* Add SIGNO to SET. */
+ int sigdelset (sigset_t *set, int signo)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigempty.c uClibc-git/libc/signal/sigempty.c
+--- uClibc-0.9.33.2/libc/signal/sigempty.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigempty.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,14 +12,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <errno.h>
+ #include <signal.h>
+-#include <string.h>
+-
++#if 0
++#define __need_NULL
++#include <stddef.h>
++#include <errno.h>
++#endif
+
+ /* Clear all signals from SET. */
+ int sigemptyset (sigset_t *set)
+@@ -36,4 +37,3 @@
+
+ return 0;
+ }
+-libc_hidden_def(sigemptyset)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigfillset.c uClibc-git/libc/signal/sigfillset.c
+--- uClibc-0.9.33.2/libc/signal/sigfillset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigfillset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,17 +12,18 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <errno.h>
+ #include <signal.h>
+-#include <string.h>
+ #ifdef __UCLIBC_HAS_THREADS_NATIVE__
+ # include <pthreadP.h> /* SIGCANCEL */
+ #endif
+-
++#if 0
++#define __need_NULL
++#include <stddef.h>
++#include <errno.h>
++#endif
+
+ /* Set all signals in SET. */
+ int
+@@ -49,4 +50,3 @@
+
+ return 0;
+ }
+-libc_hidden_def(sigfillset)
+diff -Nur uClibc-0.9.33.2/libc/signal/siggetmask.c uClibc-git/libc/signal/siggetmask.c
+--- uClibc-0.9.33.2/libc/signal/siggetmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/siggetmask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __UCLIBC_HIDE_DEPRECATED__
+ #include <signal.h>
+
+-
+ int
+ siggetmask (void)
+ {
+diff -Nur uClibc-0.9.33.2/libc/signal/sighold.c uClibc-git/libc/signal/sighold.c
+--- uClibc-0.9.33.2/libc/signal/sighold.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sighold.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,15 +14,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __need_NULL
+ #include <stddef.h>
+ #include <signal.h>
+
+-
+ int sighold (int sig)
+ {
+ sigset_t set;
+diff -Nur uClibc-0.9.33.2/libc/signal/sigignore.c uClibc-git/libc/signal/sigignore.c
+--- uClibc-0.9.33.2/libc/signal/sigignore.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigignore.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,16 +14,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <errno.h>
+ #define __need_NULL
+ #include <stddef.h>
+ #include <signal.h>
+-#include <string.h> /* For the real memset prototype. */
+-
++#include <string.h>
+
+ int sigignore (int sig)
+ {
+diff -Nur uClibc-0.9.33.2/libc/signal/sigintr.c uClibc-git/libc/signal/sigintr.c
+--- uClibc-0.9.33.2/libc/signal/sigintr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigintr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,20 +12,19 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <stddef.h>
+ #include <signal.h>
+-#include <errno.h>
+-
+
+ /* If INTERRUPT is nonzero, make signal SIG interrupt system calls
+ (causing them to fail with EINTR); if INTERRUPT is zero, make system
+ calls be restarted after signal SIG. */
+ #ifdef SA_RESTART
+-extern sigset_t _sigintr attribute_hidden; /* Defined in signal.c. */
++# define __need_NULL
++# include <stddef.h>
++#else
++# include <errno.h>
+ #endif
+
+ int siginterrupt (int sig, int interrupt)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigisempty.c uClibc-git/libc/signal/sigisempty.c
+--- uClibc-0.9.33.2/libc/signal/sigisempty.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigisempty.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libc/signal/sigismem.c uClibc-git/libc/signal/sigismem.c
+--- uClibc-0.9.33.2/libc/signal/sigismem.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigismem.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,11 +12,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "sigsetops.h"
++#define __need_NULL
++#include <stddef.h>
++#include <signal.h>
++#include <errno.h>
+
+ /* Return 1 if SIGNO is in SET, 0 if not. */
+ int sigismember (const sigset_t *set, int signo)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigjmp.c uClibc-git/libc/signal/sigjmp.c
+--- uClibc-0.9.33.2/libc/signal/sigjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigjmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,21 +12,18 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
++#define __need_NULL
+ #include <stddef.h>
+ #include <setjmp.h>
+ #include <signal.h>
+-#include <libc-internal.h>
+-
+
+ /* This function is called by the `sigsetjmp' macro
+ before doing a `__setjmp' on ENV[0].__jmpbuf.
+ Always return zero. */
+
+-int __sigjmp_save (sigjmp_buf env, int savemask) attribute_hidden;
+ int __sigjmp_save (sigjmp_buf env, int savemask)
+ {
+ env[0].__mask_was_saved = (savemask &&
+diff -Nur uClibc-0.9.33.2/libc/signal/signal.c uClibc-git/libc/signal/signal.c
+--- uClibc-0.9.33.2/libc/signal/signal.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/signal.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,15 +14,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+ #include <string.h> /* For the real memset prototype. */
+
+-sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */
++sigset_t _sigintr; /* Set by siginterrupt. */
+
+ /* Set the handler for the signal SIG to HANDLER,
+ returning the old handler, or SIG_ERR on error. */
+diff -Nur uClibc-0.9.33.2/libc/signal/sigorset.c uClibc-git/libc/signal/sigorset.c
+--- uClibc-0.9.33.2/libc/signal/sigorset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigorset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libc/signal/sigpause.c uClibc-git/libc/signal/sigpause.c
+--- uClibc-0.9.33.2/libc/signal/sigpause.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigpause.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,25 +13,19 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define __UCLIBC_HIDE_DEPRECATED__
+-/* psm: need the BSD version of sigpause here */
+-#include <errno.h>
+-#define __FAVOR_BSD
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
+ #include <signal.h>
+-#include <stddef.h> /* For NULL. */
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#endif
++#define __need_NULL
++#include <stddef.h>
++#include <cancel.h>
+
+ #include "sigset-cvt-mask.h"
+
+ /* Set the mask of blocked signals to MASK,
+ wait for a signal to arrive, and then restore the mask. */
+-int __sigpause (int sig_or_mask, int is_sig)
++static int __sigpause (int sig_or_mask, int is_sig)
+ {
+ sigset_t set;
+
+@@ -49,29 +43,21 @@
+ /* Note the sigpause() is a cancellation point. But since we call
+ sigsuspend() which itself is a cancellation point we do not have
+ to do anything here. */
+- return sigsuspend (&set);
++ /* uClibc note: not true on uClibc, we call the non-cancellable version */
++ return __NC(sigsuspend)(&set);
+ }
+-libc_hidden_def(__sigpause)
+
+-#undef sigpause
++int __bsd_sigpause(int mask);
++int __bsd_sigpause(int mask)
++{
++ return __sigpause(mask, 0);
++}
+
+ /* We have to provide a default version of this function since the
+ standards demand it. The version which is a bit more reasonable is
+ the BSD version. So make this the default. */
+-int sigpause (int mask)
++static int __NC(sigpause)(int sig)
+ {
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- if (SINGLE_THREAD_P)
+- return __sigpause (mask, 0);
+-
+- int oldtype = LIBC_CANCEL_ASYNC ();
+-
+- int result = __sigpause (mask, 0);
+-
+- LIBC_CANCEL_RESET (oldtype);
+-
+- return result;
+-#else
+- return __sigpause (mask, 0);
+-#endif
++ return __sigpause(sig, 1);
+ }
++CANCELLABLE_SYSCALL(int, sigpause, (int sig), (sig))
+diff -Nur uClibc-0.9.33.2/libc/signal/sigrelse.c uClibc-git/libc/signal/sigrelse.c
+--- uClibc-0.9.33.2/libc/signal/sigrelse.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigrelse.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,15 +14,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __need_NULL
+ #include <stddef.h>
+ #include <signal.h>
+
+-
+ int sigrelse (int sig)
+ {
+ sigset_t set;
+diff -Nur uClibc-0.9.33.2/libc/signal/sigset.c uClibc-git/libc/signal/sigset.c
+--- uClibc-0.9.33.2/libc/signal/sigset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,16 +12,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #define __need_NULL
+ #include <stddef.h>
+ #include <signal.h>
+-#include <string.h> /* For the real memset prototype. */
+-
++#include <string.h>
+
+ /* Set the disposition for SIG. */
+ __sighandler_t sigset (int sig, __sighandler_t disp)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigset-cvt-mask.h uClibc-git/libc/signal/sigset-cvt-mask.h
+--- uClibc-0.9.33.2/libc/signal/sigset-cvt-mask.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigset-cvt-mask.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SIGSET_CVT_MASK_H
++#define _SIGSET_CVT_MASK_H
+
+ #include <string.h>
+
+@@ -36,3 +38,5 @@
+ {
+ return (unsigned int) set->__val[0];
+ }
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/signal/sigsetmask.c uClibc-git/libc/signal/sigsetmask.c
+--- uClibc-0.9.33.2/libc/signal/sigsetmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigsetmask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,18 +12,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __UCLIBC_HIDE_DEPRECATED__
+-#include <errno.h>
++/*#define __UCLIBC_HIDE_DEPRECATED__*/
+ #include <signal.h>
+
+ #include "sigset-cvt-mask.h"
+
+ /* Set the mask of blocked signals to MASK, returning the old mask. */
+-int
++static int
+ sigsetmask (int mask)
+ {
+ sigset_t set, oset;
+@@ -32,4 +30,3 @@
+ sigprocmask (SIG_SETMASK, &set, &oset); /* can't fail */
+ return sigset_get_old_mask (&oset);
+ }
+-libc_hidden_def(sigsetmask)
+diff -Nur uClibc-0.9.33.2/libc/signal/sigsetops.h uClibc-git/libc/signal/sigsetops.h
+--- uClibc-0.9.33.2/libc/signal/sigsetops.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigsetops.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,33 +0,0 @@
+-/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-/* Definitions relevant to functions that operate on `sigset_t's. */
+-
+-#include <errno.h>
+-#include <signal.h>
+-#include <string.h>
+-
+-#define BITS (_NSIG - 1)
+-#define ELT(signo) (((signo) - 1) / BITS)
+-#define MASK(signo) (1 << (((signo) - 1) % BITS))
+-
+-#undef sigemptyset
+-#undef sigfillset
+-#undef sigaddset
+-#undef sigdelset
+-#undef sigismember
+diff -Nur uClibc-0.9.33.2/libc/signal/sigwait.c uClibc-git/libc/signal/sigwait.c
+--- uClibc-0.9.33.2/libc/signal/sigwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sigwait.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,96 +15,42 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA. */
+-
+-#include <errno.h>
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
++ */
++
++#define __need_NULL
++#include <stddef.h>
++#include <sys/syscall.h>
+ #include <signal.h>
+-#include <string.h>
+-#include <unistd.h>
++#include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
++#if defined __NR_rt_sigtimedwait && defined __UCLIBC_HAS_REALTIME__
+
+-# ifdef __NR_rt_sigtimedwait
++#include <string.h>
+
+ /* Return any pending signal or wait for one for the given time. */
+-static int do_sigwait(const sigset_t *set, int *sig)
++static int __NC(sigwait)(const sigset_t *set, int *sig)
+ {
+ int ret;
+
+-# ifdef SIGCANCEL
+- sigset_t tmpset;
+- if (set != NULL
+- && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+-# ifdef SIGSETXID
+- || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+-# endif
+- ))
+- {
+- /* Create a temporary mask without the bit for SIGCANCEL set. */
+- // We are not copying more than we have to.
+- memcpy(&tmpset, set, _NSIG / 8);
+- __sigdelset(&tmpset, SIGCANCEL);
+-# ifdef SIGSETXID
+- __sigdelset(&tmpset, SIGSETXID);
+-# endif
+- set = &tmpset;
+- }
+-# endif
+-
+- /* XXX The size argument hopefully will have to be changed to the
+- real size of the user-level sigset_t. */
+- INTERNAL_SYSCALL_DECL(err);
+ do
+- ret = INTERNAL_SYSCALL (rt_sigtimedwait, err, 4, set, NULL,
+- NULL, _NSIG / 8);
+- while (INTERNAL_SYSCALL_ERROR_P (ret, err)
+- && INTERNAL_SYSCALL_ERRNO (ret, err) == EINTR);
+- if (! INTERNAL_SYSCALL_ERROR_P (ret, err))
+- {
++ /* we might as well use sigtimedwait and do not care about cancellation */
++ ret = __NC(sigtimedwait)(set, NULL, NULL);
++ while (ret == -1 && errno == EINTR);
++ if (ret != -1) {
+ *sig = ret;
+ ret = 0;
+- }
+-else
+- ret = INTERNAL_SYSCALL_ERRNO (ret, err);
++ } else
++ ret = errno;
+
+ return ret;
+ }
+
+-int sigwait (const sigset_t *set, int *sig)
+-{
+- if(SINGLE_THREAD_P)
+- return do_sigwait(set, sig);
+-
+- int oldtype = LIBC_CANCEL_ASYNC();
+-
+- int result = do_sigwait(set, sig);
++#else /* __NR_rt_sigtimedwait */
+
+- LIBC_CANCEL_RESET(oldtype);
+-
+- return result;
+-}
+-# else /* __NR_rt_sigtimedwait */
+-# error We must have rt_sigtimedwait defined!!!
+-# endif
+-#else /* __UCLIBC_HAS_THREADS_NATIVE__ */
+-
+-# if defined __UCLIBC_HAS_REALTIME__
+-
+-int sigwait (const sigset_t *set, int *sig)
+-{
+- int ret = 1;
+- if ((ret = sigwaitinfo(set, NULL)) != -1) {
+- *sig = ret;
+- return 0;
+- }
+- return 1;
+-}
+-
+-# else /* __UCLIBC_HAS_REALTIME__ */
+ /* variant without REALTIME extensions */
++#include <unistd.h> /* smallint */
+
+ static smallint was_sig; /* obviously not thread-safe */
+
+@@ -113,7 +59,7 @@
+ was_sig = sig;
+ }
+
+-int sigwait (const sigset_t *set, int *sig)
++static int __NC(sigwait)(const sigset_t *set, int *sig)
+ {
+ sigset_t tmp_mask;
+ struct sigaction saved[NSIG];
+@@ -147,7 +93,7 @@
+ }
+
+ /* Now we can wait for signals. */
+- sigsuspend (&tmp_mask);
++ __NC(sigsuspend)(&tmp_mask);
+
+ restore_handler:
+ save_errno = errno;
+@@ -163,5 +109,6 @@
+ *sig = was_sig;
+ return was_sig == -1 ? -1 : 0;
+ }
+-# endif /* __UCLIBC_HAS_REALTIME__ */
+-#endif /* __UCLIBC_HAS_THREADS_NATIVE__ */
++#endif /* __NR_rt_sigtimedwait */
++
++CANCELLABLE_SYSCALL(int, sigwait, (const sigset_t *set, int *sig), (set, sig))
+diff -Nur uClibc-0.9.33.2/libc/signal/sysv_signal.c uClibc-git/libc/signal/sysv_signal.c
+--- uClibc-0.9.33.2/libc/signal/sysv_signal.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/signal/sysv_signal.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,14 +12,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+-#include <string.h> /* For the real memset prototype. */
+-
+
+ /* Tolerate non-threads versions of Posix */
+ #ifndef SA_ONESHOT
+diff -Nur uClibc-0.9.33.2/libc/stdio/_fpmaxtostr.c uClibc-git/libc/stdio/_fpmaxtostr.c
+--- uClibc-0.9.33.2/libc/stdio/_fpmaxtostr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_fpmaxtostr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,7 @@
+-/* Copyright (C) 2004 Manuel Novoa III <mjn3@codepoet.org>
++/*
++ * Copyright (C) 2000,2001,2003,2004 Manuel Novoa III <mjn3@codepoet.org>
+ *
+- * GNU Library General Public License (LGPL) version 2 or later.
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ *
+ * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details.
+ */
+@@ -9,15 +10,9 @@
+ #include <printf.h>
+ #include <float.h>
+ #include <locale.h>
+-#include <bits/uClibc_fpmax.h>
++#include "_fpmaxtostr.h"
+
+-
+-typedef size_t (__fp_outfunc_t)(FILE *fp, intptr_t type, intptr_t len,
+- intptr_t buf);
+-
+-
+-/* Copyright (C) 2000, 2001, 2003 Manuel Novoa III
+- *
++/*
+ * Function:
+ *
+ * ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
+@@ -40,7 +35,6 @@
+ * It should also be fairly portable, as no assumptions are made about the
+ * bit-layout of doubles. Of course, that does make it less efficient than
+ * it could be.
+- *
+ */
+
+ /*****************************************************************************/
+@@ -67,9 +61,6 @@
+
+ #define NUM_HEX_DIGITS ((FPMAX_MANT_DIG + 3)/ 4)
+
+-/* WARNING: Adjust _fp_out_wide() below if this changes! */
+-/* With 32 bit ints, we can get 9 decimal digits per block. */
+-#define DIGITS_PER_BLOCK 9
+ #define HEX_DIGITS_PER_BLOCK 8
+
+ /* Maximum number of subcases to output double is...
+@@ -87,15 +78,9 @@
+
+ /*****************************************************************************/
+
+-#define NUM_DIGIT_BLOCKS ((DECIMAL_DIG+DIGITS_PER_BLOCK-1)/DIGITS_PER_BLOCK)
+ #define NUM_HEX_DIGIT_BLOCKS \
+ ((NUM_HEX_DIGITS+HEX_DIGITS_PER_BLOCK-1)/HEX_DIGITS_PER_BLOCK)
+
+-/* WARNING: Adjust _fp_out_wide() below if this changes! */
+-
+-/* extra space for '-', '.', 'e+###', and nul */
+-#define BUF_SIZE ( 3 + NUM_DIGIT_BLOCKS * DIGITS_PER_BLOCK )
+-
+ /*****************************************************************************/
+
+ static const char fmt[] = "inf\0INF\0nan\0NAN\0.\0,";
+@@ -200,8 +185,6 @@
+ #define FPO_STR_PREC 'p'
+
+ ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
+- __fp_outfunc_t fp_outfunc) attribute_hidden;
+-ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
+ __fp_outfunc_t fp_outfunc)
+ {
+ #ifdef __UCLIBC_HAS_HEXADECIMAL_FLOATS__
+@@ -219,8 +202,8 @@
+ #ifdef __UCLIBC_HAS_GLIBC_DIGIT_GROUPING__
+ int num_groups = 0;
+ int initial_group; /* This does not need to be initialized. */
+- int tslen; /* This does not need to be initialized. */
+- int nblk2; /* This does not need to be initialized. */
++ int tslen; /* This does not need to be initialized. */
++ int nblk2; /* This does not need to be initialized. */
+ const char *ts; /* This does not need to be initialized. */
+ #endif /* __UCLIBC_HAS_GLIBC_DIGIT_GROUPING__ */
+ int round, o_exp;
+diff -Nur uClibc-0.9.33.2/libc/stdio/_fpmaxtostr.h uClibc-git/libc/stdio/_fpmaxtostr.h
+--- uClibc-0.9.33.2/libc/stdio/_fpmaxtostr.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/stdio/_fpmaxtostr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,49 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Copyright (C) 2000,2001,2003,2004 Manuel Novoa III <mjn3@codepoet.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ *
++ * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details.
++ */
++
++#ifndef _FPMAXTOSTR_H
++#define _FPMAXTOSTR_H 1
++
++#include <features.h>
++#ifdef __UCLIBC_HAS_FLOATS__
++
++#define __need_size_t
++#include <stddef.h>
++#include <stdint.h>
++#include <stdio.h>
++#include <printf.h>
++#include <sys/types.h>
++#include <float.h>
++#include <bits/uClibc_fpmax.h>
++
++/* WARNING: Adjust _fp_out_wide() in _vfprintf.c if this changes! */
++/* With 32 bit ints, we can get 9 decimal digits per block. */
++#define DIGITS_PER_BLOCK 9
++
++#define NUM_DIGIT_BLOCKS ((DECIMAL_DIG+DIGITS_PER_BLOCK-1)/DIGITS_PER_BLOCK)
++
++/* WARNING: Adjust _fp_out_wide() in _vfprintf.c if this changes! */
++/* extra space for '-', '.', 'e+###', and nul */
++#define BUF_SIZE ( 3 + NUM_DIGIT_BLOCKS * DIGITS_PER_BLOCK )
++
++/* psm: why do these internals differ? */
++#ifdef __USE_OLD_VFPRINTF__
++typedef void (__fp_outfunc_t)(FILE *fp, intptr_t type, intptr_t len, intptr_t buf);
++
++extern size_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
++ __fp_outfunc_t fp_outfunc) attribute_hidden;
++#else
++typedef size_t (__fp_outfunc_t)(FILE *fp, intptr_t type, intptr_t len, intptr_t buf);
++
++extern ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
++ __fp_outfunc_t fp_outfunc) attribute_hidden;
++#endif
++
++#endif /* __UCLIBC_HAS_FLOATS__ */
++#endif /* _FPMAXTOSTR_H */
+diff -Nur uClibc-0.9.33.2/libc/stdio/fputc.c uClibc-git/libc/stdio/fputc.c
+--- uClibc-0.9.33.2/libc/stdio/fputc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/fputc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -72,16 +72,13 @@
+ libc_hidden_def(__fputc_unlocked)
+
+ strong_alias(__fputc_unlocked,fputc_unlocked)
+-libc_hidden_def(fputc_unlocked)
+
+ strong_alias(__fputc_unlocked,putc_unlocked)
+-libc_hidden_def(putc_unlocked)
+ #ifndef __UCLIBC_HAS_THREADS__
+ strong_alias(__fputc_unlocked,fputc)
+ libc_hidden_def(fputc)
+
+ strong_alias(__fputc_unlocked,putc)
+-libc_hidden_def(putc)
+ #endif
+
+ #elif defined __UCLIBC_HAS_THREADS__
+@@ -101,6 +98,5 @@
+ libc_hidden_def(fputc)
+
+ strong_alias(fputc,putc)
+-libc_hidden_def(putc)
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdio/fputwc.c uClibc-git/libc/stdio/fputwc.c
+--- uClibc-0.9.33.2/libc/stdio/fputwc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/fputwc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,6 +19,7 @@
+ strong_alias(fputwc_unlocked,putwc_unlocked)
+ #ifndef __UCLIBC_HAS_THREADS__
+ strong_alias(fputwc_unlocked,fputwc)
++libc_hidden_def(fputwc)
+ strong_alias(fputwc_unlocked,putwc)
+ #endif
+
+@@ -37,6 +38,7 @@
+
+ return retval;
+ }
++libc_hidden_def(fputwc)
+
+ strong_alias(fputwc,putwc)
+
+diff -Nur uClibc-0.9.33.2/libc/stdio/fseeko.c uClibc-git/libc/stdio/fseeko.c
+--- uClibc-0.9.33.2/libc/stdio/fseeko.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/fseeko.c 2014-02-03 12:32:56.000000000 +0100
+@@ -77,5 +77,5 @@
+ libc_hidden_def(fseeko64)
+ #else
+ libc_hidden_def(fseek)
+-strong_alias(fseek,fseeko)
++strong_alias_untyped(fseek,fseeko)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdio/ftello.c uClibc-git/libc/stdio/ftello.c
+--- uClibc-0.9.33.2/libc/stdio/ftello.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/ftello.c 2014-02-03 12:32:56.000000000 +0100
+@@ -53,5 +53,5 @@
+ libc_hidden_def(ftello64)
+ #else
+ libc_hidden_def(ftell)
+-strong_alias(ftell,ftello)
++strong_alias_untyped(ftell,ftello)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdio/_load_inttype.c uClibc-git/libc/stdio/_load_inttype.c
+--- uClibc-0.9.33.2/libc/stdio/_load_inttype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_load_inttype.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,7 +8,6 @@
+ #include "_stdio.h"
+ #include <printf.h>
+
+-uintmax_t _load_inttype(int desttype, register const void *src, int uflag) attribute_hidden;
+ uintmax_t _load_inttype(int desttype, register const void *src, int uflag)
+ {
+ if (uflag >= 0) { /* unsigned */
+diff -Nur uClibc-0.9.33.2/libc/stdio/Makefile.in uClibc-git/libc/stdio/Makefile.in
+--- uClibc-0.9.33.2/libc/stdio/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -11,7 +11,7 @@
+ subdirs += libc/stdio
+
+ # SUSv3 functions
+-CSRC := \
++CSRC-y := \
+ fclose.c fcloseall.c fdopen.c fgetpos.c fopen.c freopen.c \
+ fseeko.c fsetpos.c ftello.c getdelim.c getline.c gets.c getw.c \
+ perror.c puts.c putw.c remove.c rewind.c setbuf.c setbuffer.c \
+@@ -19,92 +19,80 @@
+ printf.c vprintf.c vsprintf.c fprintf.c snprintf.c dprintf.c \
+ asprintf.c sprintf.c vasprintf.c vdprintf.c vsnprintf.c \
+ tmpfile.c popen.c ctermid.c
++CSRC-$(UCLIBC_HAS_LFS) += fgetpos64.c fopen64.c freopen64.c \
++ fseeko64.c fsetpos64.c ftello64.c
++CSRC-$(UCLIBC_SUSV4_LEGACY) += tmpnam.c tmpnam_r.c tempnam.c
+
+-ifeq ($(UCLIBC_HAS_LFS),y)
+-CSRC += fgetpos64.c fopen64.c freopen64.c fseeko64.c fsetpos64.c ftello64.c
+-endif
+-ifeq ($(UCLIBC_SUSV4_LEGACY),y)
+-CSRC += tmpnam.c tmpnam_r.c tempnam.c
+-endif
+-
+-# getc -> alias for fgetc
+-# putc -> alias for fputc
+-# rename is a syscall
+-
+-# Implementation support functions
+-CSRC += \
++# internal support functions
++CSRC-y += \
+ _READ.c _WRITE.c _adjust_pos.c _fopen.c _fwrite.c \
+ _rfill.c _stdio.c _trans2r.c _trans2w.c _wcommit.c \
+ _cs_funcs.c _load_inttype.c _store_inttype.c _uintmaxtostr.c
+-ifeq ($(UCLIBC_HAS_FLOATS),y)
+-CSRC += _fpmaxtostr.c
+-endif
++CSRC-$(UCLIBC_HAS_FLOATS) += _fpmaxtostr.c
+
+ # stdio_ext.h functions
+-CSRC += \
++CSRC-y += \
+ __fbufsize.c __flbf.c __fpending.c __fpurge.c __freadable.c \
+ __freading.c __fsetlocking.c __fwritable.c __fwriting.c _flushlbf.c
+
+ # Other glibc extensions
+-ifeq ($(UCLIBC_HAS_GLIBC_CUSTOM_STREAMS),y)
+-CSRC += fopencookie.c fmemopen.c open_memstream.c
+-endif
++CSRC-$(UCLIBC_HAS_GLIBC_CUSTOM_STREAMS) += fopencookie.c fmemopen.c \
++ open_memstream.c
+
+ # pthread functions
+-CSRC += flockfile.c ftrylockfile.c funlockfile.c
++CSRC-y += flockfile.c ftrylockfile.c funlockfile.c
+
+ # Functions with unlocked versions
+-CUSRC := \
++CUSRC-y := \
+ clearerr.c feof.c ferror.c fflush.c fgetc.c fgets.c fileno.c \
+ fputc.c fputs.c fread.c fwrite.c getchar.c putchar.c
+ # getc_unlocked -> alias for fgetc_unlocked
+ # putc_unlocked -> alias for fputc_unlocked
+
+ # vfprintf and support functions
+-ifneq ($(USE_OLD_VFPRINTF),y)
++ifeq ($(USE_OLD_VFPRINTF),y)
++VF_CSRC := old_vfprintf.c
++else
++# multi source _vfprintf.c
+ VF_CSRC := \
+ vfprintf.c \
+ _vfprintf_internal.c \
+ _ppfs_init.c _ppfs_prepargs.c _ppfs_setargs.c _ppfs_parsespec.c \
+ register_printf_function.c parse_printf_format.c
+-CSRC += $(VF_CSRC)
+-else
+-CSRC += old_vfprintf.c
+ endif
++CSRC-y += $(VF_CSRC)
+
+ # vfscanf and support functions plus other *scanf funcs
+-CSRC += \
++CSRC-y += \
+ vfscanf.c __scan_cookie.c __psfs_parse_spec.c __psfs_do_numeric.c \
+ scanf.c sscanf.c fscanf.c vscanf.c vsscanf.c
+
+-ifeq ($(UCLIBC_HAS_WCHAR),y)
+-CSRC += _wfwrite.c fwprintf.c swprintf.c vswprintf.c vwprintf.c wprintf.c \
++CSRC-$(UCLIBC_HAS_WCHAR) += \
++ _wfwrite.c fwprintf.c swprintf.c vswprintf.c vwprintf.c wprintf.c \
+ fwide.c ungetwc.c
+-CUSRC += fgetwc.c getwchar.c fgetws.c fputwc.c putwchar.c fputws.c
++CUSRC-$(UCLIBC_HAS_WCHAR) += \
++ fgetwc.c getwchar.c fgetws.c fputwc.c putwchar.c fputws.c
+ # getwc (fgetwc alias) getwc_unlocked (fgetwc_unlocked alias)
+ # putwc (fputwc alias) putwc_unlocked (fputwc_unlocked alias)
+-CSRC += vfwprintf.c _vfwprintf_internal.c
+-CSRC += wscanf.c swscanf.c fwscanf.c vwscanf.c vswscanf.c vfwscanf.c
+-endif
+-
+-CUSRC_UNLOCKED := $(patsubst %.c,%_unlocked.c,$(CUSRC))
++CSRC-$(UCLIBC_HAS_WCHAR) += vfwprintf.c _vfwprintf_internal.c \
++ wscanf.c swscanf.c fwscanf.c vwscanf.c vswscanf.c vfwscanf.c
+
+-CSRC += $(CUSRC) $(CUSRC_UNLOCKED)
++CUSRC_UNLOCKED := $(patsubst %.c,%_unlocked.c,$(CUSRC-y))
++CSRC-y += $(CUSRC-y) $(CUSRC_UNLOCKED)
+
+ STDIO_DIR := $(top_srcdir)libc/stdio
+ STDIO_OUT := $(top_builddir)libc/stdio
+
+-STDIO_SRC := $(patsubst %.c,$(STDIO_DIR)/%.c,$(CSRC))
+-STDIO_OBJ := $(patsubst %.c,$(STDIO_OUT)/%.o,$(CSRC))
++STDIO_SRC := $(patsubst %.c,$(STDIO_DIR)/%.c,$(CSRC-y))
++STDIO_OBJ := $(patsubst %.c,$(STDIO_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(STDIO_OBJ)
+
+ ifneq ($(USE_OLD_VFPRINTF),y)
+ libc-nomulti-y += $(patsubst %.c,$(STDIO_OUT)/%.o,$(VF_CSRC))
+ endif
+-ifeq ($(UCLIBC_HAS_WCHAR),y)
+-libc-nomulti-y += $(STDIO_OUT)/vfwprintf.o $(STDIO_OUT)/vfwscanf.o
+-endif
++libc-nomulti-$(UCLIBC_HAS_WCHAR) += $(STDIO_OUT)/vfwprintf.o \
++ $(STDIO_OUT)/vfwscanf.o
+
+ objclean-y += CLEAN_libc/stdio
+
+diff -Nur uClibc-0.9.33.2/libc/stdio/old_vfprintf.c uClibc-git/libc/stdio/old_vfprintf.c
+--- uClibc-0.9.33.2/libc/stdio/old_vfprintf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/old_vfprintf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -127,9 +127,7 @@
+
+ /**************************************************************************/
+
+-#define _ISOC99_SOURCE /* for ULLONG primarily... */
+ #include "_stdio.h"
+-/* #include <stdio.h> */
+ #include <stdarg.h>
+ #include <limits.h>
+ #include <stdint.h>
+@@ -137,14 +135,9 @@
+ #include <errno.h>
+ #include <ctype.h>
+ #include <bits/uClibc_uintmaxtostr.h>
+-#include <printf.h>
+
+-#ifdef __UCLIBC_HAS_THREADS__
+-#include <pthread.h>
+-#endif /* __UCLIBC_HAS_THREADS__ */
++#include "_fpmaxtostr.h"
+
+-
+-/* #undef __UCLIBC_HAS_FLOATS__ */
+ /* #undef WANT_FLOAT_ERROR */
+ /* #define WANT_FLOAT_ERROR 1 */
+
+@@ -208,14 +201,6 @@
+ #endif /* __STDIO_BUFFERS */
+
+ #ifdef __UCLIBC_HAS_FLOATS__
+-#include <float.h>
+-#include <bits/uClibc_fpmax.h>
+-
+-typedef void (__fp_outfunc_t)(FILE *fp, intptr_t type, intptr_t len,
+- intptr_t buf);
+-
+-extern size_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
+- __fp_outfunc_t fp_outfunc) attribute_hidden;
+
+ static void _charpad(FILE * __restrict stream, int padchar, size_t numpad)
+ {
+@@ -259,9 +244,6 @@
+
+ /**********************************************************************/
+
+-extern void _store_inttype(void *dest, int desttype, uintmax_t val) attribute_hidden;
+-extern uintmax_t _load_inttype(int desttype, const void *src, int uflag) attribute_hidden;
+-
+ /*
+ * In order to ease translation to what arginfo and _print_info._flags expect,
+ * we map: 0:int 1:char 2:longlong 4:long 8:short
+diff -Nur uClibc-0.9.33.2/libc/stdio/open_memstream.c uClibc-git/libc/stdio/open_memstream.c
+--- uClibc-0.9.33.2/libc/stdio/open_memstream.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/open_memstream.c 2014-02-03 12:32:56.000000000 +0100
+@@ -128,7 +128,7 @@
+ * (ie replace the FILE buffer with the cookie buffer and update FILE bufstart,
+ * etc. whenever we seek). */
+
+-FILE *open_memstream(char **__restrict bufloc, size_t *__restrict sizeloc)
++FILE *open_memstream(char **bufloc, size_t *sizeloc)
+ {
+ register __oms_cookie *cookie;
+ register FILE *fp;
+diff -Nur uClibc-0.9.33.2/libc/stdio/popen.c uClibc-git/libc/stdio/popen.c
+--- uClibc-0.9.33.2/libc/stdio/popen.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/popen.c 2014-02-03 12:32:56.000000000 +0100
+@@ -26,15 +26,6 @@
+ #warning "hmm... susv3 says Pipe streams are byte-oriented."
+ #endif /* __UCLIBC_MJN3_ONLY__ */
+
+-
+-/* uClinux-2.0 has vfork, but Linux 2.0 doesn't */
+-#include <sys/syscall.h>
+-#if ! defined __NR_vfork
+-# define vfork fork
+-# define VFORK_LOCK ((void) 0)
+-# define VFORK_UNLOCK ((void) 0)
+-#endif
+-
+ #ifndef VFORK_LOCK
+ __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+ # define VFORK_LOCK __UCLIBC_MUTEX_LOCK(mylock)
+@@ -138,7 +129,7 @@
+ int pclose(FILE *stream)
+ {
+ struct popen_list_item *p;
+- int stat;
++ int status;
+ pid_t pid;
+
+ /* First, find the list entry corresponding to stream and remove it
+@@ -173,8 +164,8 @@
+ /* SUSv3 specificly requires that pclose not return before the child
+ * terminates, in order to disallow pclose from returning on EINTR. */
+ do {
+- if (waitpid(pid, &stat, 0) >= 0) {
+- return stat;
++ if (waitpid(pid, &status, 0) >= 0) {
++ return status;
+ }
+ if (errno != EINTR) {
+ break;
+diff -Nur uClibc-0.9.33.2/libc/stdio/putwchar.c uClibc-git/libc/stdio/putwchar.c
+--- uClibc-0.9.33.2/libc/stdio/putwchar.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/putwchar.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,7 +9,6 @@
+
+ #ifdef __DO_UNLOCKED
+
+-
+ wint_t putwchar_unlocked(wchar_t wc)
+ {
+ return fputwc_unlocked(wc, stdout);
+@@ -21,11 +20,9 @@
+
+ #elif defined __UCLIBC_HAS_THREADS__
+
+-/* psm: should this be fputwc? */
+-
+ wint_t putwchar(wchar_t wc)
+ {
+- return fputc(wc, stdout);
++ return fputwc(wc, stdout);
+ }
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdio/_scanf.c uClibc-git/libc/stdio/_scanf.c
+--- uClibc-0.9.33.2/libc/stdio/_scanf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_scanf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Aug 1, 2003
+@@ -43,7 +43,6 @@
+ * standards and from an official C standard defect report.
+ */
+
+-#define _ISOC99_SOURCE /* for LLONG_MAX primarily... */
+ #include <features.h>
+ #include "_stdio.h"
+ #include <stdlib.h>
+@@ -77,14 +76,6 @@
+ #include <bits/uClibc_fpmax.h>
+ #endif /* __UCLIBC_HAS_FLOATS__ */
+
+-#ifdef __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__
+-#ifdef L_vfscanf
+-/* only emit this once */
+-#warning Forcing undef of __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__ until implemented!
+-#endif
+-#undef __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__
+-#endif
+-
+ #undef __STDIO_HAS_VSSCANF
+ #if defined(__STDIO_BUFFERS) || !defined(__UCLIBC_HAS_WCHAR__) || defined(__UCLIBC_HAS_GLIBC_CUSTOM_STREAMS__)
+ #define __STDIO_HAS_VSSCANF 1
+@@ -99,8 +90,6 @@
+
+ #endif
+
+-extern void _store_inttype(void *dest, int desttype, uintmax_t val);
+-
+ #if defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX)
+
+ extern unsigned long long
+@@ -209,7 +198,7 @@
+
+ #ifdef __STDIO_BUFFERS
+
+-int vsscanf(__const char *sp, __const char *fmt, va_list ap)
++int vsscanf(const char *sp, const char *fmt, va_list ap)
+ {
+ FILE f;
+
+@@ -253,7 +242,7 @@
+
+ #elif !defined(__UCLIBC_HAS_WCHAR__)
+
+-int vsscanf(__const char *sp, __const char *fmt, va_list ap)
++int vsscanf(const char *sp, const char *fmt, va_list ap)
+ {
+ __FILE_vsscanf f;
+
+@@ -292,7 +281,7 @@
+
+ #elif defined(__UCLIBC_HAS_GLIBC_CUSTOM_STREAMS__)
+
+-int vsscanf(__const char *sp, __const char *fmt, va_list ap)
++int vsscanf(const char *sp, const char *fmt, va_list ap)
+ {
+ FILE *f;
+ int rv = EOF;
+@@ -388,9 +377,9 @@
+ FILE f;
+
+ f.__bufstart =
+- f.__bufpos = (char *) str;
++ f.__bufpos = (unsigned char *) str;
+ f.__bufread =
+- f.__bufend = (char *)(str + wcslen(str));
++ f.__bufend = (unsigned char *)(str + wcslen(str));
+ __STDIO_STREAM_DISABLE_GETC(&f);
+ __STDIO_STREAM_DISABLE_PUTC(&f);
+
+@@ -433,18 +422,19 @@
+
+
+ /* float layout 0123456789012345678901 repeat n for "l[" */
+-#define SPEC_CHARS "npxXoudifFeEgGaACSncs["
+-/* npxXoudif eEgG CS cs[ */
++#define SPEC_CHARS "npxXoudifFeEgGaACSnmcs["
++/* npxXoudif eEgG CS cs[ */
++/* NOTE: the 'm' flag must come before any convs that support it */
+
+-/* NOTE: Ordering is important! In particular, CONV_LEFTBRACKET
+- * must immediately precede CONV_c. */
++/* NOTE: Ordering is important! The CONV_{C,S,LEFTBRACKET} must map
++ simply to their lowercase equivalents. */
+
+ enum {
+ CONV_n = 0,
+ CONV_p,
+ CONV_x, CONV_X, CONV_o, CONV_u, CONV_d, CONV_i,
+ CONV_f, CONV_F, CONV_e, CONV_E, CONV_g, CONV_G, CONV_a, CONV_A,
+- CONV_C, CONV_S, CONV_LEFTBRACKET, CONV_c, CONV_s, CONV_leftbracket,
++ CONV_C, CONV_S, CONV_LEFTBRACKET, CONV_m, CONV_c, CONV_s, CONV_leftbracket,
+ CONV_percent, CONV_whitespace /* not in SPEC_* and no flags */
+ };
+
+@@ -474,7 +464,7 @@
+ FLAG_SURPRESS = 0x10, /* MUST BE 1ST!! See DO_FLAGS. */
+ FLAG_THOUSANDS = 0x20,
+ FLAG_I18N = 0x40, /* only works for d, i, u */
+- FLAG_MALLOC = 0x80, /* only works for s, S, and [ (and l[)*/
++ FLAG_MALLOC = 0x80, /* only works for c, s, S, and [ (and l[)*/
+ };
+
+
+@@ -491,7 +481,7 @@
+ /* fFeEgGaA */ (0x0c|FLAG_SURPRESS|FLAG_THOUSANDS|FLAG_I18N), \
+ /* C */ ( 0|FLAG_SURPRESS), \
+ /* S and l[ */ ( 0|FLAG_SURPRESS|FLAG_MALLOC), \
+- /* c */ (0x04|FLAG_SURPRESS), \
++ /* c */ (0x04|FLAG_SURPRESS|FLAG_MALLOC), \
+ /* s and [ */ (0x04|FLAG_SURPRESS|FLAG_MALLOC), \
+ }
+
+@@ -904,17 +894,17 @@
+ if (*psfs->fmt == *p) {
+ int p_m_spec_chars = p - spec_chars;
+
+-#ifdef __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__
+-#error implement gnu a flag
+- if ((*p == 'a')
+- && ((psfs->fmt[1] == '[') || ((psfs->fmt[1]|0x20) == 's'))
+- ) { /* Assumes ascii for 's' and 'S' test. */
+- psfs->flags |= FLAG_MALLOC;
++ if (*p == 'm' &&
++ (psfs->fmt[1] == '[' || psfs->fmt[1] == 'c' ||
++ /* Assumes ascii for 's' and 'S' test. */
++ (psfs->fmt[1] | 0x20) == 's'))
++ {
++ if (psfs->store)
++ psfs->flags |= FLAG_MALLOC;
+ ++psfs->fmt;
+ ++p;
+- continue; /* The related conversions follow 'a'. */
++ continue; /* The related conversions follow 'm'. */
+ }
+-#endif /* __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__ */
+
+ for (p = spec_ranges; p_m_spec_chars > *p ; ++p) {}
+ if (((psfs->dataargtype >> 8) | psfs->flags)
+@@ -928,7 +918,7 @@
+ psfs->dataargtype = PA_FLAG_LONG;
+ } else if ((p_m_spec_chars >= CONV_c)
+ && (psfs->dataargtype & PA_FLAG_LONG)) {
+- p_m_spec_chars -= 3; /* lc -> C, ls -> S, l[ -> ?? */
++ p_m_spec_chars -= CONV_c - CONV_C; /* lc -> C, ls -> S, l[ -> ?? */
+ }
+
+ psfs->conv_num = p_m_spec_chars;
+@@ -1265,12 +1255,6 @@
+ while (*wf && __isascii(*wf) && (b < buf + sizeof(buf) - 1)) {
+ *b++ = *wf++;
+ }
+-#ifdef __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__
+-#error this is wrong... we need to ched in __psfs_parse_spec instead since this checks last char in buffer and conversion my have stopped before it.
+- if ((*b == 'a') && ((*wf == '[') || ((*wf|0x20) == 's'))) {
+- goto DONE; /* Spec was excessively long. */
+- }
+-#endif /* __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__ */
+ *b = 0;
+ if (b == buf) { /* Bad conversion specifier! */
+ goto DONE;
+@@ -1390,13 +1374,36 @@
+ }
+
+ if (psfs.conv_num == CONV_s) {
++ /* We might have to handle the allocation ourselves */
++ int len;
++ /* With 'm', we actually got a pointer to a pointer */
++ unsigned char **ptr = (void *)b;
++
++ i = 0;
++ if (psfs.flags & FLAG_MALLOC) {
++ len = 0;
++ b = NULL;
++ } else
++ len = -1;
++
+ /* Yes, believe it or not, a %s conversion can store nuls. */
+ while ((__scan_getc(&sc) >= 0) && !isspace(sc.cc)) {
+ zero_conversions = 0;
+- *b = sc.cc;
+- b += psfs.store;
++ if (i == len) {
++ /* Pick a size that won't trigger a lot of
++ * mallocs early on ... */
++ len += 256;
++ b = realloc(b, len + 1);
++ }
++ b[i] = sc.cc;
++ i += psfs.store;
+ fail = 0;
+ }
++
++ if (psfs.flags & FLAG_MALLOC)
++ *ptr = b;
++ /* The code below takes care of terminating NUL */
++ b += i;
+ } else {
+ #ifdef __UCLIBC_HAS_WCHAR__
+ assert((psfs.conv_num == CONV_LEFTBRACKET) || \
+diff -Nur uClibc-0.9.33.2/libc/stdio/_stdio.c uClibc-git/libc/stdio/_stdio.c
+--- uClibc-0.9.33.2/libc/stdio/_stdio.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_stdio.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,7 +7,6 @@
+
+ #include "_stdio.h"
+
+-
+ /* This is pretty much straight from uClibc, but with one important
+ * difference.
+ *
+@@ -185,7 +184,7 @@
+ /**********************************************************************/
+
+ /* We assume here that we are the only remaining thread. */
+-void attribute_hidden _stdio_term(void)
++void _stdio_term(void)
+ {
+ #if defined(__STDIO_BUFFERS) || defined(__UCLIBC_HAS_GLIBC_CUSTOM_STREAMS__)
+ register FILE *ptr;
+@@ -252,7 +251,7 @@
+ }
+
+ #if defined __STDIO_BUFFERS || !defined __UCLIBC__
+-void attribute_hidden _stdio_init(void)
++void _stdio_init(void)
+ {
+ #ifdef __STDIO_BUFFERS
+ int old_errno = errno;
+@@ -277,10 +276,6 @@
+ #error Assumption violated about __MASK_READING and __FLAG_UNGOT
+ #endif
+
+-#ifdef __UCLIBC_HAS_THREADS__
+-#include <pthread.h>
+-#endif
+-
+ #ifndef NDEBUG
+
+ void attribute_hidden _stdio_validate_FILE(const FILE *stream)
+diff -Nur uClibc-0.9.33.2/libc/stdio/_stdio.h uClibc-git/libc/stdio/_stdio.h
+--- uClibc-0.9.33.2/libc/stdio/_stdio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_stdio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -39,6 +39,9 @@
+
+
+ #ifdef __UCLIBC_HAS_THREADS__
++extern void __stdio_init_mutex(__UCLIBC_MUTEX_TYPE *m) attribute_hidden;
++
++extern volatile int _stdio_openlist_use_count attribute_hidden; /* _stdio_openlist_del_lock */
+ #define __STDIO_OPENLIST_INC_USE \
+ do { \
+ __STDIO_THREADLOCK_OPENLIST_DEL; \
+@@ -51,6 +54,7 @@
+ #define __STDIO_OPENLIST_DEC_USE \
+ _stdio_openlist_dec_use()
+
++extern int _stdio_openlist_del_count attribute_hidden; /* _stdio_openlist_del_lock */
+ #define __STDIO_OPENLIST_INC_DEL_CNT \
+ do { \
+ __STDIO_THREADLOCK_OPENLIST_DEL; \
+@@ -308,6 +312,9 @@
+ extern int __stdio_trans2r_o(FILE *__restrict stream, int oflag) attribute_hidden;
+ extern int __stdio_trans2w_o(FILE *__restrict stream, int oflag) attribute_hidden;
+
++extern uintmax_t _load_inttype(int desttype, register const void *src, int uflag) attribute_hidden;
++extern void _store_inttype(void *dest, int desttype, uintmax_t val) attribute_hidden;
++
+ /**********************************************************************/
+ #ifdef __STDIO_BUFFERS
+
+diff -Nur uClibc-0.9.33.2/libc/stdio/_store_inttype.c uClibc-git/libc/stdio/_store_inttype.c
+--- uClibc-0.9.33.2/libc/stdio/_store_inttype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_store_inttype.c 2014-02-03 12:32:56.000000000 +0100
+@@ -28,7 +28,6 @@
+
+ /* We assume int may be short or long, but short and long are different. */
+
+-void _store_inttype(register void *dest, int desttype, uintmax_t val) attribute_hidden;
+ void _store_inttype(register void *dest, int desttype, uintmax_t val)
+ {
+ if (desttype == __PA_FLAG_CHAR) { /* assume char not int */
+diff -Nur uClibc-0.9.33.2/libc/stdio/tempnam.c uClibc-git/libc/stdio/tempnam.c
+--- uClibc-0.9.33.2/libc/stdio/tempnam.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/tempnam.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/stdio/tmpfile.c uClibc-git/libc/stdio/tmpfile.c
+--- uClibc-0.9.33.2/libc/stdio/tmpfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/tmpfile.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libc/stdio/tmpnam.c uClibc-git/libc/stdio/tmpnam.c
+--- uClibc-0.9.33.2/libc/stdio/tmpnam.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/tmpnam.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/stdio/tmpnam_r.c uClibc-git/libc/stdio/tmpnam_r.c
+--- uClibc-0.9.33.2/libc/stdio/tmpnam_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/tmpnam_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include "../misc/internals/tempname.h"
+diff -Nur uClibc-0.9.33.2/libc/stdio/_uintmaxtostr.c uClibc-git/libc/stdio/_uintmaxtostr.c
+--- uClibc-0.9.33.2/libc/stdio/_uintmaxtostr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_uintmaxtostr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,6 @@
+ * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details.
+ */
+
+-#define _ISOC99_SOURCE /* for ULLONG primarily... */
+ #include "_stdio.h"
+ #include <limits.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/libc/stdio/_vfprintf.c uClibc-git/libc/stdio/_vfprintf.c
+--- uClibc-0.9.33.2/libc/stdio/_vfprintf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdio/_vfprintf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* This code needs a lot of clean up. Some of that is on hold until uClibc
+@@ -88,7 +88,6 @@
+ * treats this as an error.
+ */
+
+-#define _ISOC99_SOURCE /* for ULLONG primarily... */
+ #include <features.h>
+ #include "_stdio.h"
+ #include <stdlib.h>
+@@ -101,7 +100,6 @@
+ #include <stdint.h>
+ #include <errno.h>
+ #include <locale.h>
+-#include <printf.h>
+
+ #ifdef __UCLIBC_HAS_THREADS__
+ # include <stdio_ext.h>
+@@ -126,30 +124,16 @@
+ /**********************************************************************/
+ /* These provide some control over printf's feature set */
+
+-/* This is undefined below depeding on uClibc's configuration. */
+-#define __STDIO_PRINTF_FLOAT 1
++/* Now controlled by uClibc_config.h. */
++/* #define __UCLIBC_HAS_FLOATS__ 1 */
+
+-/* Now controlled by uClibc_stdio.h. */
++/* Now controlled by uClibc_config.h. */
+ /* #define __UCLIBC_HAS_PRINTF_M_SPEC__ */
+
+
+ /**********************************************************************/
+
+-#if defined(__UCLIBC__) && !defined(__UCLIBC_HAS_FLOATS__)
+-# undef __STDIO_PRINTF_FLOAT
+-#endif
+-
+-#ifdef __BCC__
+-# undef __STDIO_PRINTF_FLOAT
+-#endif
+-
+-#ifdef __STDIO_PRINTF_FLOAT
+-# include <float.h>
+-# include <bits/uClibc_fpmax.h>
+-#else
+-# undef L__fpmaxtostr
+-#endif
+-
++#include "_fpmaxtostr.h"
+
+ #undef __STDIO_HAS_VSNPRINTF
+ #if defined(__STDIO_BUFFERS) || defined(__USE_OLD_VFPRINTF__) || defined(__UCLIBC_HAS_GLIBC_CUSTOM_STREAMS__)
+@@ -158,7 +142,7 @@
+
+ /**********************************************************************/
+
+-/* Now controlled by uClibc_stdio.h. */
++/* Now controlled by uClibc_config.h. */
+ /* #define __UCLIBC_HAS_GLIBC_CUSTOM_PRINTF__ */
+
+ #ifdef __UCLIBC_MJN3_ONLY__
+@@ -361,7 +345,7 @@
+ # ifdef ULLONG_MAX
+ unsigned long long ull;
+ # endif
+-# ifdef __STDIO_PRINTF_FLOAT
++# ifdef __UCLIBC_HAS_FLOATS__
+ double d;
+ long double ld;
+ # endif
+@@ -398,22 +382,11 @@
+ /* TODO: fix printf to return 0 and set errno if format error. Standard says
+ only returns -1 if sets error indicator for the stream. */
+
+-#ifdef __STDIO_PRINTF_FLOAT
+-typedef size_t (__fp_outfunc_t)(FILE *fp, intptr_t type, intptr_t len,
+- intptr_t buf);
+-
+-extern ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info,
+- __fp_outfunc_t fp_outfunc) attribute_hidden;
+-#endif
+-
+ extern int _ppfs_init(ppfs_t *ppfs, const char *fmt0) attribute_hidden; /* validates */
+ extern void _ppfs_prepargs(ppfs_t *ppfs, va_list arg) attribute_hidden; /* sets posargptrs */
+ extern void _ppfs_setargs(ppfs_t *ppfs) attribute_hidden; /* sets argptrs for current spec */
+ extern int _ppfs_parsespec(ppfs_t *ppfs) attribute_hidden; /* parses specifier */
+
+-extern void _store_inttype(void *dest, int desttype, uintmax_t val) attribute_hidden;
+-extern uintmax_t _load_inttype(int desttype, const void *src, int uflag) attribute_hidden;
+-
+ /**********************************************************************/
+ #ifdef L_parse_printf_format
+
+@@ -564,7 +537,7 @@
+ ppfs->fmtpos = fmt0; /* rewind */
+ }
+
+-#ifdef NL_MAX_ARG
++#ifdef NL_ARGMAX
+ /* If we have positional args, make sure we know all the types. */
+ {
+ register int *p = ppfs->argtype;
+@@ -576,7 +549,7 @@
+ ++p;
+ }
+ }
+-#endif /* NL_MAX_ARG */
++#endif /* NL_ARGMAX */
+
+ return 0;
+ }
+@@ -653,7 +626,7 @@
+ /* we're assuming wchar_t is at least an int */
+ GET_VA_ARG(p,wc,wchar_t,ppfs->arg);
+ break;
+-#ifdef __STDIO_PRINTF_FLOAT
++#ifdef __UCLIBC_HAS_FLOATS__
+ /* PA_FLOAT */
+ case PA_DOUBLE:
+ GET_VA_ARG(p,d,double,ppfs->arg);
+@@ -661,12 +634,12 @@
+ case (PA_DOUBLE|PA_FLAG_LONG_DOUBLE):
+ GET_VA_ARG(p,ld,long double,ppfs->arg);
+ break;
+-#else /* __STDIO_PRINTF_FLOAT */
++#else /* __UCLIBC_HAS_FLOATS__ */
+ case PA_DOUBLE:
+ case (PA_DOUBLE|PA_FLAG_LONG_DOUBLE):
+ assert(0);
+ continue;
+-#endif /* __STDIO_PRINTF_FLOAT */
++#endif /* __UCLIBC_HAS_FLOATS__ */
+ default:
+ /* TODO -- really need to ensure this can't happen */
+ assert(ppfs->argtype[i-1] & PA_FLAG_PTR);
+@@ -743,7 +716,7 @@
+ PA_INT|PA_FLAG_LONG,
+ PA_INT|PA_FLAG_LONG_LONG,
+ PA_WCHAR,
+-#ifdef __STDIO_PRINTF_FLOAT
++#ifdef __UCLIBC_HAS_FLOATS__
+ /* PA_FLOAT, */
+ PA_DOUBLE,
+ PA_DOUBLE|PA_FLAG_LONG_DOUBLE,
+@@ -766,7 +739,7 @@
+ PROMOTED_SIZE_OF(long), /* TODO -- is this correct? (above too) */
+ #endif
+ PROMOTED_SIZE_OF(wchar_t),
+-#ifdef __STDIO_PRINTF_FLOAT
++#ifdef __UCLIBC_HAS_FLOATS__
+ /* PROMOTED_SIZE_OF(float), */
+ PROMOTED_SIZE_OF(double),
+ PROMOTED_SIZE_OF(long double),
+@@ -1199,7 +1172,7 @@
+ #define _outnstr(stream, string, len) ((len > 0) ? __stdio_fwrite((const unsigned char *)(string), len, stream) : 0)
+ #define FP_OUT _fp_out_narrow
+
+-#ifdef __STDIO_PRINTF_FLOAT
++#ifdef __UCLIBC_HAS_FLOATS__
+
+ static size_t _fp_out_narrow(FILE *fp, intptr_t type, intptr_t len, intptr_t buf)
+ {
+@@ -1219,7 +1192,7 @@
+ return r + OUTNSTR(fp, (const char *) buf, len);
+ }
+
+-#endif /* __STDIO_PRINTF_FLOAT */
++#endif /* __UCLIBC_HAS_FLOATS__ */
+
+ #else /* L__vfprintf_internal */
+
+@@ -1229,7 +1202,7 @@
+ #define STRLEN wcslen
+ #define _PPFS_init _ppwfs_init
+ /* Pulls in fseek: */
+-#define OUTPUT(F,S) fputws(S,F)
++#define OUTPUT(F,S) fputws_unlocked(S,F)
+ /* TODO: #define OUTPUT(F,S) _wstdio_fwrite((S),wcslen(S),(F)) */
+ #define _outnwcs(stream, wstring, len) _wstdio_fwrite((const wchar_t *)(wstring), len, stream)
+ #define FP_OUT _fp_out_wide
+@@ -1261,16 +1234,7 @@
+ return wclen - todo;
+ }
+
+-#ifdef __STDIO_PRINTF_FLOAT
+-
+-#ifdef __UCLIBC_MJN3_ONLY__
+-#warning TODO: Move defines from _fpmaxtostr. Put them in a common header.
+-#endif
+-
+-/* The following defines are from _fpmaxtostr.*/
+-#define DIGITS_PER_BLOCK 9
+-#define NUM_DIGIT_BLOCKS ((DECIMAL_DIG+DIGITS_PER_BLOCK-1)/DIGITS_PER_BLOCK)
+-#define BUF_SIZE ( 3 + NUM_DIGIT_BLOCKS * DIGITS_PER_BLOCK )
++#ifdef __UCLIBC_HAS_FLOATS__
+
+ static size_t _fp_out_wide(FILE *fp, intptr_t type, intptr_t len, intptr_t buf)
+ {
+@@ -1318,7 +1282,7 @@
+ return r;
+ }
+
+-#endif /* __STDIO_PRINTF_FLOAT */
++#endif /* __UCLIBC_HAS_FLOATS__ */
+
+ static int _ppwfs_init(register ppfs_t *ppfs, const wchar_t *fmt0)
+ {
+@@ -1608,7 +1572,7 @@
+ }
+ numfill = ((numfill > SLEN) ? numfill - SLEN : 0);
+ } else if (ppfs->conv_num <= CONV_A) { /* floating point */
+-#ifdef __STDIO_PRINTF_FLOAT
++#ifdef __UCLIBC_HAS_FLOATS__
+ ssize_t nf;
+ nf = _fpmaxtostr(stream,
+ (__fpmax_t)
+@@ -1622,7 +1586,7 @@
+ *count += nf;
+
+ return 0;
+-#else /* __STDIO_PRINTF_FLOAT */
++#else /* __UCLIBC_HAS_FLOATS__ */
+ return -1; /* TODO -- try to continue? */
+ #endif
+ } else if (ppfs->conv_num <= CONV_S) { /* wide char or string */
+diff -Nur uClibc-0.9.33.2/libc/stdlib/a64l.c uClibc-git/libc/stdlib/a64l.c
+--- uClibc-0.9.33.2/libc/stdlib/a64l.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/a64l.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/abort.c uClibc-git/libc/stdlib/abort.c
+--- uClibc-0.9.33.2/libc/stdlib/abort.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/abort.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ /* Hacked up for uClibc by Erik Andersen */
+
+@@ -47,9 +46,6 @@
+ # warning "no abort instruction defined for your arch"
+ #endif
+
+-#ifdef __UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT__
+-extern void weak_function _stdio_term(void) attribute_hidden;
+-#endif
+ static smallint been_there_done_that = 0;
+
+ /* Be prepared in case multiple threads try to abort() */
+diff -Nur uClibc-0.9.33.2/libc/stdlib/arc4random.c uClibc-git/libc/stdlib/arc4random.c
+--- uClibc-0.9.33.2/libc/stdlib/arc4random.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/arc4random.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,24 +1,29 @@
+-/* $$$: arc4random.c 2005/02/08 robert */
+-/* $NetBSD: arc4random.c,v 1.5.2.1 2004/03/26 22:52:50 jmc Exp $ */
+-/* $OpenBSD: arc4random.c,v 1.6 2001/06/05 05:05:38 pvalchev Exp $ */
+-
+ /*
+- * Arc4 random number generator for OpenBSD.
+- * Copyright 1996 David Mazieres <dm@lcs.mit.edu>.
++ * Copyright (c) 1996, David Mazieres <dm@uun.org>
+ *
+- * Modification and redistribution in source and binary forms is
+- * permitted provided that due credit is given to the author and the
+- * OpenBSD project by leaving this copyright notice intact.
++ * Permission to use, copy, modify, and distribute this software for any
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+ /*
++ * Arc4 random number generator for OpenBSD.
++ *
+ * This code is derived from section 17.1 of Applied Cryptography,
+ * second edition, which describes a stream cipher allegedly
+ * compatible with RSA Labs "RC4" cipher (the actual description of
+ * which is a trade secret). The same algorithm is used as a stream
+ * cipher called "arcfour" in Tatu Ylonen's ssh package.
+ *
+- * Here the stream cipher has been modified always to include the time
++ * Here the stream cipher has been modified always to include entropy
+ * when initializing the state. That makes it impossible to
+ * regenerate the same random sequence twice, so this can't be used
+ * for encryption, but will generate good random numbers.
+@@ -26,32 +31,26 @@
+ * RC4 is a registered trademark of RSA Laboratories.
+ */
+
++/* $OpenBSD: arc4random.c,v 1.16 2007/02/12 19:58:47 otto Exp $ */
++
+ #include <features.h>
++
+ #include <fcntl.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+-#include <sys/param.h>
+ #include <sys/time.h>
+-#ifdef __ARC4RANDOM_USE_ERANDOM__
+-#include <sys/sysctl.h>
+-#endif
+-
+
+ struct arc4_stream {
+- uint8_t i;
+- uint8_t j;
+- uint8_t s[256];
++ u_int8_t i;
++ u_int8_t j;
++ u_int8_t s[256];
+ };
+
+-static int rs_initialized;
++static smallint rs_initialized;
+ static struct arc4_stream rs;
+-
+-static __inline__ void arc4_init(struct arc4_stream *);
+-static __inline__ void arc4_addrandom(struct arc4_stream *, u_char *, int);
+-static void arc4_stir(struct arc4_stream *);
+-static __inline__ uint8_t arc4_getbyte(struct arc4_stream *);
+-static __inline__ uint32_t arc4_getword(struct arc4_stream *);
++static pid_t arc4_stir_pid;
++static int arc4_count;
+
+ static __inline__ void
+ arc4_init(struct arc4_stream *as)
+@@ -64,11 +63,25 @@
+ as->j = 0;
+ }
+
++static __inline__ u_int8_t
++arc4_getbyte(struct arc4_stream *as)
++{
++ u_int8_t si, sj;
++
++ as->i = (as->i + 1);
++ si = as->s[as->i];
++ as->j = (as->j + si);
++ sj = as->s[as->j];
++ as->s[as->i] = sj;
++ as->s[as->j] = si;
++ return (as->s[(si + sj) & 0xff]);
++}
++
+ static __inline__ void
+ arc4_addrandom(struct arc4_stream *as, u_char *dat, int datlen)
+ {
+ int n;
+- uint8_t si;
++ u_int8_t si;
+
+ as->i--;
+ for (n = 0; n < 256; n++) {
+@@ -84,71 +97,88 @@
+ static void
+ arc4_stir(struct arc4_stream *as)
+ {
+- int fd;
+- struct {
+- struct timeval tv;
+- uint rnd[(128 - sizeof(struct timeval)) / sizeof(uint)];
+- } rdat;
+ int n;
++ u_char rnd[128];
++ struct timeval tv;
++
++#ifndef __ARC4RANDOM_USES_NODEV__
++ int fd;
+
+- gettimeofday(&rdat.tv, NULL);
+ fd = open("/dev/urandom", O_RDONLY);
+ if (fd != -1) {
+- read(fd, rdat.rnd, sizeof(rdat.rnd));
++ read(fd, rnd, sizeof(rnd));
+ close(fd);
+ }
+-#ifdef __ARC4RANDOM_USE_ERANDOM__
++ /* Did the pseudo-random device fail? Use gettimeofday(). */
++ else
++#endif
++ if (gettimeofday(&tv, NULL) != (-1)) {
++
++ /* Initialize the first element so it's hopefully not '0',
++ * to help out the next loop. Tossing in some prime numbers
++ * probably can't hurt. */
++ rnd[0] = (tv.tv_sec % 10000) * 3 + tv.tv_usec * 7 + \
++ (getpid() % 1000) * 13;
++
++ for (n = 1; n < 127 ; n++) {
++
++ /* Take advantage of the stack space. Only initialize
++ * elements equal to '0'. This will make the rnd[]
++ * array much less vulnerable to timing attacks. Here
++ * we'll stir getpid() into the value of the previous
++ * element. Approximately 1 in 128 elements will still
++ * become '0'. */
++
++ if (rnd[n] == 0) {
++ rnd[n] = ((rnd[n - 1] + n) ^ \
++ ((getpid() % 1000) * 17));
++ }
++ }
++ }
+ else {
+- int mib[3];
+- uint i;
+- size_t len;
+-
+- /* Device could not be opened, we might be chrooted, take
+- * randomness from sysctl. */
+-
+- mib[0] = CTL_KERN;
+- mib[1] = KERN_RANDOM;
+- mib[2] = RANDOM_ERANDOM;
+-
+- for (i = 0; i < sizeof(rdat.rnd) / sizeof(uint); i++) {
+- len = sizeof(uint);
+- if (sysctl(mib, 3, &rdat.rnd[i], &len, NULL, 0) == -1)
+- break;
++ /* gettimeofday() failed? Do the same thing as above, but only
++ * with getpid(). */
++
++ rnd[0] = (getpid() % 1000) * 19;
++ for (n = 1; n < 127 ; n++) {
++ if (rnd[n] == 0) {
++ rnd[n] = ((rnd[n - 1] + n) ^ \
++ ((getpid() % 1000) * 23));
++ }
+ }
+ }
+-#endif
+
+- arc4_addrandom(as, (void *) &rdat, sizeof(rdat));
++ arc4_stir_pid = getpid();
++ arc4_addrandom(as, rnd, sizeof(rnd));
+
+ /*
+- * Throw away the first N words of output, as suggested in the
+- * paper "Weaknesses in the Key Scheduling Algorithm of RC4"
+- * by Fluher, Mantin, and Shamir.
++ * Discard early keystream, as per recommendations in:
+ * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps
+- * N = 256 in our case.
+ */
+- for (n = 0; n < 256 * 4; n++)
+- arc4_getbyte(as);
++ for (n = 0; n < 256; n++)
++ (void)arc4_getbyte(as);
++ arc4_count = 1600000;
+ }
+
+-static __inline__ uint8_t
+-arc4_getbyte(struct arc4_stream *as)
++#if 0
++static void __arc4random_stir(void);
++/*
++ * __arc4_getbyte() is a libc private function intended for use
++ * with malloc.
++ */
++u_int8_t
++__arc4_getbyte(void)
+ {
+- uint8_t si, sj;
+-
+- as->i = (as->i + 1);
+- si = as->s[as->i];
+- as->j = (as->j + si);
+- sj = as->s[as->j];
+- as->s[as->i] = sj;
+- as->s[as->j] = si;
+- return (as->s[(si + sj) & 0xff]);
++ if (--arc4_count == 0 || !rs_initialized)
++ __arc4random_stir();
++ return arc4_getbyte(&rs);
+ }
++#endif
+
+-static __inline__ uint32_t
++static __inline__ u_int32_t
+ arc4_getword(struct arc4_stream *as)
+ {
+- uint32_t val;
++ u_int32_t val;
+ val = arc4_getbyte(as) << 24;
+ val |= arc4_getbyte(as) << 16;
+ val |= arc4_getbyte(as) << 8;
+@@ -175,23 +205,11 @@
+ arc4_addrandom(&rs, dat, datlen);
+ }
+
+-uint32_t
++u_int32_t
+ arc4random(void)
+ {
+- if (!rs_initialized)
++ arc4_count -= 4;
++ if (arc4_count <= 0 || !rs_initialized || arc4_stir_pid != getpid())
+ __arc4random_stir();
+ return arc4_getword(&rs);
+ }
+-
+-#if 0
+-/*-------- Test code --------*/
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-int main(void) {
+- int random_number;
+- random_number = arc4random() % 65536;
+- printf("%d\n", random_number);
+- return 0;
+-}
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/_atexit.c uClibc-git/libc/stdlib/_atexit.c
+--- uClibc-0.9.33.2/libc/stdlib/_atexit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/_atexit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -40,11 +40,12 @@
+ #include <features.h>
+ #include <unistd.h>
+ #include <stdlib.h>
++#include <stdio.h>
+ #include <errno.h>
+ #include <atomic.h>
+
+ #include <bits/uClibc_mutex.h>
+-__UCLIBC_MUTEX_EXTERN(__atexit_lock);
++__UCLIBC_MUTEX_EXTERN(__atexit_lock) attribute_hidden;
+
+
+
+@@ -240,6 +241,16 @@
+
+ __UCLIBC_MUTEX_LOCK(__atexit_lock);
+
++ /*
++ * Reuse free slots at the end of the list.
++ * This avoids eating memory when dlopen and dlclose modules multiple times.
++ */
++ while (__exit_count > 0) {
++ if (__exit_function_table[__exit_count-1].type == ef_free) {
++ --__exit_count;
++ } else break;
++ }
++
+ #ifdef __UCLIBC_DYNAMIC_ATEXIT__
+ /* If we are out of function table slots, make some more */
+ if (__exit_slots < __exit_count+1) {
+@@ -318,8 +329,7 @@
+ attribute_hidden void (*__exit_cleanup)(int) = 0;
+ __UCLIBC_MUTEX_INIT(__atexit_lock, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);
+
+-extern void __uClibc_fini(void);
+-libc_hidden_proto(__uClibc_fini)
++extern void __uClibc_fini(void) attribute_hidden;
+
+ /*
+ * Normal program termination
+diff -Nur uClibc-0.9.33.2/libc/stdlib/bsd_getpt.c uClibc-git/libc/stdlib/bsd_getpt.c
+--- uClibc-0.9.33.2/libc/stdlib/bsd_getpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/bsd_getpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+@@ -40,7 +39,7 @@
+ const char __libc_ptyname2[] attribute_hidden = PTYNAME2;
+
+ /* Open a master pseudo terminal and return its file descriptor. */
+-int
++static __inline__ int
+ __getpt (void)
+ {
+ char buf[sizeof (_PATH_PTY) + 2];
+diff -Nur uClibc-0.9.33.2/libc/stdlib/drand48.c uClibc-git/libc/stdlib/drand48.c
+--- uClibc-0.9.33.2/libc/stdlib/drand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/drand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/drand48-iter.c uClibc-git/libc/stdlib/drand48-iter.c
+--- uClibc-0.9.33.2/libc/stdlib/drand48-iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/drand48-iter.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/drand48_r.c uClibc-git/libc/stdlib/drand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/drand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/drand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <math.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/erand48.c uClibc-git/libc/stdlib/erand48.c
+--- uClibc-0.9.33.2/libc/stdlib/erand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/erand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/erand48_r.c uClibc-git/libc/stdlib/erand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/erand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/erand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <ieee754.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/getpt.c uClibc-git/libc/stdlib/getpt.c
+--- uClibc-0.9.33.2/libc/stdlib/getpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/getpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+@@ -43,12 +42,12 @@
+
+ #if !defined __UNIX98PTY_ONLY__ && defined __UCLIBC_HAS_GETPT__
+ /* Prototype for function that opens BSD-style master pseudo-terminals. */
+-extern int __bsd_getpt (void) attribute_hidden;
++static __inline__ int __bsd_getpt (void);
+ #endif
+
+ /* Open a master pseudo terminal and return its file descriptor. */
+-int
+-posix_openpt (int flags)
++static int
++__posix_openpt (int flags)
+ {
+ #define have_no_dev_ptmx (1<<0)
+ #define devpts_mounted (1<<1)
+@@ -112,14 +111,14 @@
+ #endif
+ return -1;
+ }
+-libc_hidden_def(posix_openpt)
++strong_alias(__posix_openpt,posix_openpt)
+ #undef have_no_dev_ptmx
+ #undef devpts_mounted
+
+ #if defined __USE_GNU && defined __UCLIBC_HAS_GETPT__
+ int getpt (void)
+ {
+- return posix_openpt(O_RDWR);
++ return __posix_openpt(O_RDWR);
+ }
+
+ #if !defined __UNIX98PTY_ONLY__ && defined __UCLIBC_HAS_GETPT__
+diff -Nur uClibc-0.9.33.2/libc/stdlib/grantpt.c uClibc-git/libc/stdlib/grantpt.c
+--- uClibc-0.9.33.2/libc/stdlib/grantpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/grantpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <stdlib.h>
+@@ -33,25 +32,18 @@
+ /* Prototype for function that changes ownership and access permission
+ for slave pseudo terminals that do not live on a `devpts'
+ filesystem. */
+-int __unix_grantpt (int fd);
++static int __unix_grantpt (int fd);
+
+ /* Prototype for private function that gets the name of the slave
+ pseudo terminal in a safe way. */
+ static int pts_name (int fd, char **pts, size_t buf_len);
+ extern __typeof(statfs) __libc_statfs;
+-#endif
+
+ /* Change the ownership and access permission of the slave pseudo
+ terminal associated with the master pseudo terminal specified
+ by FD. */
+-int
+-#if !defined __ASSUME_DEVPTS__
+-grantpt (int fd)
+-#else
+-grantpt (attribute_unused int fd)
+-#endif
++int grantpt (int fd)
+ {
+-#if !defined __ASSUME_DEVPTS__
+ struct statfs fsbuf;
+ char _buf[PATH_MAX];
+ char *buf = _buf;
+@@ -65,12 +57,19 @@
+ /* If the slave pseudo terminal lives on a `devpts' filesystem, the
+ ownership and access permission are already set. */
+ if (fsbuf.f_type != DEVPTS_SUPER_MAGIC && fsbuf.f_type != DEVFS_SUPER_MAGIC)
+- return __unix_grantpt (fd);
+-#endif
++ return __unix_grantpt (fd);
++
+ return 0;
+ }
+
+-#if !defined __ASSUME_DEVPTS__
+ # define grantpt __unix_grantpt
+ # include "unix_grantpt.c"
++
++#else
++
++int grantpt (attribute_unused int fd)
++{
++ return 0;
++}
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/jrand48.c uClibc-git/libc/stdlib/jrand48.c
+--- uClibc-0.9.33.2/libc/stdlib/jrand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/jrand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/jrand48_r.c uClibc-git/libc/stdlib/jrand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/jrand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/jrand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/l64a.c uClibc-git/libc/stdlib/l64a.c
+--- uClibc-0.9.33.2/libc/stdlib/l64a.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/l64a.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/lcong48.c uClibc-git/libc/stdlib/lcong48.c
+--- uClibc-0.9.33.2/libc/stdlib/lcong48.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/stdlib/lcong48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,29 @@
++/* vi: set sw=4 ts=4: */
++/* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */
++
++#include <features.h>
++
++#if defined __USE_SVID || defined __USE_XOPEN
++#include <stdint.h>
++#include <stdlib.h>
++#include <string.h>
++
++static int __lcong48_r (unsigned short int param[7], struct drand48_data *buffer)
++{
++ /* Store the given values. */
++ memcpy (buffer->__x, &param[0], sizeof (buffer->__x));
++ buffer->__a = ((uint64_t) param[5] << 32 | (uint32_t) param[4] << 16 | param[3]);
++ buffer->__c = param[6];
++ buffer->__init = 1;
++
++ return 0;
++}
++# ifdef __USE_MISC
++strong_alias(__lcong48_r,lcong48_r)
++# endif
++
++void lcong48 (unsigned short int param[7])
++{
++ (void) __lcong48_r (param, &__libc_drand48_data);
++}
++#endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/ldiv.c uClibc-git/libc/stdlib/ldiv.c
+--- uClibc-0.9.33.2/libc/stdlib/ldiv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/ldiv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/lldiv.c uClibc-git/libc/stdlib/lldiv.c
+--- uClibc-0.9.33.2/libc/stdlib/lldiv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/lldiv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/lrand48.c uClibc-git/libc/stdlib/lrand48.c
+--- uClibc-0.9.33.2/libc/stdlib/lrand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/lrand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/lrand48_r.c uClibc-git/libc/stdlib/lrand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/lrand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/lrand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/Makefile.in uClibc-git/libc/stdlib/Makefile.in
+--- uClibc-0.9.33.2/libc/stdlib/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -12,16 +12,17 @@
+ include $(top_srcdir)libc/stdlib/malloc-standard/Makefile.in
+
+ CSRC-y := \
+- abort.c getenv.c mkdtemp.c realpath.c canonicalize.c mkstemp.c \
++ abort.c getenv.c mkdtemp.c realpath.c canonicalize.c mkstemp.c mkostemp.c \
+ rand.c random.c random_r.c setenv.c div.c ldiv.c lldiv.c \
+ getpt.c drand48-iter.c jrand48.c \
+- jrand48_r.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c nrand48.c \
++ jrand48_r.c lcong48.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c nrand48.c \
+ nrand48_r.c rand_r.c srand48.c srand48_r.c seed48.c seed48_r.c \
+- valloc.c a64l.c l64a.c __uc_malloc.c
++ a64l.c l64a.c __uc_malloc.c
++CSRC-$(UCLIBC_SUSV2_LEGACY) += valloc.c
+ CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_memalign.c
+ CSRC-$(UCLIBC_HAS_PTY) += grantpt.c unlockpt.c ptsname.c
+ CSRC-$(UCLIBC_HAS_ARC4RANDOM) += arc4random.c
+-CSRC-$(UCLIBC_HAS_LFS) += mkstemp64.c
++CSRC-$(UCLIBC_HAS_LFS) += mkstemp64.c mkostemp64.c
+ CSRC-$(UCLIBC_HAS_FLOATS) += drand48.c drand48_r.c erand48.c erand48_r.c
+ CSRC-$(if $(findstring yy,$(UCLIBC_HAS_FLOATS)$(UCLIBC_SUSV3_LEGACY)),y) += \
+ gcvt.c
+@@ -33,7 +34,7 @@
+
+ # multi source stdlib.c
+ CSRC-y += abs.c labs.c atoi.c atol.c strtol.c strtoul.c _stdlib_strto_l.c \
+- qsort.c qsort_r.c bsearch.c \
++ qsort.c qsort_r.c bsearch.c rpmatch.c \
+ llabs.c atoll.c strtoll.c strtoull.c _stdlib_strto_ll.c
+ # (aliases) strtoq.o strtouq.o
+ CSRC-$(UCLIBC_HAS_FLOATS) += atof.c
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/calloc.c uClibc-git/libc/stdlib/malloc/calloc.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc/calloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/calloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/free.c uClibc-git/libc/stdlib/malloc/free.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc/free.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/free.c 2014-02-03 12:32:56.000000000 +0100
+@@ -28,7 +28,7 @@
+ static void
+ __free_to_heap (void *mem, struct heap_free_area **heap
+ #ifdef HEAP_USE_LOCKING
+- , malloc_mutex_t *heap_lock
++ , __UCLIBC_MUTEX_TYPE *heap_lock
+ #endif
+ )
+ {
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/heap.h uClibc-git/libc/stdlib/malloc/heap.h
+--- uClibc-0.9.33.2/libc/stdlib/malloc/heap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/heap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,18 +13,13 @@
+
+ #include <features.h>
+
+-
+-/* On multi-threaded systems, the heap includes a lock. */
++#include <bits/uClibc_mutex.h>
+ #ifdef __UCLIBC_HAS_THREADS__
+-# include <bits/uClibc_mutex.h>
+ # define HEAP_USE_LOCKING
+-# define __heap_lock(heap_lock) __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(*(heap_lock))
+-# define __heap_unlock(heap_lock) __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(*(heap_lock))
+-#else
+-# define __heap_lock(heap_lock)
+-# define __heap_unlock(heap_lock)
+ #endif
+
++#define __heap_lock(heap_lock) __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(*(heap_lock))
++#define __heap_unlock(heap_lock) __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(*(heap_lock))
+
+ /* The heap allocates in multiples of, and aligned to, HEAP_GRANULARITY.
+ HEAP_GRANULARITY must be a power of 2. Malloc depends on this being the
+@@ -35,11 +30,9 @@
+
+
+
+-/* The HEAP_INIT macro can be used as a static initializer for a heap
+- variable. The HEAP_INIT_WITH_FA variant is used to initialize a heap
++/* The HEAP_INIT_WITH_FA variant is used to initialize a heap
+ with an initial static free-area; its argument FA should be declared
+ using HEAP_DECLARE_STATIC_FREE_AREA. */
+-# define HEAP_INIT 0
+ # define HEAP_INIT_WITH_FA(fa) &fa._fa
+
+ /* A free-list area `header'. These are actually stored at the _ends_ of
+@@ -92,34 +85,21 @@
+ #define HEAP_MIN_FREE_AREA_SIZE \
+ HEAP_ADJUST_SIZE (sizeof (struct heap_free_area) + 32)
+
+-
+-/* branch-prediction macros; they may already be defined by libc. */
+-#ifndef likely
+-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+-#define likely(cond) __builtin_expect(!!(int)(cond), 1)
+-#define unlikely(cond) __builtin_expect((int)(cond), 0)
+-#else
+-#define likely(cond) (cond)
+-#define unlikely(cond) (cond)
+-#endif
+-#endif /* !likely */
+-
+-
+ /* Define HEAP_DEBUGGING to cause the heap routines to emit debugging info
+ to stderr when the variable __heap_debug is set to true. */
+ #ifdef HEAP_DEBUGGING
+-extern int __heap_debug;
++extern int __heap_debug attribute_hidden;
+ #define HEAP_DEBUG(heap, str) (__heap_debug ? __heap_dump (heap, str) : 0)
+ #else
+ #define HEAP_DEBUG(heap, str) (void)0
+ #endif
+
+ /* Output a text representation of HEAP to stderr, labelling it with STR. */
+-extern void __heap_dump (struct heap_free_area *heap, const char *str);
++extern void __heap_dump (struct heap_free_area *heap, const char *str) attribute_hidden;
+
+ /* Do some consistency checks on HEAP. If they fail, output an error
+ message to stderr, and exit. STR is printed with the failure message. */
+-extern void __heap_check (struct heap_free_area *heap, const char *str);
++extern void __heap_check (struct heap_free_area *heap, const char *str) attribute_hidden;
+
+
+ /* Delete the free-area FA from HEAP. */
+@@ -216,16 +196,16 @@
+ /* Allocate and return a block at least *SIZE bytes long from HEAP.
+ *SIZE is adjusted to reflect the actual amount allocated (which may be
+ greater than requested). */
+-extern void *__heap_alloc (struct heap_free_area **heap, size_t *size);
++extern void *__heap_alloc (struct heap_free_area **heap, size_t *size) attribute_hidden;
+
+ /* Allocate SIZE bytes at address MEM in HEAP. Return the actual size
+ allocated, or 0 if we failed. */
+-extern size_t __heap_alloc_at (struct heap_free_area **heap, void *mem, size_t size);
++extern size_t __heap_alloc_at (struct heap_free_area **heap, void *mem, size_t size) attribute_hidden;
+
+ /* Return the memory area MEM of size SIZE to HEAP.
+ Returns the heap free area into which the memory was placed. */
+ extern struct heap_free_area *__heap_free (struct heap_free_area **heap,
+- void *mem, size_t size);
++ void *mem, size_t size) attribute_hidden;
+
+ /* Return true if HEAP contains absolutely no memory. */
+ #define __heap_is_empty(heap) (! (heap))
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/Makefile.in uClibc-git/libc/stdlib/malloc/Makefile.in
+--- uClibc-0.9.33.2/libc/stdlib/malloc/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -9,12 +9,12 @@
+
+ subdirs += libc/stdlib/malloc
+
+-CSRC := malloc.c calloc.c free.c realloc.c memalign.c \
++CSRC-y := malloc.c calloc.c free.c realloc.c memalign.c \
+ heap_alloc.c heap_alloc_at.c heap_free.c
+
+ # Turn on malloc debugging if requested
++CSRC-$(UCLIBC_MALLOC_DEBUGGING) += malloc_debug.c heap_debug.c
+ ifeq ($(UCLIBC_MALLOC_DEBUGGING),y)
+-CSRC += malloc_debug.c heap_debug.c
+ CFLAGS += -DMALLOC_DEBUGGING -DHEAP_DEBUGGING
+ ifeq ($(UCLIBC_UCLINUX_BROKEN_MUNMAP),y)
+ CFLAGS += -DMALLOC_MMB_DEBUGGING
+@@ -24,8 +24,8 @@
+ STDLIB_MALLOC_DIR := $(top_srcdir)libc/stdlib/malloc
+ STDLIB_MALLOC_OUT := $(top_builddir)libc/stdlib/malloc
+
+-STDLIB_MALLOC_SRC := $(patsubst %.c,$(STDLIB_MALLOC_DIR)/%.c,$(CSRC))
+-STDLIB_MALLOC_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_OUT)/%.o,$(CSRC))
++STDLIB_MALLOC_SRC := $(patsubst %.c,$(STDLIB_MALLOC_DIR)/%.c,$(CSRC-y))
++STDLIB_MALLOC_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_OUT)/%.o,$(CSRC-y))
+
+ libc-$(MALLOC) += $(STDLIB_MALLOC_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/malloc.c uClibc-git/libc/stdlib/malloc/malloc.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc/malloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/malloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -26,12 +26,12 @@
+ HEAP_DECLARE_STATIC_FREE_AREA (initial_fa, 256);
+ struct heap_free_area *__malloc_heap = HEAP_INIT_WITH_FA (initial_fa);
+ #ifdef HEAP_USE_LOCKING
+-malloc_mutex_t __malloc_heap_lock = PTHREAD_MUTEX_INITIALIZER;
++__UCLIBC_MUTEX_INIT(__malloc_heap_lock,PTHREAD_MUTEX_INITIALIZER);
+ #endif
+
+ #if defined(MALLOC_USE_LOCKING) && defined(MALLOC_USE_SBRK)
+ /* A lock protecting our use of sbrk. */
+-malloc_mutex_t __malloc_sbrk_lock;
++__UCLIBC_MUTEX(__malloc_sbrk_lock);
+ #endif /* MALLOC_USE_LOCKING && MALLOC_USE_SBRK */
+
+
+@@ -46,7 +46,7 @@
+ HEAP_DECLARE_STATIC_FREE_AREA (initial_mmb_fa, 48); /* enough for 3 mmbs */
+ struct heap_free_area *__malloc_mmb_heap = HEAP_INIT_WITH_FA (initial_mmb_fa);
+ #ifdef HEAP_USE_LOCKING
+-malloc_mutex_t __malloc_mmb_heap_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
++__UCLIBC_MUTEX_INIT(__malloc_mmb_heap_lock,PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);
+ #endif
+ #endif /* __UCLIBC_UCLINUX_BROKEN_MUNMAP__ */
+
+@@ -59,7 +59,7 @@
+ static void *
+ __malloc_from_heap (size_t size, struct heap_free_area **heap
+ #ifdef HEAP_USE_LOCKING
+- , malloc_mutex_t *heap_lock
++ , __UCLIBC_MUTEX_TYPE *heap_lock
+ #endif
+ )
+ {
+@@ -124,7 +124,7 @@
+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+ #else
+ block = mmap ((void *)0, block_size, PROT_READ | PROT_WRITE,
+- MAP_SHARED | MAP_ANONYMOUS | MAP_UNINITIALIZE, 0, 0);
++ MAP_SHARED | MAP_ANONYMOUS | MAP_UNINITIALIZED, 0, 0);
+ #endif
+
+ #endif /* MALLOC_USE_SBRK */
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/malloc.h uClibc-git/libc/stdlib/malloc/malloc.h
+--- uClibc-0.9.33.2/libc/stdlib/malloc/malloc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/malloc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -20,8 +20,7 @@
+ (__alignof__ (double) > sizeof (size_t) ? __alignof__ (double) : sizeof (size_t))
+
+ /* The system pagesize... */
+-extern size_t __pagesize;
+-#define MALLOC_PAGE_SIZE __pagesize
++#define MALLOC_PAGE_SIZE sysconf(_SC_PAGESIZE)
+
+ /* The minimum size of block we request from the the system to extend the
+ heap for small allocations (we may request a bigger block if necessary to
+@@ -128,69 +127,46 @@
+ /* Return the size of a malloc allocation, given the user address. */
+ #define MALLOC_SIZE(addr) (*(size_t *)MALLOC_BASE(addr))
+
++#include <bits/uClibc_mutex.h>
+
+-/* Locking for multithreaded apps. */
+ #ifdef __UCLIBC_HAS_THREADS__
+-
+-# include <bits/uClibc_mutex.h>
+-
+ # define MALLOC_USE_LOCKING
++#endif
+
+-typedef __UCLIBC_MUTEX_TYPE malloc_mutex_t;
+-# define MALLOC_MUTEX_INIT __UCLIBC_MUTEX_INITIALIZER
+-
+-# ifdef MALLOC_USE_SBRK
++#ifdef MALLOC_USE_SBRK
+ /* This lock is used to serialize uses of the `sbrk' function (in both
+ malloc and free, sbrk may be used several times in succession, and
+ things will break if these multiple calls are interleaved with another
+ thread's use of sbrk!). */
+-extern malloc_mutex_t __malloc_sbrk_lock;
++__UCLIBC_MUTEX_EXTERN(__malloc_sbrk_lock) attribute_hidden;
+ # define __malloc_lock_sbrk() __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE (__malloc_sbrk_lock)
+ # define __malloc_unlock_sbrk() __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE (__malloc_sbrk_lock)
+-# endif /* MALLOC_USE_SBRK */
+-
+-#else /* !__UCLIBC_HAS_THREADS__ */
+-
+-/* Without threads, mutex operations are a nop. */
++#else
+ # define __malloc_lock_sbrk() (void)0
+ # define __malloc_unlock_sbrk() (void)0
+-
+-#endif /* __UCLIBC_HAS_THREADS__ */
+-
+-
+-/* branch-prediction macros; they may already be defined by libc. */
+-#ifndef likely
+-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+-#define likely(cond) __builtin_expect(!!(int)(cond), 1)
+-#define unlikely(cond) __builtin_expect((int)(cond), 0)
+-#else
+-#define likely(cond) (cond)
+-#define unlikely(cond) (cond)
+-#endif
+-#endif /* !likely */
+-
++#endif /* MALLOC_USE_SBRK */
+
+ /* Define MALLOC_DEBUGGING to cause malloc to emit debugging info to stderr
+ when the variable __malloc_debug is set to true. */
+ #ifdef MALLOC_DEBUGGING
+
+-extern void __malloc_debug_init (void);
++extern void __malloc_debug_init (void) attribute_hidden;
+
+ /* The number of spaces in a malloc debug indent level. */
+ #define MALLOC_DEBUG_INDENT_SIZE 3
+
+-extern int __malloc_debug, __malloc_check;
++extern int __malloc_debug attribute_hidden, __malloc_check attribute_hidden;
+
+ # define MALLOC_DEBUG(indent, fmt, args...) \
+ (__malloc_debug ? __malloc_debug_printf (indent, fmt , ##args) : 0)
+ # define MALLOC_DEBUG_INDENT(indent) \
+ (__malloc_debug ? __malloc_debug_indent (indent) : 0)
+
+-extern int __malloc_debug_cur_indent;
++extern int __malloc_debug_cur_indent attribute_hidden;
+
+ /* Print FMT and args indented at the current debug print level, followed
+ by a newline, and change the level by INDENT. */
+-extern void __malloc_debug_printf (int indent, const char *fmt, ...);
++extern void __malloc_debug_printf (int indent, const char *fmt, ...) attribute_hidden;
+
+ /* Change the current debug print level by INDENT, and return the value. */
+ #define __malloc_debug_indent(indent) (__malloc_debug_cur_indent += indent)
+@@ -220,10 +196,18 @@
+
+
+ /* The malloc heap. */
+-extern struct heap_free_area *__malloc_heap;
++extern struct heap_free_area *__malloc_heap attribute_hidden;
+ #ifdef __UCLIBC_HAS_THREADS__
+-extern malloc_mutex_t __malloc_heap_lock;
+-#ifdef __UCLIBC_UCLINUX_BROKEN_MUNMAP__
+-extern malloc_mutex_t __malloc_mmb_heap_lock;
+-#endif
++__UCLIBC_MUTEX_EXTERN(__malloc_heap_lock)
++# ifndef __LINUXTHREADS_OLD__
++ attribute_hidden
++# endif
++ ;
++# ifdef __UCLIBC_UCLINUX_BROKEN_MUNMAP__
++__UCLIBC_MUTEX_EXTERN(__malloc_mmb_heap_lock)
++# ifndef __LINUXTHREADS_OLD__
++ attribute_hidden
++# endif
++ ;
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc/memalign.c uClibc-git/libc/stdlib/malloc/memalign.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc/memalign.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc/memalign.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,7 +14,6 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/mman.h>
+-#include <sys/param.h> /* MAX */
+
+ #include "malloc.h"
+ #include "heap.h"
+@@ -30,6 +29,8 @@
+ */
+
+ void *memalign (size_t alignment, size_t size);
++/* XXX shadow outer malloc.h */
++libc_hidden_proto(memalign)
+ void *
+ memalign (size_t alignment, size_t size)
+ {
+@@ -92,3 +93,4 @@
+
+ return MALLOC_SETUP (base, end_addr - (unsigned long)base);
+ }
++libc_hidden_def(memalign)
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc-simple/alloc.c uClibc-git/libc/stdlib/malloc-simple/alloc.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc-simple/alloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc-simple/alloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,6 +17,7 @@
+ #include <sys/mman.h>
+ #include <malloc.h>
+
++extern int weak_function __libc_free_aligned(void *ptr) attribute_hidden;
+
+ #ifdef L_malloc
+ void *malloc(size_t size)
+@@ -36,7 +37,7 @@
+ #ifdef __ARCH_USE_MMU__
+ # define MMAP_FLAGS MAP_PRIVATE | MAP_ANONYMOUS
+ #else
+-# define MMAP_FLAGS MAP_SHARED | MAP_ANONYMOUS | MAP_UNINITIALIZE
++# define MMAP_FLAGS MAP_SHARED | MAP_ANONYMOUS | MAP_UNINITIALIZED
+ #endif
+
+ result = mmap((void *) 0, size + sizeof(size_t), PROT_READ | PROT_WRITE,
+@@ -63,7 +64,7 @@
+ result = malloc(size);
+
+ #ifndef __ARCH_USE_MMU__
+- /* mmap'd with MAP_UNINITIALIZE, we have to blank memory ourselves */
++ /* mmap'd with MAP_UNINITIALIZED, we have to blank memory ourselves */
+ if (result != NULL) {
+ memset(result, 0, size);
+ }
+@@ -95,7 +96,6 @@
+ #endif
+
+ #ifdef L_free
+-extern int weak_function __libc_free_aligned(void *ptr);
+ void free(void *ptr)
+ {
+ if (unlikely(ptr == NULL))
+@@ -123,7 +123,7 @@
+ __ptr_t aligned; /* The address that memaligned returned. */
+ __ptr_t exact; /* The address that malloc returned. */
+ };
+-struct alignlist *_aligned_blocks;
++static struct alignlist *_aligned_blocks;
+
+ /* Return memory to the heap. */
+ int __libc_free_aligned(void *ptr)
+@@ -182,4 +182,5 @@
+
+ return result;
+ }
++libc_hidden_def(memalign)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc-simple/Makefile.in uClibc-git/libc/stdlib/malloc-simple/Makefile.in
+--- uClibc-0.9.33.2/libc/stdlib/malloc-simple/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc-simple/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -10,11 +10,13 @@
+ STDLIB_MALLOC_SIMPLE_DIR := $(top_srcdir)libc/stdlib/malloc-simple
+ STDLIB_MALLOC_SIMPLE_OUT := $(top_builddir)libc/stdlib/malloc-simple
+
+-CSRC := $(notdir $(wildcard $(STDLIB_MALLOC_SIMPLE_DIR)/*.c))
+-CSRC := $(filter-out alloc.c,$(CSRC))
++CSRC-y := $(notdir $(wildcard $(STDLIB_MALLOC_SIMPLE_DIR)/*.c))
++# multi source alloc.c
++CSRC- := alloc.c
++CSRC-y := $(filter-out $(CSRC-),$(CSRC-y))
+
+-STDLIB_MALLOC_SIMPLE_SRC := $(patsubst %.c,$(STDLIB_MALLOC_SIMPLE_DIR)/%.c,$(CSRC))
+-STDLIB_MALLOC_SIMPLE_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_SIMPLE_OUT)/%.o,$(CSRC))
++STDLIB_MALLOC_SIMPLE_SRC := $(patsubst %.c,$(STDLIB_MALLOC_SIMPLE_DIR)/%.c,$(CSRC-y))
++STDLIB_MALLOC_SIMPLE_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_SIMPLE_OUT)/%.o,$(CSRC-y))
+
+ libc-$(MALLOC_SIMPLE) += $(STDLIB_MALLOC_SIMPLE_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc-standard/Makefile.in uClibc-git/libc/stdlib/malloc-standard/Makefile.in
+--- uClibc-0.9.33.2/libc/stdlib/malloc-standard/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc-standard/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -7,15 +7,13 @@
+
+ subdirs += libc/stdlib/malloc-standard
+
+-# calloc.c can be found at uClibc/libc/stdlib/calloc.c
+-# valloc.c can be found at uClibc/libc/stdlib/valloc.c
+-CSRC := malloc.c calloc.c realloc.c free.c memalign.c mallopt.c mallinfo.c
+-
+ STDLIB_MALLOC_STANDARD_DIR := $(top_srcdir)libc/stdlib/malloc-standard
+ STDLIB_MALLOC_STANDARD_OUT := $(top_builddir)libc/stdlib/malloc-standard
+
+-STDLIB_MALLOC_STANDARD_SRC := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_DIR)/%.c,$(CSRC))
+-STDLIB_MALLOC_STANDARD_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_OUT)/%.o,$(CSRC))
++CSRC-y := $(notdir $(wildcard $(STDLIB_MALLOC_STANDARD_DIR)/*.c))
++
++STDLIB_MALLOC_STANDARD_SRC := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_DIR)/%.c,$(CSRC-y))
++STDLIB_MALLOC_STANDARD_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_OUT)/%.o,$(CSRC-y))
+
+ libc-$(MALLOC_STANDARD) += $(STDLIB_MALLOC_STANDARD_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc-standard/mallinfo.c uClibc-git/libc/stdlib/malloc-standard/mallinfo.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc-standard/mallinfo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc-standard/mallinfo.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,6 +15,7 @@
+ */
+
+ #include "malloc.h"
++#include <stdio.h> /* fprintf */
+
+
+ /* ------------------------------ mallinfo ------------------------------ */
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc-standard/malloc.h uClibc-git/libc/stdlib/malloc-standard/malloc.h
+--- uClibc-0.9.33.2/libc/stdlib/malloc-standard/malloc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc-standard/malloc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -26,7 +26,11 @@
+
+
+
+-__UCLIBC_MUTEX_EXTERN(__malloc_lock);
++__UCLIBC_MUTEX_EXTERN(__malloc_lock)
++#if defined __UCLIBC_HAS_THREADS__ && !defined __LINUXTHREADS_OLD__
++ attribute_hidden
++#endif
++ ;
+ #define __MALLOC_LOCK __UCLIBC_MUTEX_LOCK(__malloc_lock)
+ #define __MALLOC_UNLOCK __UCLIBC_MUTEX_UNLOCK(__malloc_lock)
+
+@@ -349,13 +353,13 @@
+ #endif
+
+ #ifdef __ARCH_USE_MMU__
+-# define _MAP_UNINITIALIZE 0
++# define _MAP_UNINITIALIZED 0
+ #else
+-# define _MAP_UNINITIALIZE MAP_UNINITIALIZE
++# define _MAP_UNINITIALIZED MAP_UNINITIALIZED
+ #endif
+
+ #define MMAP(addr, size, prot) \
+- (mmap((addr), (size), (prot), MAP_PRIVATE|MAP_ANONYMOUS|_MAP_UNINITIALIZE, 0, 0))
++ (mmap((addr), (size), (prot), MAP_PRIVATE|MAP_ANONYMOUS|_MAP_UNINITIALIZED, 0, 0))
+
+
+ /* ----------------------- Chunk representations ----------------------- */
+@@ -910,7 +914,7 @@
+ malloc relies on the property that malloc_state is initialized to
+ all zeroes (as is true of C statics).
+ */
+-extern struct malloc_state __malloc_state; /* never directly referenced */
++extern struct malloc_state __malloc_state attribute_hidden; /* never directly referenced */
+
+ /*
+ All uses of av_ are via get_malloc_state().
+@@ -947,12 +951,12 @@
+ #define check_malloced_chunk(P,N) __do_check_malloced_chunk(P,N)
+ #define check_malloc_state() __do_check_malloc_state()
+
+-extern void __do_check_chunk(mchunkptr p);
+-extern void __do_check_free_chunk(mchunkptr p);
+-extern void __do_check_inuse_chunk(mchunkptr p);
+-extern void __do_check_remalloced_chunk(mchunkptr p, size_t s);
+-extern void __do_check_malloced_chunk(mchunkptr p, size_t s);
+-extern void __do_check_malloc_state(void);
++extern void __do_check_chunk(mchunkptr p) attribute_hidden;
++extern void __do_check_free_chunk(mchunkptr p) attribute_hidden;
++extern void __do_check_inuse_chunk(mchunkptr p) attribute_hidden;
++extern void __do_check_remalloced_chunk(mchunkptr p, size_t s) attribute_hidden;
++extern void __do_check_malloced_chunk(mchunkptr p, size_t s) attribute_hidden;
++extern void __do_check_malloc_state(void) attribute_hidden;
+
+ #include <assert.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/malloc-standard/memalign.c uClibc-git/libc/stdlib/malloc-standard/memalign.c
+--- uClibc-0.9.33.2/libc/stdlib/malloc-standard/memalign.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/malloc-standard/memalign.c 2014-02-03 12:32:56.000000000 +0100
+@@ -127,4 +127,4 @@
+ __MALLOC_UNLOCK;
+ return retval;
+ }
+-
++libc_hidden_def(memalign)
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mkdtemp.c uClibc-git/libc/stdlib/mkdtemp.c
+--- uClibc-0.9.33.2/libc/stdlib/mkdtemp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/mkdtemp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mkostemp64.c uClibc-git/libc/stdlib/mkostemp64.c
+--- uClibc-0.9.33.2/libc/stdlib/mkostemp64.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/stdlib/mkostemp64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <fcntl.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include "../misc/internals/tempname.h"
++
++/* Generate a unique temporary file name from TEMPLATE.
++ The last six characters of TEMPLATE must be "XXXXXX";
++ they are replaced with a string that makes the filename unique.
++ Then open the file and return a fd. */
++int
++mkostemp64 (char *template, int flags)
++{
++ return __gen_tempname (template, __GT_BIGFILE, flags | O_LARGEFILE);
++}
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mkostemp.c uClibc-git/libc/stdlib/mkostemp.c
+--- uClibc-0.9.33.2/libc/stdlib/mkostemp.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/stdlib/mkostemp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,30 @@
++/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include "../misc/internals/tempname.h"
++
++/* Generate a unique temporary file name from TEMPLATE.
++ The last six characters of TEMPLATE must be "XXXXXX";
++ they are replaced with a string that makes the filename unique.
++ Then open the file and return a fd. */
++int
++mkostemp (char *template, int flags)
++{
++ return __gen_tempname (template, __GT_FILE, flags);
++}
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mkstemp64.c uClibc-git/libc/stdlib/mkstemp64.c
+--- uClibc-0.9.33.2/libc/stdlib/mkstemp64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/mkstemp64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mkstemp.c uClibc-git/libc/stdlib/mkstemp.c
+--- uClibc-0.9.33.2/libc/stdlib/mkstemp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/mkstemp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mktemp.c uClibc-git/libc/stdlib/mktemp.c
+--- uClibc-0.9.33.2/libc/stdlib/mktemp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/mktemp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mrand48.c uClibc-git/libc/stdlib/mrand48.c
+--- uClibc-0.9.33.2/libc/stdlib/mrand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/mrand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/mrand48_r.c uClibc-git/libc/stdlib/mrand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/mrand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/mrand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/nrand48.c uClibc-git/libc/stdlib/nrand48.c
+--- uClibc-0.9.33.2/libc/stdlib/nrand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/nrand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/nrand48_r.c uClibc-git/libc/stdlib/nrand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/nrand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/nrand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/posix_memalign.c uClibc-git/libc/stdlib/posix_memalign.c
+--- uClibc-0.9.33.2/libc/stdlib/posix_memalign.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/posix_memalign.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- *
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/ptsname.c uClibc-git/libc/stdlib/ptsname.c
+--- uClibc-0.9.33.2/libc/stdlib/ptsname.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/ptsname.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/pty-private.h uClibc-git/libc/stdlib/pty-private.h
+--- uClibc-0.9.33.2/libc/stdlib/pty-private.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/pty-private.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTY_PRIVATE_H
+ #define _PTY_PRIVATE_H 1
+diff -Nur uClibc-0.9.33.2/libc/stdlib/rand_r.c uClibc-git/libc/stdlib/rand_r.c
+--- uClibc-0.9.33.2/libc/stdlib/rand_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/rand_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/rpmatch.c uClibc-git/libc/stdlib/rpmatch.c
+--- uClibc-0.9.33.2/libc/stdlib/rpmatch.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/stdlib/rpmatch.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/* Copyright (C) 2012 Bernhard Reutner-Fischer <uclibc@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1+, see the file COPYING.LIB in this tarball.
++ */
++
++#define L_rpmatch
++#include "stdlib.c"
+diff -Nur uClibc-0.9.33.2/libc/stdlib/seed48.c uClibc-git/libc/stdlib/seed48.c
+--- uClibc-0.9.33.2/libc/stdlib/seed48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/seed48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/seed48_r.c uClibc-git/libc/stdlib/seed48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/seed48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/seed48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/setenv.c uClibc-git/libc/stdlib/setenv.c
+--- uClibc-0.9.33.2/libc/stdlib/setenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/setenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>.
+
+ modified for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+diff -Nur uClibc-0.9.33.2/libc/stdlib/srand48.c uClibc-git/libc/stdlib/srand48.c
+--- uClibc-0.9.33.2/libc/stdlib/srand48.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/srand48.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/srand48_r.c uClibc-git/libc/stdlib/srand48_r.c
+--- uClibc-0.9.33.2/libc/stdlib/srand48_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/srand48_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include <limits.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/stdlib.c uClibc-git/libc/stdlib/stdlib.c
+--- uClibc-0.9.33.2/libc/stdlib/stdlib.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/stdlib.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -32,58 +32,8 @@
+ * Add wscto{inttype} functions.
+ */
+
+-#define _ISOC99_SOURCE /* for ULLONG primarily... */
+ #include <limits.h>
+ #include <stdint.h>
+-/* Work around gcc's refusal to create aliases.
+- * TODO: Add in a define to disable the aliases? */
+-
+-#if UINT_MAX == ULONG_MAX
+-#ifdef L_labs
+-#define abs __ignore_abs
+-#endif
+-#ifdef L_atol
+-#define atoi __ignore_atoi
+-#endif
+-#endif
+-#if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#ifdef L_labs
+-#define llabs __ignore_llabs
+-#endif
+-#ifdef L_atol
+-#define atoll __ignore_atoll
+-#endif
+-#ifdef L_strtol
+-#define strtoll __ignore_strtoll
+-#endif
+-#ifdef L_strtoul
+-#define strtoull __ignore_strtoull
+-#endif
+-#ifdef L_wcstol
+-#define wcstoll __ignore_wcstoll
+-#endif
+-#ifdef L_wcstoul
+-#define wcstoull __ignore_wcstoull
+-#endif
+-#ifdef L_strtol_l
+-#define strtoll_l __ignore_strtoll_l
+-#endif
+-#ifdef L_strtoul_l
+-#define strtoull_l __ignore_strtoull_l
+-#endif
+-#ifdef L_wcstol_l
+-#define wcstoll_l __ignore_wcstoll_l
+-#endif
+-#ifdef L_wcstoul_l
+-#define wcstoull_l __ignore_wcstoull_l
+-#endif
+-#endif
+-#if defined(ULLONG_MAX) && (ULLONG_MAX == UINTMAX_MAX)
+-#if defined L_labs || defined L_llabs
+-#define imaxabs __ignore_imaxabs
+-#endif
+-#endif
+-
+ #include <stdint.h>
+ #include <inttypes.h>
+ #include <ctype.h>
+@@ -100,10 +50,6 @@
+ #include <wctype.h>
+ #include <bits/uClibc_uwchar.h>
+
+-#ifdef __UCLIBC_HAS_XLOCALE__
+-#include <xlocale.h>
+-#endif /* __UCLIBC_HAS_XLOCALE__ */
+-
+ /* TODO: clean up the following... */
+
+ #if WCHAR_MAX > 0xffffUL
+@@ -226,21 +172,15 @@
+ }
+
+ #if UINT_MAX == ULONG_MAX
+-#undef abs
+-extern __typeof(labs) abs;
+-strong_alias(labs,abs)
++strong_alias_untyped(labs,abs)
+ #endif
+
+ #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#undef llabs
+-extern __typeof(labs) llabs;
+-strong_alias(labs,llabs)
++strong_alias_untyped(labs,llabs)
+ #endif
+
+ #if ULONG_MAX == UINTMAX_MAX
+-#undef imaxabs
+-extern __typeof(labs) imaxabs;
+-strong_alias(labs,imaxabs)
++strong_alias_untyped(labs,imaxabs)
+ #endif
+
+ #endif
+@@ -255,9 +195,7 @@
+ }
+
+ #if (ULLONG_MAX == UINTMAX_MAX)
+-#undef imaxabs
+-extern __typeof(llabs) imaxabs;
+-strong_alias(llabs,imaxabs)
++strong_alias_untyped(llabs,imaxabs)
+ #endif
+
+ #endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
+@@ -288,18 +226,12 @@
+ }
+
+ #if UINT_MAX == ULONG_MAX
+-#undef atoi
+-extern __typeof(atol) atoi;
+-/* the one in stdlib.h is not enough due to prototype mismatch */
+-libc_hidden_proto(atoi)
+-strong_alias(atol,atoi)
++strong_alias_untyped(atol,atoi)
+ libc_hidden_def(atoi)
+ #endif
+
+ #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#undef atoll
+-extern __typeof(atol) atoll;
+-strong_alias(atol,atoll)
++strong_alias_untyped(atol,atoll)
+ #endif
+
+ #endif
+@@ -318,9 +250,16 @@
+
+ #endif
+ /**********************************************************************/
++#ifdef L_rpmatch
++int rpmatch (const char *__response)
++{
++ return (__response[0] == 'y' || __response[0] == 'Y') ? 1 :
++ (__response[0] == 'n' || __response[0] == 'N') ? 0 : -1;
++}
++#endif
++/**********************************************************************/
+ #if defined(L_strtol) || defined(L_strtol_l)
+
+-libc_hidden_proto(__XL_NPP(strtol))
+ long __XL_NPP(strtol)(const char * __restrict str, char ** __restrict endptr,
+ int base __LOCALE_PARAM)
+ {
+@@ -333,17 +272,7 @@
+ #endif
+
+ #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#ifdef L_strtol_l
+-#undef strtoll_l
+-#else
+-#undef strtoll
+-#endif
+-extern __typeof(__XL_NPP(strtol)) __XL_NPP(strtoll);
+-/* the one in stdlib.h is not enough due to prototype mismatch */
+-#ifdef L_strtol
+-libc_hidden_proto(__XL_NPP(strtoll))
+-#endif
+-strong_alias(__XL_NPP(strtol),__XL_NPP(strtoll))
++strong_alias_untyped(__XL_NPP(strtol),__XL_NPP(strtoll))
+ #ifdef L_strtol
+ libc_hidden_def(__XL_NPP(strtoll))
+ strong_alias(strtol,strtoq)
+@@ -389,13 +318,7 @@
+ #endif
+
+ #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#ifdef L_strtoul_l
+-#undef strtoull_l
+-#else
+-#undef strtoull
+-#endif
+-extern __typeof(__XL_NPP(strtoul)) __XL_NPP(strtoull);
+-strong_alias(__XL_NPP(strtoul),__XL_NPP(strtoull))
++strong_alias_untyped(__XL_NPP(strtoul),__XL_NPP(strtoull))
+ #if !defined(L_strtoul_l)
+ strong_alias(strtoul,strtouq)
+ #endif
+@@ -744,16 +667,7 @@
+ #endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
+
+ #endif
+-/**********************************************************************/
+-/* Made _Exit() an alias for _exit(), as per C99. */
+-/* #ifdef L__Exit */
+-/* void _Exit(int status) */
+-/* { */
+-/* _exit(status); */
+-/* } */
+
+-/* #endif */
+-/**********************************************************************/
+ #ifdef L_bsearch
+
+ void *bsearch(const void *key, const void *base, size_t /* nmemb */ high,
+@@ -1067,13 +981,7 @@
+ #endif
+
+ #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#ifdef L_wcstol_l
+-#undef wcstoll_l
+-#else
+-#undef wcstoll
+-#endif
+-extern __typeof(__XL_NPP(wcstol)) __XL_NPP(wcstoll);
+-strong_alias(__XL_NPP(wcstol),__XL_NPP(wcstoll))
++strong_alias_untyped(__XL_NPP(wcstol),__XL_NPP(wcstoll))
+ #endif
+
+ #endif
+@@ -1114,13 +1022,7 @@
+ #endif
+
+ #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
+-#ifdef L_wcstoul_l
+-#undef wcstoull_l
+-#else
+-#undef wcstoull
+-#endif
+-extern __typeof(__XL_NPP(wcstoul)) __XL_NPP(wcstoull);
+-strong_alias(__XL_NPP(wcstoul),__XL_NPP(wcstoull))
++strong_alias_untyped(__XL_NPP(wcstoul),__XL_NPP(wcstoull))
+ #endif
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/_strtod.c uClibc-git/libc/stdlib/_strtod.c
+--- uClibc-0.9.33.2/libc/stdlib/_strtod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/_strtod.c 2014-02-03 12:32:56.000000000 +0100
+@@ -95,7 +95,6 @@
+
+ /**********************************************************************/
+
+-#define _ISOC99_SOURCE 1
+ #include <stdlib.h>
+ #include <string.h>
+ #include <ctype.h>
+@@ -112,10 +111,6 @@
+ # include <bits/uClibc_uwchar.h>
+ #endif
+
+-#ifdef __UCLIBC_HAS_XLOCALE__
+-# include <xlocale.h>
+-#endif
+-
+ /* Handle _STRTOD_HEXADECIMAL_FLOATS via uClibc config now. */
+ #undef _STRTOD_HEXADECIMAL_FLOATS
+ #ifdef __UCLIBC_HAS_HEXADECIMAL_FLOATS__
+@@ -509,7 +504,6 @@
+ #endif
+
+
+-libc_hidden_proto(__XL_NPP(strtof))
+ float __XL_NPP(strtof)(const Wchar *str, Wchar **endptr __LOCALE_PARAM )
+ {
+ #if FPMAX_TYPE == 1
+@@ -526,7 +520,6 @@
+ return y;
+ #endif
+ }
+-libc_hidden_def(__XL_NPP(strtof))
+
+ #endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/stdlib/system.c uClibc-git/libc/stdlib/system.c
+--- uClibc-0.9.33.2/libc/stdlib/system.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/system.c 2014-02-03 12:32:56.000000000 +0100
+@@ -24,11 +24,6 @@
+ * need to figure out why still
+ */
+ #if !defined __UCLIBC_HAS_THREADS_NATIVE__ || defined __sparc__
+-/* uClinux-2.0 has vfork, but Linux 2.0 doesn't */
+-#include <sys/syscall.h>
+-#ifndef __NR_vfork
+-# define vfork fork
+-#endif
+
+ int __libc_system(const char *command)
+ {
+@@ -66,7 +61,7 @@
+ __printf("Waiting for child %d\n", pid);
+ #endif
+
+- if (wait4(pid, &wait_val, 0, 0) == -1)
++ if (__wait4_nocancel(pid, &wait_val, 0, 0) == -1)
+ wait_val = -1;
+
+ out:
+diff -Nur uClibc-0.9.33.2/libc/stdlib/__uc_malloc.c uClibc-git/libc/stdlib/__uc_malloc.c
+--- uClibc-0.9.33.2/libc/stdlib/__uc_malloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/__uc_malloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA.
++not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+diff -Nur uClibc-0.9.33.2/libc/stdlib/unix_grantpt.c uClibc-git/libc/stdlib/unix_grantpt.c
+--- uClibc-0.9.33.2/libc/stdlib/unix_grantpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/unix_grantpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+@@ -31,12 +30,6 @@
+ #include "pty-private.h"
+
+
+-/* uClinux-2.0 has vfork, but Linux 2.0 doesn't */
+-#include <sys/syscall.h>
+-#if ! defined __NR_vfork
+-#define vfork fork
+-#endif
+-
+ /* Return the result of ptsname_r in the buffer pointed to by PTS,
+ which should be of length BUF_LEN. If it is too long to fit in
+ this buffer, a sufficiently long buffer is allocated using malloc,
+diff -Nur uClibc-0.9.33.2/libc/stdlib/unlockpt.c uClibc-git/libc/stdlib/unlockpt.c
+--- uClibc-0.9.33.2/libc/stdlib/unlockpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/unlockpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/stdlib/valloc.c uClibc-git/libc/stdlib/valloc.c
+--- uClibc-0.9.33.2/libc/stdlib/valloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/stdlib/valloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA.
++not, see <http://www.gnu.org/licenses/>.
+
+ The author may be reached (Email) at the address mike@@ai.mit.edu,
+ or (US mail) as Mike Haertel c/o Free Software Foundation. */
+diff -Nur uClibc-0.9.33.2/libc/string/arc/Makefile uClibc-git/libc/string/arc/Makefile
+--- uClibc-0.9.33.2/libc/string/arc/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,13 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++top_srcdir:=../../../
++top_builddir:=../../../
++all: objs
++include $(top_builddir)Rules.mak
++include ../Makefile.in
++include $(top_srcdir)Makerules
+diff -Nur uClibc-0.9.33.2/libc/string/arc/memcmp.S uClibc-git/libc/string/arc/memcmp.S
+--- uClibc-0.9.33.2/libc/string/arc/memcmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/memcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,128 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++#include <features.h>
++
++#ifdef __LITTLE_ENDIAN__
++#define WORD2 r2
++#define SHIFT r3
++#else /* BIG ENDIAN */
++#define WORD2 r3
++#define SHIFT r2
++#endif
++
++ENTRY(memcmp)
++ or r12,r0,r1
++ asl_s r12,r12,30
++ sub r3,r2,1
++ brls r2,r12,.Lbytewise
++ ld r4,[r0,0]
++ ld r5,[r1,0]
++ lsr.f lp_count,r3,3
++ lpne .Loop_end
++ ld_s WORD2,[r0,4]
++ ld_s r12,[r1,4]
++ brne r4,r5,.Leven
++ ld.a r4,[r0,8]
++ ld.a r5,[r1,8]
++ brne WORD2,r12,.Lodd
++.Loop_end:
++ asl_s SHIFT,SHIFT,3
++ bhs_s .Last_cmp
++ brne r4,r5,.Leven
++ ld r4,[r0,4]
++ ld r5,[r1,4]
++#ifdef __LITTLE_ENDIAN__
++ nop_s
++ ; one more load latency cycle
++.Last_cmp:
++ xor r0,r4,r5
++ bset r0,r0,SHIFT
++ sub_s r1,r0,1
++ bic_s r1,r1,r0
++ norm r1,r1
++ b.d .Leven_cmp
++ and r1,r1,24
++.Leven:
++ xor r0,r4,r5
++ sub_s r1,r0,1
++ bic_s r1,r1,r0
++ norm r1,r1
++ ; slow track insn
++ and r1,r1,24
++.Leven_cmp:
++ asl r2,r4,r1
++ asl r12,r5,r1
++ lsr_s r2,r2,1
++ lsr_s r12,r12,1
++ j_s.d [blink]
++ sub r0,r2,r12
++ .balign 4
++.Lodd:
++ xor r0,WORD2,r12
++ sub_s r1,r0,1
++ bic_s r1,r1,r0
++ norm r1,r1
++ ; slow track insn
++ and r1,r1,24
++ asl_s r2,r2,r1
++ asl_s r12,r12,r1
++ lsr_s r2,r2,1
++ lsr_s r12,r12,1
++ j_s.d [blink]
++ sub r0,r2,r12
++#else /* BIG ENDIAN */
++.Last_cmp:
++ neg_s SHIFT,SHIFT
++ lsr r4,r4,SHIFT
++ lsr r5,r5,SHIFT
++ ; slow track insn
++.Leven:
++ sub.f r0,r4,r5
++ mov.ne r0,1
++ j_s.d [blink]
++ bset.cs r0,r0,31
++.Lodd:
++ cmp_s WORD2,r12
++ mov_s r0,1
++ j_s.d [blink]
++ bset.cs r0,r0,31
++#endif /* ENDIAN */
++ .balign 4
++.Lbytewise:
++ breq r2,0,.Lnil
++ ldb r4,[r0,0]
++ ldb r5,[r1,0]
++ lsr.f lp_count,r3
++ lpne .Lbyte_end
++ ldb_s r3,[r0,1]
++ ldb r12,[r1,1]
++ brne r4,r5,.Lbyte_even
++ ldb.a r4,[r0,2]
++ ldb.a r5,[r1,2]
++ brne r3,r12,.Lbyte_odd
++.Lbyte_end:
++ bcc .Lbyte_even
++ brne r4,r5,.Lbyte_even
++ ldb_s r3,[r0,1]
++ ldb_s r12,[r1,1]
++.Lbyte_odd:
++ j_s.d [blink]
++ sub r0,r3,r12
++.Lbyte_even:
++ j_s.d [blink]
++ sub r0,r4,r5
++.Lnil:
++ j_s.d [blink]
++ mov r0,0
++END(memcmp)
++libc_hidden_def(memcmp)
++
++#ifdef __UCLIBC_SUSV3_LEGACY__
++strong_alias(memcmp,bcmp)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/arc/memcpy.S uClibc-git/libc/string/arc/memcpy.S
+--- uClibc-0.9.33.2/libc/string/arc/memcpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++
++/* This memcpy implementation does not support objects of 1GB or larger -
++ the check for alignment does not work then. */
++/* We assume that most sources and destinations are aligned, and
++ that also lengths are mostly a multiple of four, although to a lesser
++ extent. */
++ENTRY(memcpy)
++ or r3,r0,r1
++ asl_s r3,r3,30
++ mov_s r5,r0
++ brls.d r2,r3,.Lcopy_bytewise
++ sub.f r3,r2,1
++ ld_s r12,[r1,0]
++ asr.f lp_count,r3,3
++ bbit0.d r3,2,.Lnox4
++ bmsk_s r2,r2,1
++ st.ab r12,[r5,4]
++ ld.a r12,[r1,4]
++.Lnox4:
++ lppnz .Lendloop
++ ld_s r3,[r1,4]
++ st.ab r12,[r5,4]
++ ld.a r12,[r1,8]
++ st.ab r3,[r5,4]
++.Lendloop:
++ breq r2,0,.Last_store
++ ld r3,[r5,0]
++#ifdef __LITTLE_ENDIAN__
++ add3 r2,-1,r2
++ ; uses long immediate
++ xor_s r12,r12,r3
++ bmsk r12,r12,r2
++ xor_s r12,r12,r3
++#else /* BIG ENDIAN */
++ sub3 r2,31,r2
++ ; uses long immediate
++ xor_s r3,r3,r12
++ bmsk r3,r3,r2
++ xor_s r12,r12,r3
++#endif /* ENDIAN */
++.Last_store:
++ j_s.d [blink]
++ st r12,[r5,0]
++
++ .balign 4
++.Lcopy_bytewise:
++ jcs [blink]
++ ldb_s r12,[r1,0]
++ lsr.f lp_count,r3
++ bhs_s .Lnox1
++ stb.ab r12,[r5,1]
++ ldb.a r12,[r1,1]
++.Lnox1:
++ lppnz .Lendbloop
++ ldb_s r3,[r1,1]
++ stb.ab r12,[r5,1]
++ ldb.a r12,[r1,2]
++ stb.ab r3,[r5,1]
++.Lendbloop:
++ j_s.d [blink]
++ stb r12,[r5,0]
++END(memcpy)
++libc_hidden_def(memcpy)
+diff -Nur uClibc-0.9.33.2/libc/string/arc/memset.S uClibc-git/libc/string/arc/memset.S
+--- uClibc-0.9.33.2/libc/string/arc/memset.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,51 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++
++#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
++
++ENTRY(memset)
++
++ mov_s r4,r0
++ or r12,r0,r2
++ bmsk.f r12,r12,1
++ extb_s r1,r1
++ asl r3,r1,8
++ beq.d .Laligned
++ or_s r1,r1,r3
++ brls r2,SMALL,.Ltiny
++ add r3,r2,r0
++ stb r1,[r3,-1]
++ bclr_s r3,r3,0
++ stw r1,[r3,-2]
++ bmsk.f r12,r0,1
++ add_s r2,r2,r12
++ sub.ne r2,r2,4
++ stb.ab r1,[r4,1]
++ and r4,r4,-2
++ stw.ab r1,[r4,2]
++ and r4,r4,-4
++.Laligned: ; This code address should be aligned for speed.
++ asl r3,r1,16
++ lsr.f lp_count,r2,2
++ or_s r1,r1,r3
++ lpne .Loop_end
++ st.ab r1,[r4,4]
++.Loop_end:
++ j_s [blink]
++
++
++ .balign 4
++.Ltiny:
++ mov.f lp_count,r2
++ lpne .Ltiny_end
++ stb.ab r1,[r4,1]
++.Ltiny_end:
++ j_s [blink]
++END(memset)
++libc_hidden_def(memset)
+diff -Nur uClibc-0.9.33.2/libc/string/arc/strchr.S uClibc-git/libc/string/arc/strchr.S
+--- uClibc-0.9.33.2/libc/string/arc/strchr.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/strchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,138 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++#include <features.h>
++
++/* ARC700 has a relatively long pipeline and branch prediction, so we want
++ to avoid branches that are hard to predict. On the other hand, the
++ presence of the norm instruction makes it easier to operate on whole
++ words branch-free. */
++
++ENTRY(strchr)
++ extb_s r1,r1
++ asl r5,r1,8
++ bmsk r2,r0,1
++ or r5,r5,r1
++ mov_s r3,0x01010101
++ breq.d r2,r0,.Laligned
++ asl r4,r5,16
++ sub_s r0,r0,r2
++ asl r7,r2,3
++ ld_s r2,[r0]
++#ifdef __LITTLE_ENDIAN__
++ asl r7,r3,r7
++#else
++ lsr r7,r3,r7
++#endif
++ or r5,r5,r4
++ ror r4,r3
++ sub r12,r2,r7
++ bic_s r12,r12,r2
++ and r12,r12,r4
++ brne.d r12,0,.Lfound0_ua
++ xor r6,r2,r5
++ ld.a r2,[r0,4]
++ sub r12,r6,r7
++ bic r12,r12,r6
++#ifdef __LITTLE_ENDIAN__
++ and r7,r12,r4
++ breq r7,0,.Loop ; For speed, we want this branch to be unaligned.
++ b .Lfound_char ; Likewise this one.
++#else
++ and r12,r12,r4
++ breq r12,0,.Loop ; For speed, we want this branch to be unaligned.
++ lsr_s r12,r12,7
++ bic r2,r7,r6
++ b.d .Lfound_char_b
++ and_s r2,r2,r12
++#endif
++; /* We require this code address to be unaligned for speed... */
++.Laligned:
++ ld_s r2,[r0]
++ or r5,r5,r4
++ ror r4,r3
++; /* ... so that this code address is aligned, for itself and ... */
++.Loop:
++ sub r12,r2,r3
++ bic_s r12,r12,r2
++ and r12,r12,r4
++ brne.d r12,0,.Lfound0
++ xor r6,r2,r5
++ ld.a r2,[r0,4]
++ sub r12,r6,r3
++ bic r12,r12,r6
++ and r7,r12,r4
++ breq r7,0,.Loop /* ... so that this branch is unaligned. */
++ ; Found searched-for character. r0 has already advanced to next word.
++#ifdef __LITTLE_ENDIAN__
++/* We only need the information about the first matching byte
++ (i.e. the least significant matching byte) to be exact,
++ hence there is no problem with carry effects. */
++.Lfound_char:
++ sub r3,r7,1
++ bic r3,r3,r7
++ norm r2,r3
++ sub_s r0,r0,1
++ asr_s r2,r2,3
++ j.d [blink]
++ sub_s r0,r0,r2
++
++ .balign 4
++.Lfound0_ua:
++ mov r3,r7
++.Lfound0:
++ sub r3,r6,r3
++ bic r3,r3,r6
++ and r2,r3,r4
++ or_s r12,r12,r2
++ sub_s r3,r12,1
++ bic_s r3,r3,r12
++ norm r3,r3
++ add_s r0,r0,3
++ asr_s r12,r3,3
++ asl.f 0,r2,r3
++ sub_s r0,r0,r12
++ j_s.d [blink]
++ mov.pl r0,0
++#else /* BIG ENDIAN */
++.Lfound_char:
++ lsr r7,r7,7
++
++ bic r2,r7,r6
++.Lfound_char_b:
++ norm r2,r2
++ sub_s r0,r0,4
++ asr_s r2,r2,3
++ j.d [blink]
++ add_s r0,r0,r2
++
++.Lfound0_ua:
++ mov_s r3,r7
++.Lfound0:
++ asl_s r2,r2,7
++ or r7,r6,r4
++ bic_s r12,r12,r2
++ sub r2,r7,r3
++ or r2,r2,r6
++ bic r12,r2,r12
++ bic.f r3,r4,r12
++ norm r3,r3
++
++ add.pl r3,r3,1
++ asr_s r12,r3,3
++ asl.f 0,r2,r3
++ add_s r0,r0,r12
++ j_s.d [blink]
++ mov.mi r0,0
++#endif /* ENDIAN */
++END(strchr)
++libc_hidden_def(strchr)
++
++#ifdef __UCLIBC_SUSV3_LEGACY__
++strong_alias(strchr,index)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/arc/strcmp.S uClibc-git/libc/string/arc/strcmp.S
+--- uClibc-0.9.33.2/libc/string/arc/strcmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,102 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++#include <sysdep.h>
++
++/* This is optimized primarily for the ARC700.
++ It would be possible to speed up the loops by one cycle / word
++ respective one cycle / byte by forcing double source 1 alignment, unrolling
++ by a factor of two, and speculatively loading the second word / byte of
++ source 1; however, that would increase the overhead for loop setup / finish,
++ and strcmp might often terminate early. */
++
++ENTRY(strcmp)
++ or r2,r0,r1
++ bmsk_s r2,r2,1
++ brne r2,0,.Lcharloop
++ mov_s r12,0x01010101
++ ror r5,r12
++.Lwordloop:
++ ld.ab r2,[r0,4]
++ ld.ab r3,[r1,4]
++ nop_s
++ sub r4,r2,r12
++ bic r4,r4,r2
++ and r4,r4,r5
++ brne r4,0,.Lfound0
++ breq r2,r3,.Lwordloop
++#ifdef __LITTLE_ENDIAN__
++ xor r0,r2,r3 ; mask for difference
++ sub_s r1,r0,1
++ bic_s r0,r0,r1 ; mask for least significant difference bit
++ sub r1,r5,r0
++ xor r0,r5,r1 ; mask for least significant difference byte
++ and_s r2,r2,r0
++ and_s r3,r3,r0
++#endif /* LITTLE ENDIAN */
++ cmp_s r2,r3
++ mov_s r0,1
++ j_s.d [blink]
++ bset.lo r0,r0,31
++
++ .balign 4
++#ifdef __LITTLE_ENDIAN__
++.Lfound0:
++ xor r0,r2,r3 ; mask for difference
++ or r0,r0,r4 ; or in zero indicator
++ sub_s r1,r0,1
++ bic_s r0,r0,r1 ; mask for least significant difference bit
++ sub r1,r5,r0
++ xor r0,r5,r1 ; mask for least significant difference byte
++ and_s r2,r2,r0
++ and_s r3,r3,r0
++ sub.f r0,r2,r3
++ mov.hi r0,1
++ j_s.d [blink]
++ bset.lo r0,r0,31
++#else /* BIG ENDIAN */
++ /* The zero-detection above can mis-detect 0x01 bytes as zeroes
++ because of carry-propagateion from a lower significant zero byte.
++ We can compensate for this by checking that bit0 is zero.
++ This compensation is not necessary in the step where we
++ get a low estimate for r2, because in any affected bytes
++ we already have 0x00 or 0x01, which will remain unchanged
++ when bit 7 is cleared. */
++ .balign 4
++.Lfound0:
++ lsr r0,r4,8
++ lsr_s r1,r2
++ bic_s r2,r2,r0 ; get low estimate for r2 and get ...
++ bic_s r0,r0,r1 ; <this is the adjusted mask for zeros>
++ or_s r3,r3,r0 ; ... high estimate r3 so that r2 > r3 will ...
++ cmp_s r3,r2 ; ... be independent of trailing garbage
++ or_s r2,r2,r0 ; likewise for r3 > r2
++ bic_s r3,r3,r0
++ rlc r0,0 ; r0 := r2 > r3 ? 1 : 0
++ cmp_s r2,r3
++ j_s.d [blink]
++ bset.lo r0,r0,31
++#endif /* ENDIAN */
++
++ .balign 4
++.Lcharloop:
++ ldb.ab r2,[r0,1]
++ ldb.ab r3,[r1,1]
++ nop_s
++ breq r2,0,.Lcmpend
++ breq r2,r3,.Lcharloop
++.Lcmpend:
++ j_s.d [blink]
++ sub r0,r2,r3
++END(strcmp)
++libc_hidden_def(strcmp)
++
++#ifndef __UCLIBC_HAS_LOCALE__
++strong_alias(strcmp,strcoll)
++libc_hidden_def(strcoll)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/arc/strcpy.S uClibc-git/libc/string/arc/strcpy.S
+--- uClibc-0.9.33.2/libc/string/arc/strcpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++
++#include <sysdep.h>
++
++/* If dst and src are 4 byte aligned, copy 8 bytes at a time.
++ If the src is 4, but not 8 byte aligned, we first read 4 bytes to get
++ it 8 byte aligned. Thus, we can do a little read-ahead, without
++ dereferencing a cache line that we should not touch.
++ Note that short and long instructions have been scheduled to avoid
++ branch stalls.
++ The beq_s to r3z could be made unaligned & long to avoid a stall
++ there, but the it is not likely to be taken often, and it
++ would also be likey to cost an unaligned mispredict at the next call. */
++
++ENTRY(strcpy)
++ or r2,r0,r1
++ bmsk_s r2,r2,1
++ brne.d r2,0,charloop
++ mov_s r10,r0
++ ld_s r3,[r1,0]
++ mov r8,0x01010101
++ bbit0.d r1,2,loop_start
++ ror r12,r8
++ sub r2,r3,r8
++ bic_s r2,r2,r3
++ tst_s r2,r12
++ bne r3z
++ mov_s r4,r3
++ .balign 4
++loop:
++ ld.a r3,[r1,4]
++ st.ab r4,[r10,4]
++loop_start:
++ ld.a r4,[r1,4]
++ sub r2,r3,r8
++ bic_s r2,r2,r3
++ tst_s r2,r12
++ bne_s r3z
++ st.ab r3,[r10,4]
++ sub r2,r4,r8
++ bic r2,r2,r4
++ tst r2,r12
++ beq loop
++ mov_s r3,r4
++#ifdef __LITTLE_ENDIAN__
++r3z: bmsk.f r1,r3,7
++ lsr_s r3,r3,8
++#else
++r3z: lsr.f r1,r3,24
++ asl_s r3,r3,8
++#endif
++ bne.d r3z
++ stb.ab r1,[r10,1]
++ j_s [blink]
++
++ .balign 4
++charloop:
++ ldb.ab r3,[r1,1]
++
++
++ brne.d r3,0,charloop
++ stb.ab r3,[r10,1]
++ j [blink]
++END(strcpy)
++libc_hidden_def(strcpy)
+diff -Nur uClibc-0.9.33.2/libc/string/arc/strlen.S uClibc-git/libc/string/arc/strlen.S
+--- uClibc-0.9.33.2/libc/string/arc/strlen.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/arc/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,84 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ * Copyright (C) 2007 ARC International (UK) LTD
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++
++#include <sysdep.h>
++
++ENTRY(strlen)
++ or r3,r0,7
++ ld r2,[r3,-7]
++ ld.a r6,[r3,-3]
++ mov r4,0x01010101
++ ; uses long immediate
++#ifdef __LITTLE_ENDIAN__
++ asl_s r1,r0,3
++ btst_s r0,2
++ asl r7,r4,r1
++ ror r5,r4
++ sub r1,r2,r7
++ bic_s r1,r1,r2
++ mov.eq r7,r4
++ sub r12,r6,r7
++ bic r12,r12,r6
++ or.eq r12,r12,r1
++ and r12,r12,r5
++ brne r12,0,.Learly_end
++#else /* BIG ENDIAN */
++ ror r5,r4
++ btst_s r0,2
++ mov_s r1,31
++ sub3 r7,r1,r0
++ sub r1,r2,r4
++ bic_s r1,r1,r2
++ bmsk r1,r1,r7
++ sub r12,r6,r4
++ bic r12,r12,r6
++ bmsk.ne r12,r12,r7
++ or.eq r12,r12,r1
++ and r12,r12,r5
++ brne r12,0,.Learly_end
++#endif /* ENDIAN */
++
++.Loop:
++ ld_s r2,[r3,4]
++ ld.a r6,[r3,8]
++ ; stall for load result
++ sub r1,r2,r4
++ bic_s r1,r1,r2
++ sub r12,r6,r4
++ bic r12,r12,r6
++ or r12,r12,r1
++ and r12,r12,r5
++ breq r12,0,.Loop
++.Lend:
++ and.f r1,r1,r5
++ sub.ne r3,r3,4
++ mov.eq r1,r12
++#ifdef __LITTLE_ENDIAN__
++ sub_s r2,r1,1
++ bic_s r2,r2,r1
++ norm r1,r2
++ sub_s r0,r0,3
++ lsr_s r1,r1,3
++ sub r0,r3,r0
++ j_s.d [blink]
++ sub r0,r0,r1
++#else /* BIG ENDIAN */
++ lsr_s r1,r1,7
++ mov.eq r2,r6
++ bic_s r1,r1,r2
++ norm r1,r1
++ sub r0,r3,r0
++ lsr_s r1,r1,3
++ j_s.d [blink]
++ add r0,r0,r1
++#endif /* ENDIAN */
++.Learly_end:
++ b.d .Lend
++ sub_s.ne r1,r1,r1
++END(strlen)
++libc_hidden_def(strlen)
+diff -Nur uClibc-0.9.33.2/libc/string/arm/memset.S uClibc-git/libc/string/arm/memset.S
+--- uClibc-0.9.33.2/libc/string/arm/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/arm/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/string/arm/strlen.S uClibc-git/libc/string/arm/strlen.S
+--- uClibc-0.9.33.2/libc/string/arm/strlen.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/arm/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <endian.h>
+diff -Nur uClibc-0.9.33.2/libc/string/avr32/Makefile uClibc-git/libc/string/avr32/Makefile
+--- uClibc-0.9.33.2/libc/string/avr32/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/avr32/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+ # details.
+ #
+ # You should have received a copy of the GNU Library General Public License
+-# along with this program; if not, write to the Free Software Foundation, Inc.,
+-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ top_srcdir := ../../../
+ top_builddir := ../../../
+diff -Nur uClibc-0.9.33.2/libc/string/basename.c uClibc-git/libc/string/basename.c
+--- uClibc-0.9.33.2/libc/string/basename.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/basename.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,7 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "_string.h"
++#include <string.h>
+
+ #ifdef __USE_GNU
+
+@@ -24,5 +24,4 @@
+
+ return (char *) p;
+ }
+-libc_hidden_def(basename)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/string/bcopy.c uClibc-git/libc/string/bcopy.c
+--- uClibc-0.9.33.2/libc/string/bcopy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/bcopy.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,11 +5,9 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "_string.h"
++#include <string.h>
+
+ #ifdef __UCLIBC_SUSV3_LEGACY__
+-
+-
+ void bcopy(const void *s2, void *s1, size_t n)
+ {
+ #if 1
+diff -Nur uClibc-0.9.33.2/libc/string/bzero.c uClibc-git/libc/string/bzero.c
+--- uClibc-0.9.33.2/libc/string/bzero.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/bzero.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,7 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "_string.h"
++#include <string.h>
+
+ #ifdef __UCLIBC_SUSV3_LEGACY__
+ void bzero(void *s, size_t n)
+diff -Nur uClibc-0.9.33.2/libc/string/_collate.c uClibc-git/libc/string/_collate.c
+--- uClibc-0.9.33.2/libc/string/_collate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/_collate.c 2014-02-03 12:32:56.000000000 +0100
+@@ -159,7 +159,7 @@
+ #define N (1)
+ #else /* WANT_WIDE */
+ wchar_t WC;
+- size_t n0, nx;
++ size_t n0, nx = 0;
+ #define N n0
+
+ #endif /* WANT_WIDE */
+diff -Nur uClibc-0.9.33.2/libc/string/cris/memcopy.h uClibc-git/libc/string/cris/memcopy.h
+--- uClibc-0.9.33.2/libc/string/cris/memcopy.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/cris/memcopy.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include "../generic/memcopy.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/cris/memmove.c uClibc-git/libc/string/cris/memmove.c
+--- uClibc-0.9.33.2/libc/string/cris/memmove.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/cris/memmove.c 2014-02-03 12:32:56.000000000 +0100
+@@ -18,9 +18,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/dirname.c uClibc-git/libc/string/dirname.c
+--- uClibc-0.9.33.2/libc/string/dirname.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/dirname.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,8 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "_string.h"
++#define __need_NULL
++#include <stddef.h>
+ #include <libgen.h>
+
+ char *dirname(char *path)
+diff -Nur uClibc-0.9.33.2/libc/string/ffsll.c uClibc-git/libc/string/ffsll.c
+--- uClibc-0.9.33.2/libc/string/ffsll.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ffsll.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/string/frv/memcpy.S uClibc-git/libc/string/frv/memcpy.S
+--- uClibc-0.9.33.2/libc/string/frv/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/frv/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/string/frv/memset.S uClibc-git/libc/string/frv/memset.S
+--- uClibc-0.9.33.2/libc/string/frv/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/frv/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memchr.c uClibc-git/libc/string/generic/memchr.c
+--- uClibc-0.9.33.2/libc/string/generic/memchr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memchr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memcmp.c uClibc-git/libc/string/generic/memcmp.c
+--- uClibc-0.9.33.2/libc/string/generic/memcmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memcmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "memcopy.h"
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memcopy.h uClibc-git/libc/string/generic/memcopy.h
+--- uClibc-0.9.33.2/libc/string/generic/memcopy.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memcopy.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The strategy of the memory functions is:
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memcpy.c uClibc-git/libc/string/generic/memcpy.c
+--- uClibc-0.9.33.2/libc/string/generic/memcpy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memcpy.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "memcopy.h"
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memmem.c uClibc-git/libc/string/generic/memmem.c
+--- uClibc-0.9.33.2/libc/string/generic/memmem.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memmem.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stddef.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memmove.c uClibc-git/libc/string/generic/memmove.c
+--- uClibc-0.9.33.2/libc/string/generic/memmove.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memmove.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memrchr.c uClibc-git/libc/string/generic/memrchr.c
+--- uClibc-0.9.33.2/libc/string/generic/memrchr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memrchr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -18,9 +18,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/memset.c uClibc-git/libc/string/generic/memset.c
+--- uClibc-0.9.33.2/libc/string/generic/memset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/memset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "memcopy.h"
+diff -Nur uClibc-0.9.33.2/libc/string/generic/pagecopy.h uClibc-git/libc/string/generic/pagecopy.h
+--- uClibc-0.9.33.2/libc/string/generic/pagecopy.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/pagecopy.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file defines the macro:
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/rawmemchr.c uClibc-git/libc/string/generic/rawmemchr.c
+--- uClibc-0.9.33.2/libc/string/generic/rawmemchr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/rawmemchr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strcat.c uClibc-git/libc/string/generic/strcat.c
+--- uClibc-0.9.33.2/libc/string/generic/strcat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strcat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "memcopy.h"
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strchr.c uClibc-git/libc/string/generic/strchr.c
+--- uClibc-0.9.33.2/libc/string/generic/strchr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strchr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strchrnul.c uClibc-git/libc/string/generic/strchrnul.c
+--- uClibc-0.9.33.2/libc/string/generic/strchrnul.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strchrnul.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strcmp.c uClibc-git/libc/string/generic/strcmp.c
+--- uClibc-0.9.33.2/libc/string/generic/strcmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strcmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strcpy.c uClibc-git/libc/string/generic/strcpy.c
+--- uClibc-0.9.33.2/libc/string/generic/strcpy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strcpy.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strcspn.c uClibc-git/libc/string/generic/strcspn.c
+--- uClibc-0.9.33.2/libc/string/generic/strcspn.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strcspn.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strlen.c uClibc-git/libc/string/generic/strlen.c
+--- uClibc-0.9.33.2/libc/string/generic/strlen.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strlen.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strncat.c uClibc-git/libc/string/generic/strncat.c
+--- uClibc-0.9.33.2/libc/string/generic/strncat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strncat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strncmp.c uClibc-git/libc/string/generic/strncmp.c
+--- uClibc-0.9.33.2/libc/string/generic/strncmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strncmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "memcopy.h"
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strncpy.c uClibc-git/libc/string/generic/strncpy.c
+--- uClibc-0.9.33.2/libc/string/generic/strncpy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strncpy.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "memcopy.h"
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strnlen.c uClibc-git/libc/string/generic/strnlen.c
+--- uClibc-0.9.33.2/libc/string/generic/strnlen.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strnlen.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strrchr.c uClibc-git/libc/string/generic/strrchr.c
+--- uClibc-0.9.33.2/libc/string/generic/strrchr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strrchr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strsep.c uClibc-git/libc/string/generic/strsep.c
+--- uClibc-0.9.33.2/libc/string/generic/strsep.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strsep.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strspn.c uClibc-git/libc/string/generic/strspn.c
+--- uClibc-0.9.33.2/libc/string/generic/strspn.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strspn.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strstr.c uClibc-git/libc/string/generic/strstr.c
+--- uClibc-0.9.33.2/libc/string/generic/strstr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strstr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * My personal strstr() implementation that beats most other algorithms.
+diff -Nur uClibc-0.9.33.2/libc/string/generic/strtok_r.c uClibc-git/libc/string/generic/strtok_r.c
+--- uClibc-0.9.33.2/libc/string/generic/strtok_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/generic/strtok_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/__glibc_strerror_r.c uClibc-git/libc/string/__glibc_strerror_r.c
+--- uClibc-0.9.33.2/libc/string/__glibc_strerror_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/__glibc_strerror_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,9 +5,13 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++/* get rid of REDIRECT */
++#define strerror_r __hide_strerror_r
++
+ #include <features.h>
+ #include <string.h>
+
++#undef strerror_r
+
+ char *__glibc_strerror_r(int errnum, char *strerrbuf, size_t buflen)
+ {
+@@ -16,3 +20,6 @@
+ return strerrbuf;
+ }
+ libc_hidden_def(__glibc_strerror_r)
++#if !defined __USE_XOPEN2K || defined __USE_GNU
++strong_alias(__glibc_strerror_r,strerror_r)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/bcopy.S uClibc-git/libc/string/ia64/bcopy.S
+--- uClibc-0.9.33.2/libc/string/ia64/bcopy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/bcopy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-#include "sysdep.h"
++#include <sysdep.h>
+
+ #ifdef __UCLIBC_SUSV3_LEGACY__
+
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/bzero.S uClibc-git/libc/string/ia64/bzero.S
+--- uClibc-0.9.33.2/libc/string/ia64/bzero.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/bzero.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: dest
+
+@@ -32,7 +31,7 @@
+ Since a stf.spill f0 can store 16B in one go, we use this instruction
+ to get peak speed. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+
+ #ifdef __UCLIBC_SUSV3_LEGACY__
+
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/memccpy.S uClibc-git/libc/string/ia64/memccpy.S
+--- uClibc-0.9.33.2/libc/string/ia64/memccpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/memccpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: a pointer to the next byte after char in dest or NULL
+
+@@ -31,7 +30,7 @@
+ This implementation assumes that it is safe to do read ahead
+ in the src block, without getting beyond its limit. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define OP_T_THRES 16
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/memchr.S uClibc-git/libc/string/ia64/memchr.S
+--- uClibc-0.9.33.2/libc/string/ia64/memchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/memchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: the address of the first occurence of chr in str or NULL
+
+@@ -40,7 +39,7 @@
+ All the loops in this function could have had the internal branch removed
+ if br.ctop and br.cloop could be predicated :-(. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define saved_pr r15
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/memcmp.S uClibc-git/libc/string/ia64/memcmp.S
+--- uClibc-0.9.33.2/libc/string/ia64/memcmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/memcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: the result of the comparison
+
+@@ -33,7 +32,7 @@
+
+ and all the mux1 instructions should be replaced by plain mov's. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define OP_T_THRES 16
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/memcpy.S uClibc-git/libc/string/ia64/memcpy.S
+--- uClibc-0.9.33.2/libc/string/ia64/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: dest
+
+@@ -37,7 +36,7 @@
+
+ #define USE_LFETCH
+ #define USE_FLP
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define LFETCH_DIST 500
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/memmove.S uClibc-git/libc/string/ia64/memmove.S
+--- uClibc-0.9.33.2/libc/string/ia64/memmove.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/memmove.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: dest
+
+@@ -33,7 +32,7 @@
+ sh1 must be computed using an extra instruction: sub sh1 = 64, sh1
+ or the UM.be bit should be cleared at the beginning and set at the end. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define OP_T_THRES 16
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/memset.S uClibc-git/libc/string/ia64/memset.S
+--- uClibc-0.9.33.2/libc/string/ia64/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: dest
+
+@@ -33,7 +32,7 @@
+ Since a stf.spill f0 can store 16B in one go, we use this instruction
+ to get peak speed when value = 0. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define dest in0
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/softpipe.h uClibc-git/libc/string/ia64/softpipe.h
+--- uClibc-0.9.33.2/libc/string/ia64/softpipe.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/softpipe.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The latency of a memory load assumed by the assembly implementation
+ of the mem and str functions. Since we don't have any clue about
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/strchr.S uClibc-git/libc/string/ia64/strchr.S
+--- uClibc-0.9.33.2/libc/string/ia64/strchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/strchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: the address of the first occurence of chr in str or NULL
+
+@@ -30,7 +29,7 @@
+ This implementation assumes little endian mode. For big endian mode,
+ the instruction czx1.r should be replaced by czx1.l. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define saved_lc r18
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/strcmp.S uClibc-git/libc/string/ia64/strcmp.S
+--- uClibc-0.9.33.2/libc/string/ia64/strcmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: the result of the comparison
+
+@@ -27,7 +26,7 @@
+ Unlike memcmp(), this function is optimized for mismatches within the
+ first few characters. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define s1 in0
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/strcpy.S uClibc-git/libc/string/ia64/strcpy.S
+--- uClibc-0.9.33.2/libc/string/ia64/strcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: dest
+
+@@ -31,7 +30,7 @@
+ shr.u tmp = r[0], sh2 // tmp = w1 >> sh2
+ */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define saved_lc r15
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/strlen.S uClibc-git/libc/string/ia64/strlen.S
+--- uClibc-0.9.33.2/libc/string/ia64/strlen.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: the length of the input string
+
+@@ -33,7 +32,7 @@
+ This implementation assumes little endian mode. For big endian mode,
+ the instruction czx1.r should be replaced by czx1.l. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define saved_lc r18
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/strncmp.S uClibc-git/libc/string/ia64/strncmp.S
+--- uClibc-0.9.33.2/libc/string/ia64/strncmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/strncmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: the result of the comparison
+
+@@ -28,7 +27,7 @@
+ Unlike memcmp(), this function is optimized for mismatches within the
+ first few characters. */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define s1 in0
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/strncpy.S uClibc-git/libc/string/ia64/strncpy.S
+--- uClibc-0.9.33.2/libc/string/ia64/strncpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/strncpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Return: dest
+
+@@ -29,7 +28,7 @@
+ In this form, it assumes little endian mode.
+ */
+
+-#include "sysdep.h"
++#include <sysdep.h>
+ #undef ret
+
+ #define saved_lc r15
+diff -Nur uClibc-0.9.33.2/libc/string/ia64/sysdep.h uClibc-git/libc/string/ia64/sysdep.h
+--- uClibc-0.9.33.2/libc/string/ia64/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/ia64/sysdep.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,168 +0,0 @@
+-/* Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Written by Jes Sorensen, <Jes.Sorensen@cern.ch>, April 1999.
+- Based on code originally written by David Mosberger-Tang
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifndef _LINUX_IA64_SYSDEP_H
+-#define _LINUX_IA64_SYSDEP_H 1
+-
+-#include <features.h>
+-#include <asm/unistd.h>
+-
+-#ifdef __ASSEMBLER__
+-
+-/* Macros to help writing .prologue directives in assembly code. */
+-#define ASM_UNW_PRLG_RP 0x8
+-#define ASM_UNW_PRLG_PFS 0x4
+-#define ASM_UNW_PRLG_PSP 0x2
+-#define ASM_UNW_PRLG_PR 0x1
+-#define ASM_UNW_PRLG_GRSAVE(ninputs) (32+(ninputs))
+-
+-#ifdef __STDC__
+-#define C_LABEL(name) name :
+-#else
+-#define C_LABEL(name) name/**/:
+-#endif
+-
+-#define CALL_MCOUNT
+-
+-#define ENTRY(name) \
+- .text; \
+- .align 32; \
+- .proc C_SYMBOL_NAME(name); \
+- .global C_SYMBOL_NAME(name); \
+- C_LABEL(name) \
+- CALL_MCOUNT
+-
+-#define LEAF(name) \
+- .text; \
+- .align 32; \
+- .proc C_SYMBOL_NAME(name); \
+- .global name; \
+- C_LABEL(name)
+-
+-/* Mark the end of function SYM. */
+-#undef END
+-#define END(sym) .endp C_SYMBOL_NAME(sym)
+-
+-/* For Linux we can use the system call table in the header file
+- /usr/include/asm/unistd.h
+- of the kernel. But these symbols do not follow the SYS_* syntax
+- so we have to redefine the `SYS_ify' macro here. */
+-#undef SYS_ify
+-#ifdef __STDC__
+-# define SYS_ify(syscall_name) __NR_##syscall_name
+-#else
+-# define SYS_ify(syscall_name) __NR_/**/syscall_name
+-#endif
+-
+-/* Linux uses a negative return value to indicate syscall errors, unlike
+- most Unices, which use the condition codes' carry flag.
+-
+- Since version 2.1 the return value of a system call might be negative
+- even if the call succeeded. E.g., the `lseek' system call might return
+- a large offset. Therefore we must not anymore test for < 0, but test
+- for a real error by making sure the value in %d0 is a real error
+- number. Linus said he will make sure the no syscall returns a value
+- in -1 .. -4095 as a valid result so we can savely test with -4095. */
+-
+-/* We don't want the label for the error handler to be visible in the symbol
+- table when we define it here. */
+-#define SYSCALL_ERROR_LABEL __syscall_error
+-
+-#undef PSEUDO
+-#define PSEUDO(name, syscall_name, args) \
+- ENTRY(name) \
+- DO_CALL (SYS_ify(syscall_name)); \
+- cmp.eq p6,p0=-1,r10; \
+-(p6) br.cond.spnt.few __syscall_error;
+-
+-#define DO_CALL_VIA_BREAK(num) \
+- mov r15=num; \
+- break __BREAK_SYSCALL
+-
+-#ifdef IA64_USE_NEW_STUB
+-# ifdef SHARED
+-# define DO_CALL(num) \
+- .prologue; \
+- adds r2 = SYSINFO_OFFSET, r13;; \
+- ld8 r2 = [r2]; \
+- .save ar.pfs, r11; \
+- mov r11 = ar.pfs;; \
+- .body; \
+- mov r15 = num; \
+- mov b7 = r2; \
+- br.call.sptk.many b6 = b7;; \
+- .restore sp; \
+- mov ar.pfs = r11; \
+- .prologue; \
+- .body
+-# else /* !SHARED */
+-# define DO_CALL(num) \
+- .prologue; \
+- mov r15 = num; \
+- movl r2 = _dl_sysinfo;; \
+- ld8 r2 = [r2]; \
+- .save ar.pfs, r11; \
+- mov r11 = ar.pfs;; \
+- .body; \
+- mov b7 = r2; \
+- br.call.sptk.many b6 = b7;; \
+- .restore sp; \
+- mov ar.pfs = r11; \
+- .prologue; \
+- .body
+-# endif
+-#else
+-# define DO_CALL(num) DO_CALL_VIA_BREAK(num)
+-#endif
+-
+-#undef PSEUDO_END
+-#define PSEUDO_END(name) .endp C_SYMBOL_NAME(name);
+-
+-#undef PSEUDO_NOERRNO
+-#define PSEUDO_NOERRNO(name, syscall_name, args) \
+- ENTRY(name) \
+- DO_CALL (SYS_ify(syscall_name));
+-
+-#undef PSEUDO_END_NOERRNO
+-#define PSEUDO_END_NOERRNO(name) .endp C_SYMBOL_NAME(name);
+-
+-#undef PSEUDO_ERRVAL
+-#define PSEUDO_ERRVAL(name, syscall_name, args) \
+- ENTRY(name) \
+- DO_CALL (SYS_ify(syscall_name)); \
+- cmp.eq p6,p0=-1,r10; \
+-(p6) mov r10=r8;
+-
+-
+-#undef PSEUDO_END_ERRVAL
+-#define PSEUDO_END_ERRVAL(name) .endp C_SYMBOL_NAME(name);
+-
+-#undef END
+-#define END(name) \
+- .size C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ; \
+- .endp C_SYMBOL_NAME(name)
+-
+-#define ret br.ret.sptk.few b0
+-#define ret_NOERRNO ret
+-#define ret_ERRVAL ret
+-
+-#endif /* not __ASSEMBLER__ */
+-
+-#endif /* linux/ia64/sysdep.h */
+diff -Nur uClibc-0.9.33.2/libc/string/memmove.c uClibc-git/libc/string/memmove.c
+--- uClibc-0.9.33.2/libc/string/memmove.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/memmove.c 2014-02-03 12:32:56.000000000 +0100
+@@ -34,5 +34,5 @@
+ }
+
+ #ifndef WANT_WIDE
+-libc_hidden_def(Wmemmove)
++libc_hidden_def(memmove)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/string/metag/Makefile uClibc-git/libc/string/metag/Makefile
+--- uClibc-0.9.33.2/libc/string/metag/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,13 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++top_srcdir:=../../../
++top_builddir:=../../../
++all: objs
++include $(top_builddir)Rules.mak
++include ../Makefile.in
++include $(top_srcdir)Makerules
+diff -Nur uClibc-0.9.33.2/libc/string/metag/memchr.S uClibc-git/libc/string/metag/memchr.S
+--- uClibc-0.9.33.2/libc/string/metag/memchr.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/memchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,156 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++!
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++ .text
++ .global _memchr
++ .type _memchr,function
++! D0Ar6 src
++! D0Ar2 c
++! D1Ar3 n
++_memchr:
++ CMP D1Ar3, #0
++ BEQ $Lexit_fail
++ !! convert c to unsigned char
++ AND D0Ar2,D0Ar2,#0xff
++ MOV D0Ar6, D1Ar1
++ MOV D1Ar5, D0Ar6
++ !! test alignment
++ AND D1Ar5, D1Ar5, #7
++ CMP D1Ar5, #0
++ BNZ $Lunaligned_loop
++ !! length must be greater than or equal to 8 for aligned loop
++ CMP D1Ar3, #8
++ BGE $Laligned_setup
++$Lunaligned_loop:
++ !! get 1 char from s
++ GETB D0Re0, [D0Ar6++]
++ !! increase alignment counter
++ ADD D1Ar5, D1Ar5, #1
++ !! decrement n
++ SUB D1Ar3, D1Ar3, #1
++ !! exit if we have a match
++ CMP D0Re0, D0Ar2
++ BZ $Lexit_success1
++ !! exit if we have hit the end of the string
++ CMP D1Ar3, #0
++ BZ $Lexit_fail
++ !! fall through if the buffer is aligned now
++ CMP D1Ar5, #8
++ BNE $Lunaligned_loop
++ !! fall through if there is more than 8 bytes left
++ CMP D1Ar3, #8
++ BLT $Lunaligned_loop
++$Laligned_setup:
++ !! fill the c into 4 bytes
++ MOV D0Ar4, D0Ar2
++ LSL D0Ar4, D0Ar4, #8
++ ADD D0Ar4, D0Ar4, D0Ar2
++ LSL D0Ar4, D0Ar4, #8
++ ADD D0Ar4, D0Ar4, D0Ar2
++ LSL D0Ar4, D0Ar4, #8
++ ADD D0Ar4, D0Ar4, D0Ar2
++ !! divide n by 8
++ MOV D1Ar5, D1Ar3
++ LSR D1Ar5, D1Ar5, #3
++$Laligned_loop:
++ !! get 8 chars from s
++ GETL D0Re0, D1Re0, [D0Ar6++]
++ !! decrement loop counter
++ SUB D1Ar5, D1Ar5, #1
++ !! test first 4 chars
++ XOR D0Re0, D0Re0, D0Ar4
++ !! test second 4 chars
++ MOV D0Ar2, D1Re0
++ XOR D1Re0, D0Ar2, D0Ar4
++ !! check for matches in the first 4 chars
++ MOV D0Ar2, D0Re0
++ ADDT D0Re0, D0Re0, #HI(0xfefefeff)
++ ADD D0Re0, D0Re0, #LO(0xfefefeff)
++ XOR D0Ar2, D0Ar2, #-1
++ AND D0Re0, D0Re0, D0Ar2
++ ANDMT D0Re0, D0Re0, #HI(0x80808080)
++ ANDMB D0Re0, D0Re0, #LO(0x80808080)
++ CMP D0Re0, #0
++ BNZ $Lmatch_word1
++ !! check for matches in the second 4 chars
++ MOV D1Ar1, D1Re0
++ ADDT D1Re0, D1Re0, #HI(0xfefefeff)
++ ADD D1Re0, D1Re0, #LO(0xfefefeff)
++ XOR D1Ar1, D1Ar1, #-1
++ AND D1Re0, D1Re0, D1Ar1
++ ANDMT D1Re0, D1Re0, #HI(0x80808080)
++ ANDMB D1Re0, D1Re0, #LO(0x80808080)
++ CMP D1Re0, #0
++ BNZ $Lmatch_word2
++ !! check if we have reached the end of the buffer
++ CMP D1Ar5, #0
++ BNE $Laligned_loop
++ !! exit if there are no chars left to check
++ AND D1Ar3, D1Ar3, #7
++ CMP D1Ar3, #0
++ BZ $Lexit_fail
++ !! recover c
++ AND D0Ar2, D0Ar4, #0xff
++$Lbyte_loop:
++ !! get 1 char from s
++ GETB D0Re0, [D0Ar6++]
++ !! decrement n
++ SUB D1Ar3, D1Ar3, #1
++ !! exit if we have a match
++ CMP D0Re0, D0Ar2
++ BZ $Lexit_success1
++ !! fall through if we have run out of chars
++ CMP D1Ar3, #0
++ BNE $Lbyte_loop
++
++$Lexit_fail:
++ MOV D0Re0, #0
++ B $Lend
++
++$Lmatch_word1:
++ !! move the match word into D1Re0
++ MOV D1Re0, D0Re0
++ !! roll back the buffer pointer by 4 chars
++ SUB D0Ar6, D0Ar6, #4
++$Lmatch_word2:
++ !! roll back the buffer pointer by 4 chars
++ SUB D0Ar6, D0Ar6, #4
++ !! exit if lowest byte is 0
++ MOV D1Ar1, D1Re0
++ AND D1Ar1, D1Ar1, #0xff
++ CMP D1Ar1, #0
++ BNE $Lexit_success2
++ !! advance buffer pointer to the next char
++ ADD D0Ar6, D0Ar6, #1
++ !! shift in the next lowest byte
++ LSR D1Re0, D1Re0, #8
++ !! exit if lowest byte is 0
++ MOV D1Ar1, D1Re0
++ AND D1Ar1, D1Ar1, #0xff
++ CMP D1Ar1, #0
++ BNE $Lexit_success2
++ !! advance buffer pointer to the next char
++ ADD D0Ar6, D0Ar6, #1
++ !! shift in the next lowest byte
++ LSR D1Re0, D1Re0, #8
++ !! exit if lowest byte is 0
++ MOV D1Ar1, D1Re0
++ AND D1Ar1, D1Ar1, #0xff
++ CMP D1Ar1, #0
++ BNE $Lexit_success2
++ !! the match must be in the last byte, exit
++ ADD D0Ar6, D0Ar6, #1
++ B $Lexit_success2
++
++$Lexit_success1:
++ SUB D0Ar6, D0Ar6, #1
++$Lexit_success2:
++ !! return the buffer pointer
++ MOV D0Re0, D0Ar6
++$Lend:
++ MOV PC, D1RtP
++
++ .size _memchr,.-_memchr
++
++libc_hidden_def(memchr)
+diff -Nur uClibc-0.9.33.2/libc/string/metag/memcpy.S uClibc-git/libc/string/metag/memcpy.S
+--- uClibc-0.9.33.2/libc/string/metag/memcpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,189 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++ .text
++ .global _memcpy
++ .type _memcpy,function
++! D1Ar1 dst
++! D0Ar2 src
++! D1Ar3 cnt
++! D0Re0 dst
++_memcpy:
++ CMP D1Ar3, #16
++ MOV A1.2, D0Ar2 ! source pointer
++ MOV A0.2, D1Ar1 ! destination pointer
++ MOV A0.3, D1Ar1 ! for return value
++! If there are less than 16 bytes to copy use the byte copy loop
++ BGE $Llong_copy
++
++$Lbyte_copy:
++! Simply copy a byte at a time
++ SUBS TXRPT, D1Ar3, #1
++ BLT $Lend
++$Lloop_byte:
++ GETB D1Re0, [A1.2++]
++ SETB [A0.2++], D1Re0
++ BR $Lloop_byte
++
++$Lend:
++! Finally set return value and return
++ MOV D0Re0, A0.3
++ MOV PC, D1RtP
++
++$Llong_copy:
++ ANDS D1Ar5, D1Ar1, #7 ! test destination alignment
++ BZ $Laligned_dst
++
++! The destination address is not 8 byte aligned. We will copy bytes from
++! the source to the destination until the remaining data has an 8 byte
++! destination address alignment (i.e we should never copy more than 7
++! bytes here).
++$Lalign_dst:
++ GETB D0Re0, [A1.2++]
++ ADD D1Ar5, D1Ar5, #1 ! dest is aligned when D1Ar5 reaches #8
++ SUB D1Ar3, D1Ar3, #1 ! decrement count of remaining bytes
++ SETB [A0.2++], D0Re0
++ CMP D1Ar5, #8
++ BNE $Lalign_dst
++
++! We have at least (16 - 7) = 9 bytes to copy - calculate the number of 8 byte
++! blocks, then jump to the unaligned copy loop or fall through to the aligned
++! copy loop as appropriate.
++$Laligned_dst:
++ MOV D0Ar4, A1.2
++ LSR D1Ar5, D1Ar3, #3 ! D1Ar5 = number of 8 byte blocks
++ ANDS D0Ar4, D0Ar4, #7 ! test source alignment
++ BNZ $Lunaligned_copy ! if unaligned, use unaligned copy loop
++
++! Both source and destination are 8 byte aligned - the easy case.
++$Laligned_copy:
++ LSRS D1Ar5, D1Ar3, #5 ! D1Ar5 = number of 32 byte blocks
++ BZ $Lbyte_copy
++ SUB TXRPT, D1Ar5, #1
++
++$Laligned_32:
++ GETL D0Re0, D1Re0, [A1.2++]
++ GETL D0Ar6, D1Ar5, [A1.2++]
++ SETL [A0.2++], D0Re0, D1Re0
++ SETL [A0.2++], D0Ar6, D1Ar5
++ GETL D0Re0, D1Re0, [A1.2++]
++ GETL D0Ar6, D1Ar5, [A1.2++]
++ SETL [A0.2++], D0Re0, D1Re0
++ SETL [A0.2++], D0Ar6, D1Ar5
++ BR $Laligned_32
++
++! If there are any remaining bytes use the byte copy loop, otherwise we are done
++ ANDS D1Ar3, D1Ar3, #0x1f
++ BNZ $Lbyte_copy
++ B $Lend
++
++! The destination is 8 byte aligned but the source is not, and there are 8
++! or more bytes to be copied.
++$Lunaligned_copy:
++! Adjust the source pointer (A1.2) to the 8 byte boundary before its
++! current value
++ MOV D0Ar4, A1.2
++ MOV D0Ar6, A1.2
++ ANDMB D0Ar4, D0Ar4, #0xfff8
++ MOV A1.2, D0Ar4
++! Save the number of bytes of mis-alignment in D0Ar4 for use later
++ SUBS D0Ar6, D0Ar6, D0Ar4
++ MOV D0Ar4, D0Ar6
++! if there is no mis-alignment after all, use the aligned copy loop
++ BZ $Laligned_copy
++
++! prefetch 8 bytes
++ GETL D0Re0, D1Re0, [A1.2]
++
++ SUB TXRPT, D1Ar5, #1
++
++! There are 3 mis-alignment cases to be considered. Less than 4 bytes, exactly
++! 4 bytes, and more than 4 bytes.
++ CMP D0Ar6, #4
++ BLT $Lunaligned_1_2_3 ! use 1-3 byte mis-alignment loop
++ BZ $Lunaligned_4 ! use 4 byte mis-alignment loop
++
++! The mis-alignment is more than 4 bytes
++$Lunaligned_5_6_7:
++ SUB D0Ar6, D0Ar6, #4
++! Calculate the bit offsets required for the shift operations necesssary
++! to align the data.
++! D0Ar6 = bit offset, D1Ar5 = (32 - bit offset)
++ MULW D0Ar6, D0Ar6, #8
++ MOV D1Ar5, #32
++ SUB D1Ar5, D1Ar5, D0Ar6
++! Move data 4 bytes before we enter the main loop
++ MOV D0Re0, D1Re0
++
++$Lloop_5_6_7:
++ GETL D0Ar2, D1Ar1, [++A1.2]
++! form 64-bit data in D0Re0, D1Re0
++ LSR D0Re0, D0Re0, D0Ar6
++ MOV D1Re0, D0Ar2
++ LSL D1Re0, D1Re0, D1Ar5
++ ADD D0Re0, D0Re0, D1Re0
++
++ LSR D0Ar2, D0Ar2, D0Ar6
++ LSL D1Re0, D1Ar1, D1Ar5
++ ADD D1Re0, D1Re0, D0Ar2
++
++ SETL [A0.2++], D0Re0, D1Re0
++ MOV D0Re0, D1Ar1
++ BR $Lloop_5_6_7
++
++ B $Lunaligned_end
++
++$Lunaligned_1_2_3:
++! Calculate the bit offsets required for the shift operations necesssary
++! to align the data.
++! D0Ar6 = bit offset, D1Ar5 = (32 - bit offset)
++ MULW D0Ar6, D0Ar6, #8
++ MOV D1Ar5, #32
++ SUB D1Ar5, D1Ar5, D0Ar6
++
++$Lloop_1_2_3:
++! form 64-bit data in D0Re0,D1Re0
++ LSR D0Re0, D0Re0, D0Ar6
++ LSL D1Ar1, D1Re0, D1Ar5
++ ADD D0Re0, D0Re0, D1Ar1
++ MOV D0Ar2, D1Re0
++ LSR D0FrT, D0Ar2, D0Ar6
++ GETL D0Ar2, D1Ar1, [++A1.2]
++
++ MOV D1Re0, D0Ar2
++ LSL D1Re0, D1Re0, D1Ar5
++ ADD D1Re0, D1Re0, D0FrT
++
++ SETL [A0.2++], D0Re0, D1Re0
++ MOV D0Re0, D0Ar2
++ MOV D1Re0, D1Ar1
++ BR $Lloop_1_2_3
++
++ B $Lunaligned_end
++
++! The 4 byte mis-alignment case - this does not require any shifting, just a
++! shuffling of registers.
++$Lunaligned_4:
++ MOV D0Re0, D1Re0
++$Lloop_4:
++ GETL D0Ar2, D1Ar1, [++A1.2]
++ MOV D1Re0, D0Ar2
++ SETL [A0.2++], D0Re0, D1Re0
++ MOV D0Re0, D1Ar1
++ BR $Lloop_4
++
++$Lunaligned_end:
++! If there are no remaining bytes to copy, we are done.
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lend
++! Re-adjust the source pointer (A1.2) back to the actual (unaligned) byte
++! address of the remaining bytes, and fall through to the byte copy loop.
++ MOV D0Ar6, A1.2
++ ADD D1Ar5, D0Ar4, D0Ar6
++ MOV A1.2, D1Ar5
++ B $Lbyte_copy
++
++ .size _memcpy,.-_memcpy
++
++libc_hidden_def(memcpy)
+diff -Nur uClibc-0.9.33.2/libc/string/metag/memmove.S uClibc-git/libc/string/metag/memmove.S
+--- uClibc-0.9.33.2/libc/string/metag/memmove.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/memmove.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,350 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++ .text
++ .global _memmove
++ .type _memmove,function
++! D1Ar1 dst
++! D0Ar2 src
++! D1Ar3 cnt
++! D0Re0 dst
++_memmove:
++ CMP D1Ar3, #0
++ MOV D0Re0, D1Ar1
++ BZ $LEND2
++ MSETL [A0StP], D0.5, D0.6, D0.7
++ MOV D1Ar5, D0Ar2
++ CMP D1Ar1, D1Ar5
++ BLT $Lforwards_copy
++ SUB D0Ar4, D1Ar1, D1Ar3
++ ADD D0Ar4, D0Ar4, #1
++ CMP D0Ar2, D0Ar4
++ BLT $Lforwards_copy
++ ! should copy backwards
++ MOV D1Re0, D0Ar2
++ ! adjust pointer to the end of mem
++ ADD D0Ar2, D1Re0, D1Ar3
++ ADD D1Ar1, D1Ar1, D1Ar3
++
++ MOV A1.2, D0Ar2
++ MOV A0.2, D1Ar1
++ CMP D1Ar3, #8
++ BLT $Lbbyte_loop
++
++ MOV D0Ar4, D0Ar2
++ MOV D1Ar5, D1Ar1
++
++ ! test 8 byte alignment
++ ANDS D1Ar5, D1Ar5, #7
++ BNE $Lbdest_unaligned
++
++ ANDS D0Ar4, D0Ar4, #7
++ BNE $Lbsrc_unaligned
++
++ LSR D1Ar5, D1Ar3, #3
++
++$Lbaligned_loop:
++ GETL D0Re0, D1Re0, [--A1.2]
++ SETL [--A0.2], D0Re0, D1Re0
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lbaligned_loop
++
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lbbyte_loop_exit
++$Lbbyte_loop:
++ GETB D1Re0, [--A1.2]
++ SETB [--A0.2], D1Re0
++ SUBS D1Ar3, D1Ar3, #1
++ BNE $Lbbyte_loop
++$Lbbyte_loop_exit:
++ MOV D0Re0, A0.2
++$LEND:
++ SUB A0.2, A0StP, #24
++ MGETL D0.5, D0.6, D0.7, [A0.2]
++ SUB A0StP, A0StP, #24
++$LEND2:
++ MOV PC, D1RtP
++
++$Lbdest_unaligned:
++ GETB D0Re0, [--A1.2]
++ SETB [--A0.2], D0Re0
++ SUBS D1Ar5, D1Ar5, #1
++ SUB D1Ar3, D1Ar3, #1
++ BNE $Lbdest_unaligned
++ CMP D1Ar3, #8
++ BLT $Lbbyte_loop
++$Lbsrc_unaligned:
++ LSR D1Ar5, D1Ar3, #3
++ ! adjust A1.2
++ MOV D0Ar4, A1.2
++ ! save original address
++ MOV D0Ar6, A1.2
++
++ ADD D0Ar4, D0Ar4, #7
++ ANDMB D0Ar4, D0Ar4, #0xfff8
++ ! new address is the 8-byte aligned one above the original
++ MOV A1.2, D0Ar4
++
++ ! A0.2 dst 64-bit is aligned
++ ! measure the gap size
++ SUB D0Ar6, D0Ar4, D0Ar6
++ MOVS D0Ar4, D0Ar6
++ ! keep this information for the later adjustment
++ ! both aligned
++ BZ $Lbaligned_loop
++
++ ! prefetch
++ GETL D0Re0, D1Re0, [--A1.2]
++
++ CMP D0Ar6, #4
++ BLT $Lbunaligned_1_2_3
++ ! 32-bit aligned
++ BZ $Lbaligned_4
++
++ SUB D0Ar6, D0Ar6, #4
++ ! D1.6 stores the gap size in bits
++ MULW D1.6, D0Ar6, #8
++ MOV D0.6, #32
++ ! D0.6 stores the complement of the gap size
++ SUB D0.6, D0.6, D1.6
++
++$Lbunaligned_5_6_7:
++ GETL D0.7, D1.7, [--A1.2]
++ ! form 64-bit data in D0Re0, D1Re0
++ MOV D1Re0, D0Re0
++ ! D1Re0 << gap-size
++ LSL D1Re0, D1Re0, D1.6
++ MOV D0Re0, D1.7
++ ! D0Re0 >> complement
++ LSR D0Re0, D0Re0, D0.6
++ MOV D1.5, D0Re0
++ ! combine the both
++ ADD D1Re0, D1Re0, D1.5
++
++ MOV D1.5, D1.7
++ LSL D1.5, D1.5, D1.6
++ MOV D0Re0, D0.7
++ LSR D0Re0, D0Re0, D0.6
++ MOV D0.5, D1.5
++ ADD D0Re0, D0Re0, D0.5
++
++ SETL [--A0.2], D0Re0, D1Re0
++ MOV D0Re0, D0.7
++ MOV D1Re0, D1.7
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lbunaligned_5_6_7
++
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lbbyte_loop_exit
++ ! Adjust A1.2
++ ! A1.2 <- A1.2 +8 - gapsize
++ ADD A1.2, A1.2, #8
++ SUB A1.2, A1.2, D0Ar4
++ B $Lbbyte_loop
++
++$Lbunaligned_1_2_3:
++ MULW D1.6, D0Ar6, #8
++ MOV D0.6, #32
++ SUB D0.6, D0.6, D1.6
++
++$Lbunaligned_1_2_3_loop:
++ GETL D0.7, D1.7, [--A1.2]
++ ! form 64-bit data in D0Re0, D1Re0
++ LSL D1Re0, D1Re0, D1.6
++ ! save D0Re0 for later use
++ MOV D0.5, D0Re0
++ LSR D0Re0, D0Re0, D0.6
++ MOV D1.5, D0Re0
++ ADD D1Re0, D1Re0, D1.5
++
++ ! orignal data in D0Re0
++ MOV D1.5, D0.5
++ LSL D1.5, D1.5, D1.6
++ MOV D0Re0, D1.7
++ LSR D0Re0, D0Re0, D0.6
++ MOV D0.5, D1.5
++ ADD D0Re0, D0Re0, D0.5
++
++ SETL [--A0.2], D0Re0, D1Re0
++ MOV D0Re0, D0.7
++ MOV D1Re0, D1.7
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lbunaligned_1_2_3_loop
++
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lbbyte_loop_exit
++ ! Adjust A1.2
++ ADD A1.2, A1.2, #8
++ SUB A1.2, A1.2, D0Ar4
++ B $Lbbyte_loop
++
++$Lbaligned_4:
++ GETL D0.7, D1.7, [--A1.2]
++ MOV D1Re0, D0Re0
++ MOV D0Re0, D1.7
++ SETL [--A0.2], D0Re0, D1Re0
++ MOV D0Re0, D0.7
++ MOV D1Re0, D1.7
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lbaligned_4
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lbbyte_loop_exit
++ ! Adjust A1.2
++ ADD A1.2, A1.2, #8
++ SUB A1.2, A1.2, D0Ar4
++ B $Lbbyte_loop
++
++$Lforwards_copy:
++ MOV A1.2, D0Ar2
++ MOV A0.2, D1Ar1
++ CMP D1Ar3, #8
++ BLT $Lfbyte_loop
++
++ MOV D0Ar4, D0Ar2
++ MOV D1Ar5, D1Ar1
++
++ ANDS D1Ar5, D1Ar5, #7
++ BNE $Lfdest_unaligned
++
++ ANDS D0Ar4, D0Ar4, #7
++ BNE $Lfsrc_unaligned
++
++ LSR D1Ar5, D1Ar3, #3
++
++$Lfaligned_loop:
++ GETL D0Re0, D1Re0, [A1.2++]
++ SUBS D1Ar5, D1Ar5, #1
++ SETL [A0.2++], D0Re0, D1Re0
++ BNE $Lfaligned_loop
++
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lfbyte_loop_exit
++$Lfbyte_loop:
++ GETB D1Re0, [A1.2++]
++ SETB [A0.2++], D1Re0
++ SUBS D1Ar3, D1Ar3, #1
++ BNE $Lfbyte_loop
++$Lfbyte_loop_exit:
++ MOV D0Re0, D1Ar1
++ B $LEND
++
++$Lfdest_unaligned:
++ GETB D0Re0, [A1.2++]
++ ADD D1Ar5, D1Ar5, #1
++ SUB D1Ar3, D1Ar3, #1
++ SETB [A0.2++], D0Re0
++ CMP D1Ar5, #8
++ BNE $Lfdest_unaligned
++ CMP D1Ar3, #8
++ BLT $Lfbyte_loop
++$Lfsrc_unaligned:
++ ! adjust A1.2
++ LSR D1Ar5, D1Ar3, #3
++
++ MOV D0Ar4, A1.2
++ MOV D0Ar6, A1.2
++ ANDMB D0Ar4, D0Ar4, #0xfff8
++ MOV A1.2, D0Ar4
++
++ ! A0.2 dst 64-bit is aligned
++ SUB D0Ar6, D0Ar6, D0Ar4
++ ! keep the information for the later adjustment
++ MOVS D0Ar4, D0Ar6
++
++ ! both aligned
++ BZ $Lfaligned_loop
++
++ ! prefetch
++ GETL D0Re0, D1Re0, [A1.2]
++
++ CMP D0Ar6, #4
++ BLT $Lfunaligned_1_2_3
++ BZ $Lfaligned_4
++
++ SUB D0Ar6, D0Ar6, #4
++ MULW D0.6, D0Ar6, #8
++ MOV D1.6, #32
++ SUB D1.6, D1.6, D0.6
++
++$Lfunaligned_5_6_7:
++ GETL D0.7, D1.7, [++A1.2]
++ ! form 64-bit data in D0Re0, D1Re0
++ MOV D0Re0, D1Re0
++ LSR D0Re0, D0Re0, D0.6
++ MOV D1Re0, D0.7
++ LSL D1Re0, D1Re0, D1.6
++ MOV D0.5, D1Re0
++ ADD D0Re0, D0Re0, D0.5
++
++ MOV D0.5, D0.7
++ LSR D0.5, D0.5, D0.6
++ MOV D1Re0, D1.7
++ LSL D1Re0, D1Re0, D1.6
++ MOV D1.5, D0.5
++ ADD D1Re0, D1Re0, D1.5
++
++ SETL [A0.2++], D0Re0, D1Re0
++ MOV D0Re0, D0.7
++ MOV D1Re0, D1.7
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lfunaligned_5_6_7
++
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lfbyte_loop_exit
++ ! Adjust A1.2
++ ADD A1.2, A1.2, D0Ar4
++ B $Lfbyte_loop
++
++$Lfunaligned_1_2_3:
++ MULW D0.6, D0Ar6, #8
++ MOV D1.6, #32
++ SUB D1.6, D1.6, D0.6
++
++$Lfunaligned_1_2_3_loop:
++ GETL D0.7, D1.7, [++A1.2]
++ ! form 64-bit data in D0Re0, D1Re0
++ LSR D0Re0, D0Re0, D0.6
++ MOV D1.5, D1Re0
++ LSL D1Re0, D1Re0, D1.6
++ MOV D0.5, D1Re0
++ ADD D0Re0, D0Re0, D0.5
++
++ MOV D0.5, D1.5
++ LSR D0.5, D0.5, D0.6
++ MOV D1Re0, D0.7
++ LSL D1Re0, D1Re0, D1.6
++ MOV D1.5, D0.5
++ ADD D1Re0, D1Re0, D1.5
++
++ SETL [A0.2++], D0Re0, D1Re0
++ MOV D0Re0, D0.7
++ MOV D1Re0, D1.7
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lfunaligned_1_2_3_loop
++
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lfbyte_loop_exit
++ ! Adjust A1.2
++ ADD A1.2, A1.2, D0Ar4
++ B $Lfbyte_loop
++
++$Lfaligned_4:
++ GETL D0.7, D1.7, [++A1.2]
++ MOV D0Re0, D1Re0
++ MOV D1Re0, D0.7
++ SETL [A0.2++], D0Re0, D1Re0
++ MOV D0Re0, D0.7
++ MOV D1Re0, D1.7
++ SUBS D1Ar5, D1Ar5, #1
++ BNE $Lfaligned_4
++ ANDS D1Ar3, D1Ar3, #7
++ BZ $Lfbyte_loop_exit
++ ! Adjust A1.2
++ ADD A1.2, A1.2, D0Ar4
++ B $Lfbyte_loop
++
++ .size _memmove,.-_memmove
++
++libc_hidden_def(memmove)
+diff -Nur uClibc-0.9.33.2/libc/string/metag/memset.S uClibc-git/libc/string/metag/memset.S
+--- uClibc-0.9.33.2/libc/string/metag/memset.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,90 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++ .text
++ .global _memset
++ .type _memset,function
++! D1Ar1 dst
++! D0Ar2 c
++! D1Ar3 cnt
++! D0Re0 dst
++_memset:
++ AND D0Ar2,D0Ar2,#0xFF ! Ensure a byte input value
++ MULW D0Ar2,D0Ar2,#0x0101 ! Duplicate byte value into 0-15
++ ANDS D0Ar4,D1Ar1,#7 ! Extract bottom LSBs of dst
++ LSL D0Re0,D0Ar2,#16 ! Duplicate byte value into 16-31
++ ADD A0.2,D0Ar2,D0Re0 ! Duplicate byte value into 4 (A0.2)
++ MOV D0Re0,D1Ar1 ! Return dst
++ BZ $LLongStub ! if start address is aligned
++ ! start address is not aligned on an 8 byte boundary, so we
++ ! need the number of bytes up to the next 8 byte address
++ ! boundary, or the length of the string if less than 8, in D1Ar5
++ MOV D0Ar2,#8 ! Need 8 - N in D1Ar5 ...
++ SUB D1Ar5,D0Ar2,D0Ar4 ! ... subtract N
++ CMP D1Ar3,D1Ar5
++ MOVMI D1Ar5,D1Ar3
++ B $LByteStub ! dst is mis-aligned, do $LByteStub
++
++!
++! Preamble to LongLoop which generates 4*8 bytes per interation (5 cycles)
++!
++$LLongStub:
++ LSRS D0Ar2,D1Ar3,#5
++ AND D1Ar3,D1Ar3,#0x1F
++ MOV A1.2,A0.2
++ BEQ $LLongishStub
++ SUB TXRPT,D0Ar2,#1
++ CMP D1Ar3,#0
++$LLongLoop:
++ SETL [D1Ar1++],A0.2,A1.2
++ SETL [D1Ar1++],A0.2,A1.2
++ SETL [D1Ar1++],A0.2,A1.2
++ SETL [D1Ar1++],A0.2,A1.2
++ BR $LLongLoop
++ BZ $Lexit
++!
++! Preamble to LongishLoop which generates 1*8 bytes per interation (2 cycles)
++!
++$LLongishStub:
++ LSRS D0Ar2,D1Ar3,#3
++ AND D1Ar3,D1Ar3,#0x7
++ MOV D1Ar5,D1Ar3
++ BEQ $LByteStub
++ SUB TXRPT,D0Ar2,#1
++ CMP D1Ar3,#0
++$LLongishLoop:
++ SETL [D1Ar1++],A0.2,A1.2
++ BR $LLongishLoop
++ BZ $Lexit
++!
++! This does a byte structured burst of up to 7 bytes
++!
++! D1Ar1 should point to the location required
++! D1Ar3 should be the remaining total byte count
++! D1Ar5 should be burst size (<= D1Ar3)
++!
++$LByteStub:
++ SUBS D1Ar3,D1Ar3,D1Ar5 ! Reduce count
++ ADD D1Ar1,D1Ar1,D1Ar5 ! Advance pointer to end of area
++ MULW D1Ar5,D1Ar5,#4 ! Scale to (1*4), (2*4), (3*4)
++ SUB D1Ar5,D1Ar5,#(8*4) ! Rebase to -(7*4), -(6*4), -(5*4), ...
++ MOV A1.2,D1Ar5
++ SUB PC,CPC1,A1.2 ! Jump into table below
++ SETB [D1Ar1+#(-7)],A0.2
++ SETB [D1Ar1+#(-6)],A0.2
++ SETB [D1Ar1+#(-5)],A0.2
++ SETB [D1Ar1+#(-4)],A0.2
++ SETB [D1Ar1+#(-3)],A0.2
++ SETB [D1Ar1+#(-2)],A0.2
++ SETB [D1Ar1+#(-1)],A0.2
++!
++! Return if all data has been output, otherwise do $LLongStub
++!
++ BNZ $LLongStub
++$Lexit:
++ MOV PC,D1RtP
++ .size _memset,.-_memset
++
++libc_hidden_def(memset)
+diff -Nur uClibc-0.9.33.2/libc/string/metag/strchr.S uClibc-git/libc/string/metag/strchr.S
+--- uClibc-0.9.33.2/libc/string/metag/strchr.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/strchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,167 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++#include <features.h>
++
++ .text
++ .global _strchr
++ .type _strchr, function
++! D1Ar1 src
++! D0Ar2 c
++_strchr:
++ AND D0Ar2,D0Ar2,#0xff ! Drop all but 8 bits of c
++ MOV D1Ar5, D1Ar1 ! Copy src to D1Ar5
++ AND D1Ar5, D1Ar5, #7 ! Check 64 bit alignment
++ CMP D1Ar5, #0
++ BZ $Laligned64bit ! Jump to 64 bit aligned strchr
++$Lalign64bit:
++ GETB D0Re0, [D1Ar1++] ! Get the next character
++ ADD D1Ar5, D1Ar5, #1 ! Increment alignment counter
++ CMP D0Re0, D0Ar2 ! Is the char c
++ BZ $Lcharatprevious ! If so exit returning position
++ CMP D0Re0, #0 ! End of string?
++ BZ $Lnotfound ! If so exit
++ CMP D1Ar5, #8 ! Are we aligned 64bit yet?
++ BNZ $Lalign64bit ! If not keep aligning
++$Laligned64bit: ! src is 64bit aligned
++ MOV D0Ar4, D0Ar2 ! put c into D0Ar4
++ LSL D0Ar4, D0Ar4, #8 ! Shift it up
++ ADD D0Ar4, D0Ar4, D0Ar2 ! another c
++ LSL D0Ar4, D0Ar4, #8 ! shift
++ ADD D0Ar4, D0Ar4, D0Ar2 ! another c
++ LSL D0Ar4, D0Ar4, #8 ! shift
++ ADD D0Ar4, D0Ar4, D0Ar2 ! 4 copies of c
++$Lcheck8bytes:
++ GETL D0Re0, D1Re0, [D1Ar1++] ! grab 16 bytes
++ MOV A0.3, D0Re0 ! save for later use
++ ! first word
++ ! check for \0
++ MOV D0Ar2, D0Re0 ! D0Ar2 is a scratch now
++ ADDT D0Re0, D0Re0, #HI(0xfefefeff) ! Do 4 1-byte compares
++ ADD D0Re0, D0Re0, #LO(0xfefefeff)
++ XOR D0Ar2, D0Ar2, #-1
++ AND D0Re0, D0Re0, D0Ar2
++ ANDMT D0Re0, D0Re0, #HI(0x80808080)
++ ANDMB D0Re0, D0Re0, #LO(0x80808080)
++ CMP D0Re0, #0
++ BNZ $Lnullinword1 ! found \0 (or c if c==\0)
++
++ ! Check for c
++ MOV D0Re0, A0.3 ! restore the first word
++ XOR D0Re0, D0Re0, D0Ar4
++ MOV D0Ar2, D0Re0 ! DO 4 1-byte compares
++ ADDT D0Re0, D0Re0, #HI(0xfefefeff)
++ ADD D0Re0, D0Re0, #LO(0xfefefeff)
++ XOR D0Ar2, D0Ar2, #-1
++ AND D0Re0, D0Re0, D0Ar2
++ ANDMT D0Re0, D0Re0, #HI(0x80808080)
++ ANDMB D0Re0, D0Re0, #LO(0x80808080)
++ CMP D0Re0, #0
++ BNZ $Lcharinword1 ! found c
++
++ ! second word
++ ! check for \0
++ MOV A0.3, D1Re0 ! save for later use
++ MOV D1Ar3, D1Re0
++ ADDT D1Re0, D1Re0, #HI(0xfefefeff) ! Do 4 1-byte compares
++ ADD D1Re0, D1Re0, #LO(0xfefefeff)
++ XOR D1Ar3, D1Ar3, #-1
++ AND D1Re0, D1Re0, D1Ar3
++ ANDMT D1Re0, D1Re0, #HI(0x80808080)
++ ANDMB D1Re0, D1Re0, #LO(0x80808080)
++ CMP D1Re0, #0
++ BNZ $Lnullinword2 ! Found \0 (or c if c==\0)
++
++ MOV D0.4, A0.3 ! restore the second word
++ XOR D1Re0, D0.4, D0Ar4 ! test c
++
++ MOV D1Ar3, D1Re0
++ ADDT D1Re0, D1Re0, #HI(0xfefefeff) ! Do 4 1-byte compares
++ ADD D1Re0, D1Re0, #LO(0xfefefeff)
++ XOR D1Ar3, D1Ar3, #-1
++ AND D1Re0, D1Re0, D1Ar3
++ ANDMT D1Re0, D1Re0, #HI(0x80808080)
++ ANDMB D1Re0, D1Re0, #LO(0x80808080)
++ CMP D1Re0, #0
++ BNZ $Lcharinword2 ! found c
++
++ B $Lcheck8bytes ! Keep checking
++
++$Lnullinword1: ! found \0 somewhere, check for c too
++ SUB D1Ar1, D1Ar1, #4
++$Lnullinword2:
++ SUB D1Ar1, D1Ar1, #4
++ AND D0Ar2, D0Ar4, #0xff ! restore c
++ MOV D0Re0, A0.3 ! restore the word
++ MOV D0.4, D0Re0 ! for shifting later
++ AND D0Re0, D0Re0, #0xff ! take first byte of word
++ CMP D0Re0, D0Ar2
++ BZ $Lcharatcurrent ! found c
++ CMP D0Re0, #0!
++ BZ $Lnotfound ! found \0
++
++ ADD D1Ar1, D1Ar1, #1
++ LSR D0.4, D0.4, #8
++ MOV D0Re0, D0.4
++ AND D0Re0, D0Re0, #0xff ! take second byte of word
++ CMP D0Re0, D0Ar2
++ BZ $Lcharatcurrent ! found c
++ CMP D0Re0, #0
++ BZ $Lnotfound ! found \0
++
++ ADD D1Ar1, D1Ar1, #1
++ LSR D0.4, D0.4, #8
++ MOV D0Re0, D0.4
++ AND D0Re0, D0Re0, #0xff ! take third byte of word
++ CMP D0Re0, D0Ar2
++ BZ $Lcharatcurrent ! found c
++ CMP D0Re0, #0
++ BZ $Lnotfound ! found \0
++
++ ADD D1Ar1, D1Ar1, #1 ! move to 4th byte
++ CMP D0Ar2, #0 ! If c was \0
++ BZ $Lcharatcurrent ! c has been found!
++
++$Lnotfound:
++ MOV D0Re0, #0 ! End of string c not found
++ B $Lend
++
++$Lcharinword1: ! found c in first word
++ MOV D1Re0, D0Re0
++ SUB D1Ar1, D1Ar1, #4
++$Lcharinword2: ! found c in second word
++ SUB D1Ar1, D1Ar1, #4
++
++ AND D0Re0, D1Re0, #0xff ! First byte
++ CMP D0Re0, #0 ! Test c (zero indicates c due
++ ! to the 4 1-byte compare code)
++ BNE $Lcharatcurrent
++ ADD D1Ar1, D1Ar1, #1
++
++ LSR D1Re0, D1Re0, #8
++ AND D0Re0, D1Re0, #0xff ! Second byte
++ CMP D0Re0, #0 ! Test c (indicated by zero)
++ BNE $Lcharatcurrent
++ ADD D1Ar1, D1Ar1, #1
++
++ LSR D1Re0, D1Re0, #8
++ AND D0Re0, D1Re0, #0xff ! Third byte
++ CMP D0Re0, #0 ! Test c (indicated by zero)
++ BNE $Lcharatcurrent
++ ADD D1Ar1, D1Ar1, #1 ! Must be the fourth byte
++ B $Lcharatcurrent
++
++$Lcharatprevious:
++ SUB D1Ar1, D1Ar1, #1 ! Fix-up pointer
++$Lcharatcurrent:
++ MOV D0Re0, D1Ar1 ! Return the string pointer
++$Lend:
++ MOV PC, D1RtP
++ .size _strchr,.-_strchr
++
++libc_hidden_def(strchr)
++#ifdef __UCLIBC_SUSV3_LEGACY__
++strong_alias(strchr,index)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/metag/strcmp.S uClibc-git/libc/string/metag/strcmp.S
+--- uClibc-0.9.33.2/libc/string/metag/strcmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,65 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++#include <features.h>
++
++ .text
++ .global _strcmp
++ .type _strcmp,function
++!D1Ar1 s1
++!D0Ar2 s2
++_strcmp:
++ TST D1Ar1,#3
++ TSTZ D0Ar2,#3
++ MOVT D1Re0,#0x0101
++ ADD D1Re0,D1Re0,#0x0101
++ BNZ $Lstrcmp_slow
++ GETD D1Ar3,[D1Ar1+#4++] ! Load 32-bits from s1
++ GETD D1Ar5,[D0Ar2+#4++] ! Load 32-bits from s2
++ LSL D0FrT,D1Re0,#7 ! D0FrT = 0x80808080
++$Lstrcmp4_loop:
++ SUB D0Re0,D1Ar3,D1Re0 ! D1Re0 = 0x01010101
++ MOV D0Ar6,D1Ar3
++ SUBS D0Ar4,D1Ar3,D1Ar5 ! Calculate difference
++ XOR D0Ar6,D0Ar6,#-1
++ GETD D1Ar3,[D1Ar1+#4++] ! Load 32-bits from s1
++ AND D0Re0,D0Re0,D0Ar6
++ ANDSZ D0Ar6,D0Re0,D0FrT ! D0FrT = 0x80808080
++ GETD D1Ar5,[D0Ar2+#4++] ! Load 32-bits from s2
++ BZ $Lstrcmp4_loop
++ AND D0Ar6, D0Re0, D0FrT ! D0FrT = 0x80808080
++!
++! Either they are different or they both contain a NULL + junk
++!
++$Lstrcmp4_end:
++ LSLS D0Re0,D0Ar4,#24 ! Was Byte[0] the same?
++ LSLSZ D0Ar2,D0Ar6,#24 ! Yes: AND they where not zero?
++ LSLSZ D0Re0,D0Ar4,#16 ! Yes: Was Byte[1] the same?
++ LSLSZ D0Ar2,D0Ar6,#16 ! Yes: AND they where not zero?
++ LSLSZ D0Re0,D0Ar4,#8 ! Tes: Was Byte[2] the same?
++ LSLSZ D0Ar2,D0Ar6,#8 ! Yes: AND they where not zero?
++ MOVZ D0Re0,D0Ar4 ! Yes: Must by Byte[3] thats the result
++ ASR D0Re0,D0Re0,#24 ! Sign extend result to integer
++ MOV PC,D1RtP
++!
++! Misaligned case, byte at a time
++!
++$Lstrcmp_slow:
++ GETB D1Ar3,[D1Ar1++] ! Load char from s1
++ GETB D1Ar5,[D0Ar2++] ! Load char from s2
++ CMP D1Ar3,#1 ! Null -> C and NZ, rest -> NC (\1->Z)
++ CMPNC D1Ar3,D1Ar5 ! NOT Null: Same -> Z, else -> NZ
++ BZ $Lstrcmp_slow ! NOT Null and Same: Loop
++ SUB D0Re0,D1Ar3,D1Ar5 ! Generate result
++ MOV PC,D1RtP
++
++ .size _strcmp,.-_strcmp
++
++
++libc_hidden_def(strcmp)
++#ifndef __UCLIBC_HAS_LOCALE__
++strong_alias(strcmp,strcoll)
++libc_hidden_def(strcoll)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/metag/strcpy.S uClibc-git/libc/string/metag/strcpy.S
+--- uClibc-0.9.33.2/libc/string/metag/strcpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/string/metag/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,94 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++ .text
++ .global _strcpy
++ .type _strcpy,function
++! D1Ar1 dst
++! D0Ar2 src
++
++_strcpy:
++ MOV A1.2, D1Ar1
++
++ ! test 4 byte alignment of src
++ ANDS D0Ar4, D0Ar2, #3
++ BNZ $Lbyteloop
++
++ ! test 4 byte alignment of dest
++ ANDS D1Ar5, D1Ar1, #3
++ BNZ $Lbyteloop
++
++ ! load mask values for aligned loops
++ MOVT D1Ar3, #HI(0xfefefeff)
++ ADD D1Ar3, D1Ar3, #LO(0xfefefeff)
++ MOVT D0FrT, #HI(0x80808080)
++ ADD D0FrT, D0FrT, #LO(0x80808080)
++
++ ! test 8 byte alignment of src
++ ANDS D0Ar4, D0Ar2, #7
++ BNZ $Lwordloop
++
++ ! test 8 byte alignment of dest
++ ANDS D1Ar5, D1Ar1, #7
++ BNZ $Lwordloop
++
++$L8byteloop:
++ GETL D1Ar5, D0Ar6, [D0Ar2++]
++ MOV D1Re0, D1Ar5
++ MOV D0Re0, D1Ar5
++ ADD D1Re0, D1Re0, D1Ar3
++ XOR D0Re0, D0Re0, #-1
++ AND D1Re0, D1Re0, D0Re0
++ ANDS D1Re0, D1Re0, D0FrT
++ BNZ $Lnullfound ! NULL in first word
++
++ MOV D1Re0, D0Ar6
++ MOV D0Re0, D0Ar6
++ ADD D1Re0, D1Re0, D1Ar3
++ XOR D0Re0, D0Re0, #-1
++ AND D1Re0, D1Re0, D0Re0
++ ANDS D1Re0, D1Re0, D0FrT
++ BNZ $Lnullfound2 ! NULL in the second word
++
++ SETL [A1.2++], D1Ar5, D0Ar6
++ B $L8byteloop
++
++$Lwordloop:
++ GETD D0Ar6, [D0Ar2++]
++ MOV D1Re0, D0Ar6
++ MOV D0Re0, D0Ar6
++ ADD D1Re0, D1Re0, D1Ar3
++ XOR D0Re0, D0Re0, #-1
++ AND D1Re0, D1Re0, D0Re0
++ ANDS D1Re0, D1Re0, D0FrT
++ MOV D1Ar5, D0Ar6
++ BNZ $Lnullfound
++ SETD [A1.2++], D0Ar6
++ B $Lwordloop
++
++$Lnullfound2:
++ SETD [A1.2++], D1Ar5
++ MOV D1Ar5, D0Ar6
++
++$Lnullfound:
++ SETB [A1.2++], D1Ar5
++ ANDS D0Ar6, D1Ar5, #0xff
++ LSR D1Ar5, D1Ar5, #8
++ BNZ $Lnullfound
++ B $Lend
++
++$Lbyteloop:
++ GETB D0Ar6, [D0Ar2++]
++ SETB [A1.2++], D0Ar6
++ CMP D0Ar6, #0
++ BNZ $Lbyteloop
++
++$Lend:
++ MOV D0Re0, D1Ar1
++ MOV PC, D1RtP
++
++ .size _strcpy,.-_strcpy
++
++libc_hidden_def(strcpy)
+diff -Nur uClibc-0.9.33.2/libc/string/microblaze/memcpy.S uClibc-git/libc/string/microblaze/memcpy.S
+--- uClibc-0.9.33.2/libc/string/microblaze/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/microblaze/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -34,6 +34,14 @@
+ .type memcpy, @function
+ .ent memcpy
+
++#ifdef __MICROBLAZEEL__
++# define BSLLI bsrli
++# define BSRLI bslli
++#else
++# define BSLLI bslli
++# define BSRLI bsrli
++#endif
++
+ memcpy:
+ fast_memcpy_ascending:
+ /* move d to return register as value of function */
+@@ -85,48 +93,48 @@
+ beqi r9, a_block_u2 /* t1 was 2 => 2 byte offset */
+
+ a_block_u3:
+- bslli r11, r11, 24 /* h = h << 24 */
++ BSLLI r11, r11, 24 /* h = h << 24 */
+ a_bu3_loop:
+ lwi r12, r8, 4 /* v = *(as + 4) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 0 /* *(d + 0) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 8 /* v = *(as + 8) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 4 /* *(d + 4) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 12 /* v = *(as + 12) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 8 /* *(d + 8) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 16 /* v = *(as + 16) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 12 /* *(d + 12) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 20 /* v = *(as + 20) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 16 /* *(d + 16) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 24 /* v = *(as + 24) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 20 /* *(d + 20) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 28 /* v = *(as + 28) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 24 /* *(d + 24) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ lwi r12, r8, 32 /* v = *(as + 32) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 28 /* *(d + 28) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ addi r8, r8, 32 /* as = as + 32 */
+ addi r4, r4, -32 /* n = n - 32 */
+ bneid r4, a_bu3_loop /* while (n) loop */
+@@ -134,48 +142,48 @@
+ bri a_block_done
+
+ a_block_u1:
+- bslli r11, r11, 8 /* h = h << 8 */
++ BSLLI r11, r11, 8 /* h = h << 8 */
+ a_bu1_loop:
+ lwi r12, r8, 4 /* v = *(as + 4) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 0 /* *(d + 0) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 8 /* v = *(as + 8) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 4 /* *(d + 4) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 12 /* v = *(as + 12) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 8 /* *(d + 8) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 16 /* v = *(as + 16) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 12 /* *(d + 12) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 20 /* v = *(as + 20) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 16 /* *(d + 16) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 24 /* v = *(as + 24) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 20 /* *(d + 20) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 28 /* v = *(as + 28) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 24 /* *(d + 24) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ lwi r12, r8, 32 /* v = *(as + 32) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 28 /* *(d + 28) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ addi r8, r8, 32 /* as = as + 32 */
+ addi r4, r4, -32 /* n = n - 32 */
+ bneid r4, a_bu1_loop /* while (n) loop */
+@@ -183,48 +191,48 @@
+ bri a_block_done
+
+ a_block_u2:
+- bslli r11, r11, 16 /* h = h << 16 */
++ BSLLI r11, r11, 16 /* h = h << 16 */
+ a_bu2_loop:
+ lwi r12, r8, 4 /* v = *(as + 4) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 0 /* *(d + 0) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 8 /* v = *(as + 8) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 4 /* *(d + 4) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 12 /* v = *(as + 12) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 8 /* *(d + 8) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 16 /* v = *(as + 16) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 12 /* *(d + 12) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 20 /* v = *(as + 20) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 16 /* *(d + 16) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 24 /* v = *(as + 24) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 20 /* *(d + 20) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 28 /* v = *(as + 28) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 24 /* *(d + 24) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ lwi r12, r8, 32 /* v = *(as + 32) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 28 /* *(d + 28) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ addi r8, r8, 32 /* as = as + 32 */
+ addi r4, r4, -32 /* n = n - 32 */
+ bneid r4, a_bu2_loop /* while (n) loop */
+@@ -263,13 +271,13 @@
+ beqi r9, a_word_u2 /* t1 was 2 => 2 byte offset */
+
+ a_word_u3:
+- bslli r11, r11, 24 /* h = h << 24 */
++ BSLLI r11, r11, 24 /* h = h << 24 */
+ a_wu3_loop:
+ lw r12, r8, r10 /* v = *(as + offset) */
+- bsrli r9, r12, 8 /* t1 = v >> 8 */
++ BSRLI r9, r12, 8 /* t1 = v >> 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ sw r9, r5, r10 /* *(d + offset) = t1 */
+- bslli r11, r12, 24 /* h = v << 24 */
++ BSLLI r11, r12, 24 /* h = v << 24 */
+ addi r4, r4,-4 /* n = n - 4 */
+ bneid r4, a_wu3_loop /* while (n) loop */
+ addi r10, r10, 4 /* offset = ofset + 4 (IN DELAY SLOT) */
+@@ -277,13 +285,13 @@
+ bri a_word_done
+
+ a_word_u1:
+- bslli r11, r11, 8 /* h = h << 8 */
++ BSLLI r11, r11, 8 /* h = h << 8 */
+ a_wu1_loop:
+ lw r12, r8, r10 /* v = *(as + offset) */
+- bsrli r9, r12, 24 /* t1 = v >> 24 */
++ BSRLI r9, r12, 24 /* t1 = v >> 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ sw r9, r5, r10 /* *(d + offset) = t1 */
+- bslli r11, r12, 8 /* h = v << 8 */
++ BSLLI r11, r12, 8 /* h = v << 8 */
+ addi r4, r4,-4 /* n = n - 4 */
+ bneid r4, a_wu1_loop /* while (n) loop */
+ addi r10, r10, 4 /* offset = ofset + 4 (IN DELAY SLOT) */
+@@ -291,13 +299,13 @@
+ bri a_word_done
+
+ a_word_u2:
+- bslli r11, r11, 16 /* h = h << 16 */
++ BSLLI r11, r11, 16 /* h = h << 16 */
+ a_wu2_loop:
+ lw r12, r8, r10 /* v = *(as + offset) */
+- bsrli r9, r12, 16 /* t1 = v >> 16 */
++ BSRLI r9, r12, 16 /* t1 = v >> 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ sw r9, r5, r10 /* *(d + offset) = t1 */
+- bslli r11, r12, 16 /* h = v << 16 */
++ BSLLI r11, r12, 16 /* h = v << 16 */
+ addi r4, r4,-4 /* n = n - 4 */
+ bneid r4, a_wu2_loop /* while (n) loop */
+ addi r10, r10, 4 /* offset = ofset + 4 (IN DELAY SLOT) */
+diff -Nur uClibc-0.9.33.2/libc/string/microblaze/memmove.S uClibc-git/libc/string/microblaze/memmove.S
+--- uClibc-0.9.33.2/libc/string/microblaze/memmove.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/microblaze/memmove.S 2014-02-03 12:32:56.000000000 +0100
+@@ -33,6 +33,14 @@
+ .type memmove, @function
+ .ent memmove
+
++#ifdef __MICROBLAZEEL__
++# define BSLLI bsrli
++# define BSRLI bslli
++#else
++# define BSLLI bslli
++# define BSRLI bsrli
++#endif
++
+ memmove:
+ cmpu r4, r5, r6 /* n = s - d */
+ bgei r4, HIDDEN_JUMPTARGET(memcpy)
+@@ -112,150 +120,150 @@
+ beqi r9,d_block_u2 /* t1 was 2 => 2 byte offset */
+
+ d_block_u3:
+- bsrli r11, r11, 8 /* h = h >> 8 */
++ BSRLI r11, r11, 8 /* h = h >> 8 */
+ d_bu3_loop:
+ addi r8, r8, -32 /* as = as - 32 */
+ addi r5, r5, -32 /* d = d - 32 */
+ lwi r12, r8, 28 /* v = *(as + 28) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 28 /* *(d + 28) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 24 /* v = *(as + 24) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 24 /* *(d + 24) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 20 /* v = *(as + 20) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 20 /* *(d + 20) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 16 /* v = *(as + 16) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 16 /* *(d + 16) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 12 /* v = *(as + 12) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 12 /* *(d + 112) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 8 /* v = *(as + 8) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 8 /* *(d + 8) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 4 /* v = *(as + 4) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 4 /* *(d + 4) = t1 */
+- bsrli r11, r12, 8 /* h = v >> 8 */
++ BSRLI r11, r12, 8 /* h = v >> 8 */
+ lwi r12, r8, 0 /* v = *(as + 0) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 0 /* *(d + 0) = t1 */
+ addi r4, r4, -32 /* n = n - 32 */
+ bneid r4, d_bu3_loop /* while (n) loop */
+- bsrli r11, r12, 8 /* h = v >> 8 (IN DELAY SLOT) */
++ BSRLI r11, r12, 8 /* h = v >> 8 (IN DELAY SLOT) */
+ bri d_block_done
+
+ d_block_u1:
+- bsrli r11, r11, 24 /* h = h >> 24 */
++ BSRLI r11, r11, 24 /* h = h >> 24 */
+ d_bu1_loop:
+ addi r8, r8, -32 /* as = as - 32 */
+ addi r5, r5, -32 /* d = d - 32 */
+ lwi r12, r8, 28 /* v = *(as + 28) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 28 /* *(d + 28) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 24 /* v = *(as + 24) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 24 /* *(d + 24) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 20 /* v = *(as + 20) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 20 /* *(d + 20) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 16 /* v = *(as + 16) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 16 /* *(d + 16) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 12 /* v = *(as + 12) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 12 /* *(d + 112) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 8 /* v = *(as + 8) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 8 /* *(d + 8) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 4 /* v = *(as + 4) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 4 /* *(d + 4) = t1 */
+- bsrli r11, r12, 24 /* h = v >> 24 */
++ BSRLI r11, r12, 24 /* h = v >> 24 */
+ lwi r12, r8, 0 /* v = *(as + 0) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 0 /* *(d + 0) = t1 */
+ addi r4, r4, -32 /* n = n - 32 */
+ bneid r4, d_bu1_loop /* while (n) loop */
+- bsrli r11, r12, 24 /* h = v >> 24 (IN DELAY SLOT) */
++ BSRLI r11, r12, 24 /* h = v >> 24 (IN DELAY SLOT) */
+ bri d_block_done
+
+ d_block_u2:
+- bsrli r11, r11, 16 /* h = h >> 16 */
++ BSRLI r11, r11, 16 /* h = h >> 16 */
+ d_bu2_loop:
+ addi r8, r8, -32 /* as = as - 32 */
+ addi r5, r5, -32 /* d = d - 32 */
+ lwi r12, r8, 28 /* v = *(as + 28) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 28 /* *(d + 28) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 24 /* v = *(as + 24) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 24 /* *(d + 24) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 20 /* v = *(as + 20) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 20 /* *(d + 20) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 16 /* v = *(as + 16) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 16 /* *(d + 16) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 12 /* v = *(as + 12) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 12 /* *(d + 112) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 8 /* v = *(as + 8) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 8 /* *(d + 8) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 4 /* v = *(as + 4) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 4 /* *(d + 4) = t1 */
+- bsrli r11, r12, 16 /* h = v >> 16 */
++ BSRLI r11, r12, 16 /* h = v >> 16 */
+ lwi r12, r8, 0 /* v = *(as + 0) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ swi r9, r5, 0 /* *(d + 0) = t1 */
+ addi r4, r4, -32 /* n = n - 32 */
+ bneid r4, d_bu2_loop /* while (n) loop */
+- bsrli r11, r12, 16 /* h = v >> 16 (IN DELAY SLOT) */
++ BSRLI r11, r12, 16 /* h = v >> 16 (IN DELAY SLOT) */
+
+ d_block_done:
+ addi r4, r0, 4 /* n = 4 */
+@@ -290,41 +298,41 @@
+ beqi r9,d_word_u2 /* t1 was 2 => 2 byte offset */
+
+ d_word_u3:
+- bsrli r11, r11, 8 /* h = h >> 8 */
++ BSRLI r11, r11, 8 /* h = h >> 8 */
+ d_wu3_loop:
+ addi r4, r4,-4 /* n = n - 4 */
+ lw r12, r8, r4 /* v = *(as + n) */
+- bslli r9, r12, 24 /* t1 = v << 24 */
++ BSLLI r9, r12, 24 /* t1 = v << 24 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ sw r9, r5, r4 /* *(d + n) = t1 */
+ bneid r4, d_wu3_loop /* while (n) loop */
+- bsrli r11, r12, 8 /* h = v >> 8 (IN DELAY SLOT) */
++ BSRLI r11, r12, 8 /* h = v >> 8 (IN DELAY SLOT) */
+
+ bri d_word_done
+
+ d_word_u1:
+- bsrli r11, r11, 24 /* h = h >> 24 */
++ BSRLI r11, r11, 24 /* h = h >> 24 */
+ d_wu1_loop:
+ addi r4, r4,-4 /* n = n - 4 */
+ lw r12, r8, r4 /* v = *(as + n) */
+- bslli r9, r12, 8 /* t1 = v << 8 */
++ BSLLI r9, r12, 8 /* t1 = v << 8 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ sw r9, r5, r4 /* *(d + n) = t1 */
+ bneid r4, d_wu1_loop /* while (n) loop */
+- bsrli r11, r12, 24 /* h = v >> 24 (IN DELAY SLOT) */
++ BSRLI r11, r12, 24 /* h = v >> 24 (IN DELAY SLOT) */
+
+ bri d_word_done
+
+ d_word_u2:
+- bsrli r11, r11, 16 /* h = h >> 16 */
++ BSRLI r11, r11, 16 /* h = h >> 16 */
+ d_wu2_loop:
+ addi r4, r4,-4 /* n = n - 4 */
+ lw r12, r8, r4 /* v = *(as + n) */
+- bslli r9, r12, 16 /* t1 = v << 16 */
++ BSLLI r9, r12, 16 /* t1 = v << 16 */
+ or r9, r11, r9 /* t1 = h | t1 */
+ sw r9, r5, r4 /* *(d + n) = t1 */
+ bneid r4, d_wu2_loop /* while (n) loop */
+- bsrli r11, r12, 16 /* h = v >> 16 (IN DELAY SLOT) */
++ BSRLI r11, r12, 16 /* h = v >> 16 (IN DELAY SLOT) */
+
+ d_word_done:
+
+diff -Nur uClibc-0.9.33.2/libc/string/mips/memcpy.S uClibc-git/libc/string/mips/memcpy.S
+--- uClibc-0.9.33.2/libc/string/mips/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/mips/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+-/*#include <sysdep.h>*/
++#include <sysdep.h>
+ #include <endian.h>
+-#include "sysdep.h"
+
+ /* void *memcpy(void *s1, const void *s2, size_t n); */
+
+diff -Nur uClibc-0.9.33.2/libc/string/mips/memset.S uClibc-git/libc/string/mips/memset.S
+--- uClibc-0.9.33.2/libc/string/mips/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/mips/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+-/*#include <sysdep.h>*/
++#include <sysdep.h>
+ #include <endian.h>
+-#include "sysdep.h"
+
+ /* void *memset(void *s, int c, size_t n). */
+
+diff -Nur uClibc-0.9.33.2/libc/string/mips/sysdep.h uClibc-git/libc/string/mips/sysdep.h
+--- uClibc-0.9.33.2/libc/string/mips/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/mips/sysdep.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,45 +0,0 @@
+-/* Adapted from glibc's sysdeps/unix/mips/sysdep.h */
+-
+-/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
+- Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Brendan Kehoe (brendan@zen.org).
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifdef __ASSEMBLER__
+-
+-#include <sgidefs.h>
+-#include <sys/regdef.h>
+-
+-#define ENTRY(name) \
+- .globl name; \
+- .align 2; \
+- .ent name,0; \
+- name/* use a comment rather than ## to workaround bug in gcc-3.4.x */:
+-
+-#undef END
+-#define END(function) \
+- .end function; \
+- .size function,.-function
+-
+-#if _MIPS_SIM == _MIPS_SIM_ABI32 || _MIPS_SIM == _MIPS_SIM_ABIO64
+-# define L(label) $L ## label
+-#else
+-# define L(label) .L ## label
+-#endif
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/memchr.S uClibc-git/libc/string/sparc/sparc32/memchr.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/memchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/memchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -24,9 +24,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .text
+ .align 4
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/memcpy.S uClibc-git/libc/string/sparc/sparc32/memcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/memset.S uClibc-git/libc/string/sparc/sparc32/memset.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/stpcpy.S uClibc-git/libc/string/sparc/sparc32/stpcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/stpcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/stpcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test
+ to find out if any byte in xword could be zero. This is fast, but
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/strcat.S uClibc-git/libc/string/sparc/sparc32/strcat.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/strcat.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/strcat.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test
+ to find out if any byte in xword could be zero. This is fast, but
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/strchr.S uClibc-git/libc/string/sparc/sparc32/strchr.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/strchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/strchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test
+ to find out if any byte in xword could be zero. This is fast, but
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/strcmp.S uClibc-git/libc/string/sparc/sparc32/strcmp.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/strcmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test
+ to find out if any byte in xword could be zero. This is fast, but
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/strcpy.S uClibc-git/libc/string/sparc/sparc32/strcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/strcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test
+ to find out if any byte in xword could be zero. This is fast, but
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc32/strlen.S uClibc-git/libc/string/sparc/sparc32/strlen.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc32/strlen.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc32/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test
+ to find out if any byte in xword could be zero. This is fast, but
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/memchr.S uClibc-git/libc/string/sparc/sparc64/memchr.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/memchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/memchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -24,9 +24,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <asm/asi.h>
+ #ifndef XCC
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/memcpy.S uClibc-git/libc/string/sparc/sparc64/memcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <asm/asi.h>
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/memset.S uClibc-git/libc/string/sparc/sparc64/memset.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <asm/asi.h>
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/sparcv9b/memcpy.S uClibc-git/libc/string/sparc/sparc64/sparcv9b/memcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/sparcv9b/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/sparcv9b/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/stpcpy.S uClibc-git/libc/string/sparc/sparc64/stpcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/stpcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/stpcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <asm/asi.h>
+ #ifndef XCC
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/strcat.S uClibc-git/libc/string/sparc/sparc64/strcat.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/strcat.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/strcat.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <asm/asi.h>
+ #ifndef XCC
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/strchr.S uClibc-git/libc/string/sparc/sparc64/strchr.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/strchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/strchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <asm/asi.h>
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/strcmp.S uClibc-git/libc/string/sparc/sparc64/strcmp.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/strcmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <asm/asi.h>
+ #ifndef XCC
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/strcpy.S uClibc-git/libc/string/sparc/sparc64/strcpy.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/strcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <asm/asi.h>
+ #ifndef XCC
+diff -Nur uClibc-0.9.33.2/libc/string/sparc/sparc64/strlen.S uClibc-git/libc/string/sparc/sparc64/strlen.S
+--- uClibc-0.9.33.2/libc/string/sparc/sparc64/strlen.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/sparc/sparc64/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <asm/asi.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/strchrnul.c uClibc-git/libc/string/strchrnul.c
+--- uClibc-0.9.33.2/libc/string/strchrnul.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/strchrnul.c 2014-02-03 12:32:56.000000000 +0100
+@@ -22,6 +22,6 @@
+ return (Wchar *) s;
+ }
+ # ifndef WANT_WIDE
+-libc_hidden_def(Wstrchrnul)
++libc_hidden_def(strchrnul)
+ # endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/string/strverscmp.c uClibc-git/libc/string/strverscmp.c
+--- uClibc-0.9.33.2/libc/string/strverscmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/strverscmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,9 +19,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <ctype.h>
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/memcpy.S uClibc-git/libc/string/x86_64/memcpy.S
+--- uClibc-0.9.33.2/libc/string/x86_64/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/memset.S uClibc-git/libc/string/x86_64/memset.S
+--- uClibc-0.9.33.2/libc/string/x86_64/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strcat.S uClibc-git/libc/string/x86_64/strcat.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strcat.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strcat.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strchr.S uClibc-git/libc/string/x86_64/strchr.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strchr.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strchr.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strcmp.S uClibc-git/libc/string/x86_64/strcmp.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strcmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strcpy.S uClibc-git/libc/string/x86_64/strcpy.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strcspn.S uClibc-git/libc/string/x86_64/strcspn.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strcspn.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strcspn.S 2014-02-03 12:32:56.000000000 +0100
+@@ -19,9 +19,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strlen.S uClibc-git/libc/string/x86_64/strlen.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strlen.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/x86_64/strspn.S uClibc-git/libc/string/x86_64/strspn.S
+--- uClibc-0.9.33.2/libc/string/x86_64/strspn.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/x86_64/strspn.S 2014-02-03 12:32:56.000000000 +0100
+@@ -19,9 +19,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "_glibc_inc.h"
+
+diff -Nur uClibc-0.9.33.2/libc/string/__xpg_basename.c uClibc-git/libc/string/__xpg_basename.c
+--- uClibc-0.9.33.2/libc/string/__xpg_basename.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/__xpg_basename.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include "_string.h"
+ #include <libgen.h>
+
+ char *__xpg_basename(register char *path)
+@@ -34,3 +33,7 @@
+
+ return first;
+ }
++#ifndef __USE_GNU
++# undef basename
++weak_alias(__xpg_basename,basename)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/__xpg_strerror_r.c uClibc-git/libc/string/__xpg_strerror_r.c
+--- uClibc-0.9.33.2/libc/string/__xpg_strerror_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/__xpg_strerror_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-/* Make sure we get proper strerror_r() prototype */
+-#define strerror_r _hidestrerror_r
++/* get rid of REDIRECT */
++#define strerror_r __hide_strerror_r
+
+ #include <features.h>
+ #include <errno.h>
+@@ -15,7 +15,6 @@
+
+ #undef strerror_r
+
+-
+ #ifdef __UCLIBC_HAS_ERRNO_MESSAGES__
+
+ extern const char _string_syserrmsgs[] attribute_hidden;
+@@ -273,4 +272,6 @@
+
+ #endif /* __UCLIBC_HAS_ERRNO_MESSAGES__ */
+ libc_hidden_def(__xpg_strerror_r)
+-weak_alias(__xpg_strerror_r, strerror_r)
++#if defined __USE_XOPEN2K && !defined __USE_GNU
++strong_alias(__xpg_strerror_r,strerror_r)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/string/xtensa/memcpy.S uClibc-git/libc/string/xtensa/memcpy.S
+--- uClibc-0.9.33.2/libc/string/xtensa/memcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/xtensa/memcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "../../sysdeps/linux/xtensa/sysdep.h"
++#include <sysdep.h>
+ #include <bits/xtensa-config.h>
+
+ .macro src_b r, w0, w1
+diff -Nur uClibc-0.9.33.2/libc/string/xtensa/memset.S uClibc-git/libc/string/xtensa/memset.S
+--- uClibc-0.9.33.2/libc/string/xtensa/memset.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/xtensa/memset.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "../../sysdeps/linux/xtensa/sysdep.h"
++#include <sysdep.h>
+ #include <bits/xtensa-config.h>
+
+ /* Do not use .literal_position in the ENTRY macro. */
+diff -Nur uClibc-0.9.33.2/libc/string/xtensa/strcmp.S uClibc-git/libc/string/xtensa/strcmp.S
+--- uClibc-0.9.33.2/libc/string/xtensa/strcmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/xtensa/strcmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "../../sysdeps/linux/xtensa/sysdep.h"
++#include <sysdep.h>
+ #include <bits/xtensa-config.h>
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/string/xtensa/strcpy.S uClibc-git/libc/string/xtensa/strcpy.S
+--- uClibc-0.9.33.2/libc/string/xtensa/strcpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/xtensa/strcpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "../../sysdeps/linux/xtensa/sysdep.h"
++#include <sysdep.h>
+ #include <bits/xtensa-config.h>
+
+ #ifdef __XTENSA_EB__
+diff -Nur uClibc-0.9.33.2/libc/string/xtensa/strlen.S uClibc-git/libc/string/xtensa/strlen.S
+--- uClibc-0.9.33.2/libc/string/xtensa/strlen.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/xtensa/strlen.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "../../sysdeps/linux/xtensa/sysdep.h"
++#include <sysdep.h>
+ #include <bits/xtensa-config.h>
+
+ #ifdef __XTENSA_EB__
+diff -Nur uClibc-0.9.33.2/libc/string/xtensa/strncpy.S uClibc-git/libc/string/xtensa/strncpy.S
+--- uClibc-0.9.33.2/libc/string/xtensa/strncpy.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/string/xtensa/strncpy.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include "../../sysdeps/linux/xtensa/sysdep.h"
++#include <sysdep.h>
+ #include <bits/xtensa-config.h>
+
+ #ifdef __XTENSA_EB__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/atomic.h uClibc-git/libc/sysdeps/linux/alpha/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdint.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/dirent.h uClibc-git/libc/sysdeps/linux/alpha/bits/dirent.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/dirent.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/dirent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_DIRENT_H
+ #define _BITS_DIRENT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/eventfd.h uClibc-git/libc/sysdeps/linux/alpha/bits/eventfd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/eventfd.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/eventfd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_EVENTFD_H
++# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
++#endif
++
++/* Flags for eventfd. */
++enum
++ {
++ EFD_SEMAPHORE = 000000001,
++#define EFD_SEMAPHORE EFD_SEMAPHORE
++ EFD_CLOEXEC = 010000000,
++#define EFD_CLOEXEC EFD_CLOEXEC
++ EFD_NONBLOCK = 000000004
++#define EFD_NONBLOCK EFD_NONBLOCK
++ };
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/fcntl.h uClibc-git/libc/sysdeps/linux/alpha/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/fenv.h uClibc-git/libc/sysdeps/linux/alpha/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -107,15 +106,15 @@
+ /* If the default argument is used we use this value. Note that due to
+ architecture-specified page mappings, no user-space pointer will ever
+ have its two high bits set. Co-opt one. */
+-#define FE_DFL_ENV ((__const fenv_t *) 0x8800000000000000UL)
++#define FE_DFL_ENV ((const fenv_t *) 0x8800000000000000UL)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where none of the exceptions are masked. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) 0x880000000000003eUL)
++# define FE_NOMASK_ENV ((const fenv_t *) 0x880000000000003eUL)
+
+ /* Floating-point environment with (processor-dependent) non-IEEE floating
+ point. In this case, mapping denormals to zero. */
+-# define FE_NONIEEE_ENV ((__const fenv_t *) 0x8800000000003000UL)
++# define FE_NONIEEE_ENV ((const fenv_t *) 0x8800000000003000UL)
+ #endif
+
+ /* The system calls to talk to the kernel's FP code. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/ioctls.h uClibc-git/libc/sysdeps/linux/alpha/bits/ioctls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/ioctls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/ioctls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IOCTL_H
+ # error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/ipc.h uClibc-git/libc/sysdeps/linux/alpha/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/kernel_sigaction.h uClibc-git/libc/sysdeps/linux/alpha/bits/kernel_sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/kernel_sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/kernel_sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -9,12 +9,4 @@
+ unsigned int sa_flags;
+ };
+
+-/* In uclibc, userspace struct sigaction is identical to
+- * "new" struct kernel_sigaction (one from the Linux 2.1.68 kernel).
+- * See sigaction.h
+- */
+-
+-extern int __syscall_rt_sigaction (int, const struct sigaction *,
+- struct sigaction *, size_t) attribute_hidden;
+-
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/alpha/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -33,6 +33,8 @@
+ typedef __kernel_uid_t __kernel_uid32_t;
+ typedef __kernel_gid_t __kernel_gid32_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ int val[2];
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/local_lim.h uClibc-git/libc/sysdeps/linux/alpha/bits/local_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/local_lim.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/local_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,91 @@
++/* Minimum guaranteed maximum values for system limits. Linux/Alpha version.
++ Copyright (C) 1993-1998,2000,2002,2003,2004 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ see <http://www.gnu.org/licenses/>. */
++
++/* The kernel header pollutes the namespace with the NR_OPEN symbol
++ and defines LINK_MAX although filesystems have different maxima. A
++ similar thing is true for OPEN_MAX: the limit can be changed at
++ runtime and therefore the macro must not be defined. Remove this
++ after including the header if necessary. */
++#ifndef NR_OPEN
++# define __undef_NR_OPEN
++#endif
++#ifndef LINK_MAX
++# define __undef_LINK_MAX
++#endif
++#ifndef OPEN_MAX
++# define __undef_OPEN_MAX
++#endif
++
++/* The kernel sources contain a file with all the needed information. */
++#include <linux/limits.h>
++
++/* Have to remove NR_OPEN? */
++#ifdef __undef_NR_OPEN
++# undef NR_OPEN
++# undef __undef_NR_OPEN
++#endif
++/* Have to remove LINK_MAX? */
++#ifdef __undef_LINK_MAX
++# undef LINK_MAX
++# undef __undef_LINK_MAX
++#endif
++/* Have to remove OPEN_MAX? */
++#ifdef __undef_OPEN_MAX
++# undef OPEN_MAX
++# undef __undef_OPEN_MAX
++#endif
++
++/* The number of data keys per process. */
++#define _POSIX_THREAD_KEYS_MAX 128
++/* This is the value this implementation supports. */
++#define PTHREAD_KEYS_MAX 1024
++
++/* Controlling the iterations of destructors for thread-specific data. */
++#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
++/* Number of iterations this implementation does. */
++#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
++
++/* The number of threads per process. */
++#define _POSIX_THREAD_THREADS_MAX 64
++/* We have no predefined limit on the number of threads. */
++#undef PTHREAD_THREADS_MAX
++
++/* Maximum amount by which a process can descrease its asynchronous I/O
++ priority level. */
++#define AIO_PRIO_DELTA_MAX 20
++
++/* Minimum size for a thread. We are free to choose a reasonable value. */
++#define PTHREAD_STACK_MIN 24576
++
++/* Maximum number of timer expiration overruns. */
++#define DELAYTIMER_MAX 2147483647
++
++/* Maximum tty name length. */
++#define TTY_NAME_MAX 32
++
++/* Maximum login name length. This is arbitrary. */
++#define LOGIN_NAME_MAX 256
++
++/* Maximum host name length. */
++#define HOST_NAME_MAX 64
++
++/* Maximum message queue priority level. */
++#define MQ_PRIO_MAX 32768
++
++/* Maximum value the semaphore can have. */
++#define SEM_VALUE_MAX (2147483647)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/mathdef.h uClibc-git/libc/sysdeps/linux/alpha/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/mathinline.h uClibc-git/libc/sysdeps/linux/alpha/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/mathinline.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/mman.h uClibc-git/libc/sysdeps/linux/alpha/bits/mman.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+@@ -71,7 +70,7 @@
+ # define MAP_NORESERVE 0x10000 /* Don't check for reservations. */
+ # define MAP_POPULATE 0x20000 /* Populate (prefault) pagetables. */
+ # define MAP_NONBLOCK 0x40000 /* Do not block on IO. */
+-# define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/msq.h uClibc-git/libc/sysdeps/linux/alpha/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/netdb.h uClibc-git/libc/sysdeps/linux/alpha/bits/netdb.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/netdb.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/netdb.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETDB_H
+ # error "Never include <bits/netdb.h> directly; use <netdb.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/resource.h uClibc-git/libc/sysdeps/linux/alpha/bits/resource.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/resource.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/resource.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_RESOURCE_H
+ # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sem.h uClibc-git/libc/sysdeps/linux/alpha/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/setjmp.h uClibc-git/libc/sysdeps/linux/alpha/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+@@ -55,33 +54,6 @@
+ * registers.
+ */
+
+-#if defined __USE_MISC || defined __ASSEMBLY__
+-# define JB_S0 0
+-# define JB_S1 1
+-# define JB_S2 2
+-# define JB_S3 3
+-# define JB_S4 4
+-# define JB_S5 5
+-# define JB_PC 6
+-# define JB_FP 7
+-# define JB_SP 8
+-# define JB_F2 9
+-# define JB_F3 10
+-# define JB_F4 11
+-# define JB_F5 12
+-# define JB_F6 13
+-# define JB_F7 14
+-# define JB_F8 15
+-# define JB_F9 16
+-#endif
+-
+-#ifndef __ASSEMBLY__
+ typedef long int __jmp_buf[17];
+
+-/* Test if longjmp to JMPBUF would unwind the frame containing a local
+- variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
+- ((void *)(_address) < (void *)((_jmpbuf)[JB_SP]))
+-#endif
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/shm.h uClibc-git/libc/sysdeps/linux/alpha/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sigaction.h uClibc-git/libc/sysdeps/linux/alpha/bits/sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/alpha/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT int _code, struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS _code,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/siginfo.h uClibc-git/libc/sysdeps/linux/alpha/bits/siginfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/siginfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/siginfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined __need_siginfo_t \
+ && !defined __need_sigevent_t
+@@ -258,7 +257,11 @@
+
+ /* Structure to transport application-defined values with signals. */
+ # define __SIGEV_MAX_SIZE 64
+-# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
++# if __WORDSIZE == 64
++# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
++# else
++# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
++# endif
+
+ typedef struct sigevent
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/signum.h uClibc-git/libc/sysdeps/linux/alpha/bits/signum.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/signum.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/signum.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef _SIGNAL_H
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sigstack.h uClibc-git/libc/sysdeps/linux/alpha/bits/sigstack.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/sigstack.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/sigstack.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include this file directly. Use <signal.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/socket_type.h uClibc-git/libc/sysdeps/linux/alpha/bits/socket_type.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/socket_type.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/socket_type.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,54 @@
++/* Define enum __socket_type for Linux/Alpha.
++ Copyright (C) 1991-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets. */
++enum __socket_type
++{
++ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
++ byte streams. */
++#define SOCK_STREAM SOCK_STREAM
++ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
++ of fixed maximum length. */
++#define SOCK_DGRAM SOCK_DGRAM
++ SOCK_RAW = 3, /* Raw protocol interface. */
++#define SOCK_RAW SOCK_RAW
++ SOCK_RDM = 4, /* Reliably-delivered messages. */
++#define SOCK_RDM SOCK_RDM
++ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
++ datagrams of fixed maximum length. */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
++#define SOCK_DCCP SOCK_DCCP
++ SOCK_PACKET = 10, /* Linux specific way of getting packets
++ at the dev level. For writing rarp and
++ other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++ /* Flags to be ORed into the type parameter of socket and socketpair. */
++
++ SOCK_CLOEXEC = 010000000, /* Atomically set close-on-exec flag for the
++ new descriptor(s). */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++ SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as
++ non-blocking. */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/alpha/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/statfs.h uClibc-git/libc/sysdeps/linux/alpha/bits/statfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/statfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/statfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STATFS_H
+ # error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/stat.h uClibc-git/libc/sysdeps/linux/alpha/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/syscalls.h uClibc-git/libc/sysdeps/linux/alpha/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SYSCALLS_H
+ #define _BITS_SYSCALLS_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/termios.h uClibc-git/libc/sysdeps/linux/alpha/bits/termios.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TERMIOS_H
+ # error "Never include <bits/termios.h> directly; use <termios.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/typesizes.h uClibc-git/libc/sysdeps/linux/alpha/bits/typesizes.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/typesizes.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #define __UCLIBC_SLIGHTLY_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/alpha/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/wordsize.h uClibc-git/libc/sysdeps/linux/alpha/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 64
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/brk.S uClibc-git/libc/sysdeps/linux/alpha/brk.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/brk.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/brk.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* __brk is a special syscall under Linux since it never returns an
+ error. Instead, the error condition is indicated by returning the old
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/clone.S uClibc-git/libc/sysdeps/linux/alpha/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/crt1.S uClibc-git/libc/sysdeps/linux/alpha/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -32,9 +32,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/regdef.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/divrem.h uClibc-git/libc/sysdeps/linux/alpha/divrem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/divrem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/divrem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The current Alpha chips don't provide hardware for integer
+ division. The C compiler expects the functions
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/fpu_control.h uClibc-git/libc/sysdeps/linux/alpha/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ALPHA_FPU_CONTROL_H
+ #define _ALPHA_FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/alpha/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/alpha/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,35 @@
++/* Private macros for accessing __jmp_buf contents. Alpha version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#define JB_S0 0
++#define JB_S1 1
++#define JB_S2 2
++#define JB_S3 3
++#define JB_S4 4
++#define JB_S5 5
++#define JB_PC 6
++#define JB_FP 7
++#define JB_SP 8
++#define JB_F2 9
++#define JB_F3 10
++#define JB_F4 11
++#define JB_F5 12
++#define JB_F6 13
++#define JB_F7 14
++#define JB_F8 15
++#define JB_F9 16
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/alpha/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/alpha/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
++ ((void *)(_address) < (void *)((_jmpbuf)[JB_SP]))
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/__longjmp.S uClibc-git/libc/sysdeps/linux/alpha/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,14 +12,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#define _SETJMP_H
+-#define __ASSEMBLY__
+-#include <bits/setjmp.h>
++#include <setjmp-offsets.h>
+
+ #define a0 $16
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/Makefile.arch uClibc-git/libc/sysdeps/linux/alpha/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,9 +5,9 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __syscall_error.c sigprocmask.c
++CSRC-y := __syscall_error.c sigprocmask.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S brk.S bsd-_setjmp.S bsd-setjmp.S clone.S \
+ divl.S divq.S pipe.S reml.S remq.S __syscall_rt_sigaction.S setjmp.S \
+ syscall.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/pipe.S uClibc-git/libc/sysdeps/linux/alpha/pipe.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/pipe.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/pipe.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/setjmp.S uClibc-git/libc/sysdeps/linux/alpha/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,15 +12,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#define __ASSEMBLY__
+-#include <bits/setjmp.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <jmpbuf-offsets.h>
+
+ #define a0 $16
+
+@@ -30,10 +25,16 @@
+ ldgp $29, 0($27)
+
+ $sigsetjmp_local:
+- subq $30, 16, $30
+- .frame $26, 16, $26, 0
+- stq $26, 0($30)
+- .mask 0x04000000, -16
++#ifndef __PIC__
++# define FRAME 16
++ subq $30, FRAME, $30
++ .frame $30, FRAME, $26, 0
++ stq $26, 0($30)
++ .mask 0x04000000, -FRAME
++#else
++# define FRAME 0
++ .frame $30, FRAME, $26, 0
++#endif
+ .prologue 1
+
+ stq $9, JB_S0*8(a0)
+@@ -43,9 +44,9 @@
+ stq $13, JB_S4*8(a0)
+ stq $14, JB_S5*8(a0)
+ stq $26, JB_PC*8(a0)
+- addq $30, 16, $1
+- stq $15, JB_FP*8(a0)
++ addq $30, FRAME, $1
+ stq $1, JB_SP*8(a0)
++ stq $15, JB_FP*8(a0)
+ stt $f2, JB_F2*8(a0)
+ stt $f3, JB_F3*8(a0)
+ stt $f4, JB_F4*8(a0)
+@@ -55,12 +56,16 @@
+ stt $f8, JB_F8*8(a0)
+ stt $f9, JB_F9*8(a0)
+
++#ifndef __PIC__
+ /* Call to C to (potentially) save our signal mask. */
+ jsr $26, __sigjmp_save
+-
+ ldq $26, 0($30)
+ addq $30, 16, $30
+ ret
++#else
++ /* Tailcall to save the signal mask. */
++ br $31, __sigjmp_save !samegp
++#endif
+
+ .end __sigsetjmp
+
+@@ -71,7 +76,6 @@
+ .align 3;
+ .ent _setjmp , 0;
+ _setjmp:
+- .frame $30 , 0, $26
+ ldgp $29, 0($27)
+ mov 0, $17
+ br $sigsetjmp_local
+@@ -81,11 +85,7 @@
+ .align 3;
+ .ent setjmp , 0;
+ setjmp:
+- .frame $30 , 0, $26
+ ldgp $29, 0($27)
+ mov 1, $17
+ br $sigsetjmp_local
+ .end setjmp
+-
+-.weak _setjmp
+-.weak setjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sigprocmask.c uClibc-git/libc/sysdeps/linux/alpha/sigprocmask.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sigprocmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/sigprocmask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/acct.h uClibc-git/libc/sysdeps/linux/alpha/sys/acct.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/acct.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/sys/acct.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ACCT_H
+
+@@ -59,7 +58,7 @@
+
+
+ /* Switch process accounting on and off. */
+-extern int acct (__const char *__filename) __THROW;
++extern int acct (const char *__filename) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/io.h uClibc-git/libc/sysdeps/linux/alpha/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+
+@@ -23,6 +22,7 @@
+
+ __BEGIN_DECLS
+
++#if defined __UCLIBC_LINUX_SPECIFIC__
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges.
+@@ -32,12 +32,12 @@
+ E.g., Linux/Alpha for Alpha PCs supports this. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to
+ access any I/O port is granted. This call requires root
+ privileges. */
+ extern int iopl (int __level) __THROW;
++#endif /* __UCLIBC_LINUX_SPECIFIC__ */
+
+ /* Return the physical address of the DENSE I/O memory or NULL if none
+ is available (e.g. on a jensen). */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/procfs.h uClibc-git/libc/sysdeps/linux/alpha/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/ucontext.h uClibc-git/libc/sysdeps/linux/alpha/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/user.h uClibc-git/libc/sysdeps/linux/alpha/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/__syscall_rt_sigaction.S uClibc-git/libc/sysdeps/linux/alpha/__syscall_rt_sigaction.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/__syscall_rt_sigaction.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/__syscall_rt_sigaction.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/syscall.h>
+@@ -31,6 +30,9 @@
+ .text
+
+ .globl __syscall_rt_sigaction
++#ifndef __UCLIBC_HAS_THREADS_NATIVE__
++.hidden __syscall_rt_sigaction
++#endif
+ .align 4
+ .ent __syscall_rt_sigaction, 0
+ __syscall_rt_sigaction:
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/alpha/syscall.S uClibc-git/libc/sysdeps/linux/alpha/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/alpha/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/alpha/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/regdef.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/byteswap.h uClibc-git/libc/sysdeps/linux/arc/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/byteswap.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ */
++
++#ifndef _ASM_BITS_BYTESWAP_H
++#define _ASM_BITS_BYTESWAP_H 1
++
++#ifdef __Xswape /* gcc defined if -mswape is enabled */
++
++#define __bswap_non_constant_32(x) \
++ __extension__ \
++ ({ unsigned int __bswap_32_v = x; \
++ __asm__ ("swape %0, %0" : "+r" (__bswap_32_v)); \
++ __bswap_32_v; })
++
++#endif /* __Xswape */
++
++#endif /* _ASM_BITS_BYTESWAP_H */
++
++#include <bits/byteswap-common.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/endian.h uClibc-git/libc/sysdeps/linux/arc/bits/endian.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/endian.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/endian.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,15 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++#ifndef _ENDIAN_H
++# error "Never use <bits/endian.h> directly; include <endian.h> instead."
++#endif
++
++/* ARC support either endianness. */
++#ifdef __BIG_ENDIAN__
++#define __BYTE_ORDER __BIG_ENDIAN
++#else
++#define __BYTE_ORDER __LITTLE_ENDIAN
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/fcntl.h uClibc-git/libc/sysdeps/linux/arc/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,223 @@
++/* O_*, F_*, FD_* bit values for Linux.
++ *
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++#ifndef _FCNTL_H
++# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
++#endif
++
++
++#include <sys/types.h>
++#ifdef __USE_GNU
++# include <bits/uio.h>
++#endif
++
++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
++ located on an ext2 file system */
++#define O_ACCMODE 0003
++#define O_RDONLY 00
++#define O_WRONLY 01
++#define O_RDWR 02
++#define O_CREAT 0100 /* not fcntl */
++#define O_EXCL 0200 /* not fcntl */
++#define O_NOCTTY 0400 /* not fcntl */
++#define O_TRUNC 01000 /* not fcntl */
++#define O_APPEND 02000
++#define O_NONBLOCK 04000
++#define O_NDELAY O_NONBLOCK
++#define O_SYNC 010000
++#define O_FSYNC O_SYNC
++#define O_ASYNC 020000
++
++#ifdef __USE_GNU
++# define O_DIRECT 040000 /* Direct disk access. */
++# define O_DIRECTORY 0200000 /* Must be a directory. */
++# define O_NOFOLLOW 0400000 /* Do not follow links. */
++# define O_NOATIME 01000000 /* Do not set atime. */
++# define O_CLOEXEC 02000000 /* Set close_on_exec. */
++#endif
++
++#ifdef __USE_LARGEFILE64
++# define O_LARGEFILE 0100000
++#endif
++
++/* For now Linux has synchronisity options for data and read operations.
++ We define the symbols here but let them do the same as O_SYNC since
++ this is a superset. */
++#if defined __USE_POSIX199309 || defined __USE_UNIX98
++# define O_DSYNC O_SYNC /* Synchronize data. */
++# define O_RSYNC O_SYNC /* Synchronize read operations. */
++#endif
++
++/* Values for the second argument to `fcntl'. */
++#define F_DUPFD 0 /* Duplicate file descriptor. */
++#define F_GETFD 1 /* Get file descriptor flags. */
++#define F_SETFD 2 /* Set file descriptor flags. */
++#define F_GETFL 3 /* Get file status flags. */
++#define F_SETFL 4 /* Set file status flags. */
++
++#ifndef __USE_FILE_OFFSET64
++# define F_GETLK 5 /* Get record locking info. */
++# define F_SETLK 6 /* Set record locking info (non-blocking). */
++# define F_SETLKW 7 /* Set record locking info (blocking). */
++#else
++# define F_GETLK F_GETLK64 /* Get record locking info. */
++# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
++# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
++#endif
++#define F_GETLK64 12 /* Get record locking info. */
++#define F_SETLK64 13 /* Set record locking info (non-blocking). */
++#define F_SETLKW64 14 /* Set record locking info (blocking). */
++
++#if defined __USE_BSD || defined __USE_XOPEN2K
++# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
++# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETSIG 10 /* Set number of signal to be sent. */
++# define F_GETSIG 11 /* Get number of signal to be sent. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETLEASE 1024 /* Set a lease. */
++# define F_GETLEASE 1025 /* Enquire what lease is active. */
++# define F_NOTIFY 1026 /* Request notfications on a directory. */
++# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
++ close-on-exit set on new fd. */
++#endif
++
++/* For F_[GET|SET]FL. */
++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
++
++/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
++#define F_RDLCK 0 /* Read lock. */
++#define F_WRLCK 1 /* Write lock. */
++#define F_UNLCK 2 /* Remove lock. */
++
++/* For old implementation of bsd flock(). */
++#define F_EXLCK 4 /* or 3 */
++#define F_SHLCK 8 /* or 4 */
++
++#ifdef __USE_BSD
++/* Operations for bsd flock(), also used by the kernel implementation. */
++# define LOCK_SH 1 /* shared lock */
++# define LOCK_EX 2 /* exclusive lock */
++# define LOCK_NB 4 /* or'd with one of the above to prevent
++ blocking */
++# define LOCK_UN 8 /* remove lock */
++#endif
++
++#ifdef __USE_GNU
++# define LOCK_MAND 32 /* This is a mandatory flock: */
++# define LOCK_READ 64 /* ... which allows concurrent read operations. */
++# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
++# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
++#endif
++
++#ifdef __USE_GNU
++/* Types of directory notifications that may be requested with F_NOTIFY. */
++# define DN_ACCESS 0x00000001 /* File accessed. */
++# define DN_MODIFY 0x00000002 /* File modified. */
++# define DN_CREATE 0x00000004 /* File created. */
++# define DN_DELETE 0x00000008 /* File removed. */
++# define DN_RENAME 0x00000010 /* File renamed. */
++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
++#endif
++
++struct flock
++ {
++ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
++ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
++#ifndef __USE_FILE_OFFSET64
++ __off_t l_start; /* Offset where the lock begins. */
++ __off_t l_len; /* Size of the locked area; zero means until EOF. */
++#else
++ __off64_t l_start; /* Offset where the lock begins. */
++ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
++#endif
++ __pid_t l_pid; /* Process holding the lock. */
++ };
++
++#ifdef __USE_LARGEFILE64
++struct flock64
++ {
++ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
++ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
++ __off64_t l_start; /* Offset where the lock begins. */
++ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
++ __pid_t l_pid; /* Process holding the lock. */
++ };
++#endif
++
++/* Define some more compatibility macros to be backward compatible with
++ BSD systems which did not managed to hide these kernel macros. */
++#ifdef __USE_BSD
++# define FAPPEND O_APPEND
++# define FFSYNC O_FSYNC
++# define FASYNC O_ASYNC
++# define FNONBLOCK O_NONBLOCK
++# define FNDELAY O_NDELAY
++#endif /* Use BSD. */
++
++/* Advise to `posix_fadvise'. */
++#ifdef __USE_XOPEN2K
++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
++#endif
++
++#if defined __USE_GNU && defined __UCLIBC_LINUX_SPECIFIC__
++/* Flags for SYNC_FILE_RANGE. */
++# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
++ in the range before performing the
++ write. */
++# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
++ dirty pages in the range which are
++ not presently under writeback. */
++# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
++ the range after performing the
++ write. */
++
++/* Flags for SPLICE and VMSPLICE. */
++# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
++# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
++ (but we may still block on the fd
++ we splice from/to). */
++# define SPLICE_F_MORE 4 /* Expect more data. */
++# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
++#endif
++
++__BEGIN_DECLS
++
++#if defined __USE_GNU && defined __UCLIBC_LINUX_SPECIFIC__
++
++/* Provide kernel hint to read ahead. */
++extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
++ __THROW;
++
++/* Selective file content synch'ing. */
++extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
++ unsigned int __flags);
++
++/* Splice address range into a pipe. */
++extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
++ size_t __count, unsigned int __flags);
++
++/* Splice two files together. */
++extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
++ __off64_t *__offout, size_t __len,
++ unsigned int __flags);
++
++/* In-kernel implementation of tee for pipe buffers. */
++extern ssize_t tee (int __fdin, int __fdout, size_t __len,
++ unsigned int __flags);
++
++#endif
++__END_DECLS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/arc/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/kernel_types.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,59 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/* Note that we use the exact same include guard #define names
++ * as asm/posix_types.h. This will avoid gratuitous conflicts
++ * with the posix_types.h kernel header, and will ensure that
++ * our private content, and not the kernel header, will win.
++ * -Erik
++ *
++ * Update: ARC Linux 3.2 ABI change - asm-generic/posix_types.h used now.
++ * for which ARCH wrapper (asm/posix_types.h) is generated, so need to use
++ * the asm-generic file's gaurd.
++ *
++ * Based on asm-generic/stat.h
++ */
++
++#ifndef __ASM_GENERIC_POSIX_TYPES_H
++#define __ASM_GENERIC_POSIX_TYPES_H
++
++typedef unsigned long __kernel_dev_t;
++typedef unsigned long __kernel_ino_t;
++typedef unsigned int __kernel_mode_t;
++typedef unsigned int __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef int __kernel_ipc_pid_t;
++typedef unsigned int __kernel_uid_t;
++typedef unsigned int __kernel_gid_t;
++typedef unsigned int __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef int __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef __kernel_uid_t __kernel_uid32_t;
++typedef __kernel_gid_t __kernel_gid32_t;
++typedef __kernel_uid_t __kernel_old_uid_t;
++typedef __kernel_gid_t __kernel_old_gid_t;
++typedef long long __kernel_loff_t;
++typedef unsigned int __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
++
++typedef struct {
++#ifdef __USE_ALL
++ int val[2];
++#else
++ int __val[2];
++#endif
++} __kernel_fsid_t;
++
++#endif /* _ASM_ARC_POSIX_TYPES_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/setjmp.h uClibc-git/libc/sysdeps/linux/arc/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,16 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _BITS_SETJMP_H
++#define _BITS_SETJMP_H 1
++
++#if !defined _SETJMP_H && !defined _PTHREAD_H
++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
++#endif
++
++typedef int __jmp_buf[13+1+1+1]; /*r13-r25, fp, sp, blink */
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/arc/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/sigcontextinfo.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,15 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++#define SIGCONTEXT struct sigcontext *
++#define SIGCONTEXT_EXTRA_ARGS
++
++#define GET_PC(ctx) ((void *) ctx->regs.scratch.ret)
++#define GET_FRAME(ctx) ((void *) ctx->regs.scratch.fp)
++#define GET_STACK(ctx) ((void *) ctx->regs.scratch.sp)
++#define CALL_SIGHANDLER(handler, signo, ctx) \
++ (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/arc/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/stackinfo.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,13 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _STACKINFO_H
++#define _STACKINFO_H 1
++
++/* On ARC, the stack grows down. */
++#define _STACK_GROWS_DOWN 1
++
++#endif /* stackinfo.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/syscalls.h uClibc-git/libc/sysdeps/linux/arc/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/syscalls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,192 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ */
++#ifndef _BITS_SYSCALLS_H
++#define _BITS_SYSCALLS_H
++#ifndef _SYSCALL_H
++#error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
++#endif
++
++#ifndef __ASSEMBLER__
++
++#include <errno.h>
++
++/*
++ * Fine tuned code for errno handling in syscall wrappers.
++ *
++ * 1. __syscall_error(raw_syscall_ret_val) is used to set the errno (vs.
++ * the typical __set_errno). This helps elide the generated code for
++ * GOT fetch for __errno_location pointer etc, in each wrapper.
++ *
++ * 2. The call to above is also disguised in inline asm. This elides
++ * unconditional save/restore of a few callee regs which gcc almost
++ * always generates if the call is exposed
++ *
++ * 3. The function can't be hidden because wrappers from librt et all also
++ * call it. However hidden is not really needed to bypass PLT for
++ * intra-libc calls as the branch insn w/o @plt is sufficient.
++ */
++
++#ifdef IS_IN_rtld
++/* ldso doesn't have real errno */
++#define ERRNO_ERRANDS(_sys_result)
++#else /* !IS_IN_rtld */
++extern int __syscall_error (int);
++#ifndef IS_IN_libc
++/* Inter-libc callers use PLT */
++#define CALL_ERRNO_SETTER "bl __syscall_error@plt \n\t"
++#else
++/* intra-libc callers, despite PIC can bypass PLT */
++#define CALL_ERRNO_SETTER "bl __syscall_error \n\t"
++#endif
++
++#define ERRNO_ERRANDS(_sys_result) \
++ __asm__ volatile ( \
++ "st.a blink, [sp, -4] \n\t" \
++ CALL_ERRNO_SETTER \
++ "ld.ab blink, [sp, 4] \n\t" \
++ :"+r" (_sys_result) \
++ : \
++ :"r1","r2","r3","r4","r5","r6", \
++ "r7","r8","r9","r10","r11","r12" \
++ );
++
++#endif /* IS_IN_rtld */
++
++/* Invoke the syscall and return unprocessed kernel status */
++#define INTERNAL_SYSCALL(nm, err, nr, args...) \
++ INTERNAL_SYSCALL_NCS(SYS_ify (nm), err, nr, args)
++
++/* -1 to -1023 as valid error values will suffice for some time */
++#define INTERNAL_SYSCALL_ERROR_P(val, err) \
++ ((unsigned int) (val) > (unsigned int) -1024)
++
++/*
++ * Standard sycall wrapper:
++ * -"const" syscall number @nm, sets errno, return success/error-codes
++ */
++#define INLINE_SYSCALL(nm, nr_args, args...) \
++({ \
++ register int __res __asm__("r0"); \
++ __res = INTERNAL_SYSCALL(nm, , nr_args, args); \
++ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P ((__res), ), 0)) \
++ { \
++ ERRNO_ERRANDS(__res); \
++ } \
++ __res; \
++})
++
++/* Non const syscall number @nm
++ * Ideally this could be folded within INLINE_SYSCALL with
++ * __builtin_constant_p in INTERNAL_SYSCALL but that fails for syscall.c
++ */
++#define INLINE_SYSCALL_NCS(nm, nr_args, args...) \
++({ \
++ register int __res __asm__("r0"); \
++ __res = INTERNAL_SYSCALL_NCS(nm, , nr_args, args); \
++ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P ((__res), ), 0)) \
++ { \
++ ERRNO_ERRANDS(__res); \
++ } \
++ __res; \
++})
++
++#define INLINE_SYSCALL_NOERR(name, nr, args...) \
++ ({ unsigned int _inline_sys_result = INTERNAL_SYSCALL (name, , nr, args);\
++ (int) _inline_sys_result; })
++
++/*-------------------------------------------------------------------------
++ * Mechanics of Trap - specific to ARC700
++ *
++ * Note the memory clobber is not strictly needed for intended semantics of
++ * the inline asm. However some of the cases, such as old-style 6 arg mmap
++ * gcc was generating code for inline syscall ahead of buffer packing needed
++ * for syscall itself.
++ *-------------------------------------------------------------------------*/
++
++#define ARC_TRAP_INSN "trap0 \n\t"
++
++#define INTERNAL_SYSCALL_NCS(nm, err, nr_args, args...) \
++({ \
++ /* Per ABI, r0 is 1st arg and return reg */ \
++ register int __ret __asm__("r0"); \
++ register int _sys_num __asm__("r8"); \
++ \
++ LOAD_ARGS_##nr_args (nm, args) \
++ \
++ __asm__ volatile ( \
++ ARC_TRAP_INSN \
++ : "+r" (__ret) \
++ : "r"(_sys_num) ASM_ARGS_##nr_args \
++ : "memory"); \
++ \
++ __ret; \
++})
++
++/* Macros for setting up inline __asm__ input regs */
++#define ASM_ARGS_0
++#define ASM_ARGS_1 ASM_ARGS_0, "r" (__ret)
++#define ASM_ARGS_2 ASM_ARGS_1, "r" (_arg2)
++#define ASM_ARGS_3 ASM_ARGS_2, "r" (_arg3)
++#define ASM_ARGS_4 ASM_ARGS_3, "r" (_arg4)
++#define ASM_ARGS_5 ASM_ARGS_4, "r" (_arg5)
++#define ASM_ARGS_6 ASM_ARGS_5, "r" (_arg6)
++#define ASM_ARGS_7 ASM_ARGS_6, "r" (_arg7)
++
++/* Macros for converting sys-call wrapper args into sys call args */
++#define LOAD_ARGS_0(nm, arg) \
++ _sys_num = (int) (nm); \
++
++#define LOAD_ARGS_1(nm, arg1) \
++ __ret = (int) (arg1); \
++ LOAD_ARGS_0 (nm, arg1)
++
++/*
++ * Note that the use of _tmpX might look superflous, however it is needed
++ * to ensure that register variables are not clobbered if arg happens to be
++ * a function call itself. e.g. sched_setaffinity() calling getpid() for arg2
++ *
++ * Also this specific order of recursive calling is important to segregate
++ * the tmp args evaluation (function call case described above) and assigment
++ * of register variables
++ */
++#define LOAD_ARGS_2(nm, arg1, arg2) \
++ int _tmp2 = (int) (arg2); \
++ LOAD_ARGS_1 (nm, arg1) \
++ register int _arg2 __asm__ ("r1") = _tmp2;
++
++#define LOAD_ARGS_3(nm, arg1, arg2, arg3) \
++ int _tmp3 = (int) (arg3); \
++ LOAD_ARGS_2 (nm, arg1, arg2) \
++ register int _arg3 __asm__ ("r2") = _tmp3;
++
++#define LOAD_ARGS_4(nm, arg1, arg2, arg3, arg4) \
++ int _tmp4 = (int) (arg4); \
++ LOAD_ARGS_3 (nm, arg1, arg2, arg3) \
++ register int _arg4 __asm__ ("r3") = _tmp4;
++
++#define LOAD_ARGS_5(nm, arg1, arg2, arg3, arg4, arg5) \
++ int _tmp5 = (int) (arg5); \
++ LOAD_ARGS_4 (nm, arg1, arg2, arg3, arg4) \
++ register int _arg5 __asm__ ("r4") = _tmp5;
++
++#define LOAD_ARGS_6(nm, arg1, arg2, arg3, arg4, arg5, arg6) \
++ int _tmp6 = (int) (arg6); \
++ LOAD_ARGS_5 (nm, arg1, arg2, arg3, arg4, arg5) \
++ register int _arg6 __asm__ ("r5") = _tmp6;
++
++#define LOAD_ARGS_7(nm, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
++ int _tmp7 = (int) (arg7); \
++ LOAD_ARGS_6 (nm, arg1, arg2, arg3, arg4, arg5, arg6) \
++ register int _arg7 __asm__ ("r6") = _tmp7;
++
++#else
++
++#define ARC_TRAP_INSN trap0
++
++#endif /* __ASSEMBLER__ */
++
++#endif /* _BITS_SYSCALLS_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,53 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/*
++ * Track misc arch-specific features that aren't config options
++ */
++
++#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
++#define _BITS_UCLIBC_ARCH_FEATURES_H
++
++/* instruction used when calling abort() to kill yourself */
++#define __UCLIBC_ABORT_INSTRUCTION__ "flag 0"
++
++/* can your target use syscall6() for mmap ? */
++#undef __UCLIBC_MMAP_HAS_6_ARGS__
++
++/* does your target use syscall4() for truncate64 ? (32bit arches only) */
++#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++
++/* does your target have a broken create_module() ? */
++#undef __UCLIBC_BROKEN_CREATE_MODULE__
++
++/* does your target have to worry about older [gs]etrlimit() ? */
++#undef __UCLIBC_HANDLE_OLDER_RLIMIT__
++
++/* does your target have an asm .set ? */
++#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
++
++/* define if target doesn't like .global */
++#undef __UCLIBC_ASM_GLOBAL_DIRECTIVE__
++
++/* define if target supports .weak */
++#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
++
++/* define if target supports .weakext */
++#undef __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
++
++/* needed probably only for ppc64 */
++#undef __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
++
++/* define if target supports CFI pseudo ops */
++#undef __UCLIBC_HAVE_ASM_CFI_DIRECTIVES__
++
++/* define if target supports IEEE signed zero floats */
++#define __UCLIBC_HAVE_SIGNED_ZERO__
++
++/* The default ';' is a comment on ARC. */
++#define __UCLIBC_ASM_LINE_SEP__ `
++
++#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/arc/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/uClibc_page.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,26 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _UCLIBC_PAGE_H
++#define _UCLIBC_PAGE_H
++
++/*
++ * ARC700/linux supports 4k, 8k, 16k pages (build time).
++ * We rely on the kernel exported header (aka uapi headers since 3.8)
++ * for PAGE_SIZE and friends. This avoids hand-editing here when building
++ * toolchain.
++ *
++ * Although uClibc determines page size dynamically, from kernel's auxv which
++ * ARC Linux does pass, still the generic code needs a fall back
++ * _dl_pagesize = auxvt[AT_PAGESZ].a_un.a_val ? : PAGE_SIZE
++ *
++ */
++#include <asm/page.h>
++
++/* TBD: fix this with runtime value for a PAGE_SIZE agnostic uClibc */
++#define MMAP2_PAGE_SHIFT PAGE_SHIFT
++
++#endif /* _UCLIBC_PAGE_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/wordsize.h uClibc-git/libc/sysdeps/linux/arc/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bits/wordsize.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/arc/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,20 @@
++/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. ARC version.
++ *
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
++ We cannot do it in C because it must be a tail-call, so frame-unwinding
++ in setjmp doesn't clobber the state restored by longjmp. */
++
++#include <sysdep.h>
++
++;@ r0 = jump buffer into which regs will be saved
++
++ENTRY(_setjmp)
++ b.d __sigsetjmp
++ mov r1, 0 ; don't save signals
++END(_setjmp)
++libc_hidden_def(_setjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/arc/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,20 @@
++/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. ARC version.
++ *
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
++ We cannot do it in C because it must be a tail-call, so frame-unwinding
++ in setjmp doesn't clobber the state restored by longjmp. */
++
++#include <sysdep.h>
++
++;@ r0 = jump buffer into which regs will be saved
++
++ENTRY(setjmp)
++ b.d __sigsetjmp
++ mov r1, 1 ; save signals
++END(setjmp)
++libc_hidden_def(setjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/cacheflush.c uClibc-git/libc/sysdeps/linux/arc/cacheflush.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/cacheflush.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/cacheflush.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/* cacheflush syscall for ARC
++ *
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sys/syscall.h>
++#include <sys/cachectl.h>
++
++_syscall3(int, cacheflush, void *, addr, int, nbytes, int, op)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/clone.S uClibc-git/libc/sysdeps/linux/arc/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/clone.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <asm/errno.h>
++#include <sys/syscall.h>
++#include <sysdep.h>
++
++; Per man, libc clone( ) is as follows
++;
++; int clone(int (*fn)(void *), void *child_stack,
++; int flags, void *arg, ...
++; /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */);
++;
++; NOTE: I'm assuming that the last 3 args are NOT var-args and in case all
++; 3 are not relevant, caller will nevertheless pass those as NULL.
++; Current (Jul 2012) upstream powerpc/clone.S assumes similarly.
++; Our LTP (from 2007) doesn't seem to have tests to prove otherwise
++
++; clone syscall in kernel
++;
++; int sys_clone(unsigned long clone_flags, unsigned long newsp,
++; int __user *parent_tidptr, void *tls,
++; int __user *child_tidptr)
++
++
++ENTRY(clone)
++ cmp r0, 0 ; @fn can't be NULL
++ cmp.ne r1, 0 ; @child_stack can't be NULL
++ bz .L__sys_err
++
++ ; @fn and @args needed after the syscall for child
++ ; However r3 containing @arg will be clobbered BEFORE syscall
++ ; r0 containg @fn will be clobbered AFTER syscall (with ret val)
++ mov r10, r0
++ mov r11, r3
++
++ ; adjust libc args for syscall
++ mov r0, r2 ; libc @flags is 1st syscall arg
++ mov r2, r4 ; libc @ptid
++ mov r3, r5 ; libc @tls
++ mov r4, r6 ; libc @ctid
++ mov r8, __NR_clone
++ ARC_TRAP_INSN
++
++ cmp r0, 0 ; return code : 0 new process, !0 parent
++ blt .L__sys_err2 ; < 0 (signed) error
++ jnz [blink] ; Parent returns
++
++ ; child jumps off to @fn with @arg as argument
++ j.d [r10]
++ mov r0, r11
++
++ ; falls thru to _exit() with result from @fn (already in r0)
++ b HIDDEN_JUMPTARGET(_exit)
++
++.L__sys_err:
++ mov r0, -EINVAL
++.L__sys_err2:
++ ; (1) No need to make -ve kernel error code as positive errno
++ ; __syscall_error expects the -ve error code returned by kernel
++ ; (2) r0 still had orig -ve kernel error code
++ ; (3) Tail call to __syscall_error so we dont have to come back
++ ; here hence instead of jmp-n-link (reg push/pop) we do jmp
++ ; (4) No need to route __syscall_error via PLT, B is inherently
++ ; position independent
++ b __syscall_error
++END(clone)
++libc_hidden_def(clone)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/crt1.S uClibc-git/libc/sysdeps/linux/arc/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/crt1.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,57 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++
++.text
++
++#ifndef __UCLIBC_CTOR_DTOR__
++ .weak _init
++ .weak _fini
++#endif
++
++/* Stick in a dummy reference to main(), so that if an application
++ * is linking when the main() function is in a static library (.a)
++ * we can be sure that main() actually gets linked in
++ */
++ .type main,@function
++ .type _main,@function
++
++
++/* When we enter this piece of code, the program stack looks like this:
++ argc argument counter (integer)
++ argv[0] program name (pointer)
++ argv[1...N] program args (pointers)
++ argv[argc-1] end of args (integer)
++ NULL
++ env[0...N] environment variables (pointers)
++ NULL
++*/
++ .text
++ .align 4
++ .global __start
++ .hidden __start
++ .type __start,@function
++__start:
++ mov fp, 0
++ ld_s r1, [sp] ; argc
++
++ mov_s r5, r0 ; rltd_fini
++ add_s r2, sp, 4 ; argv
++
++ mov_s r0, main
++ mov_s r3, _init
++ mov r4, _fini
++
++ and sp, sp, -8
++ mov r6, sp
++
++ /* __uClibc_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
++ bl __uClibc_main
++
++ /* Should never get here.... */
++ flag 1
++.size __start,.-__start
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/crti.S uClibc-git/libc/sysdeps/linux/arc/crti.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/crti.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/crti.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,27 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++___gnu_compiled_c:
++
++ .section .init
++ .align 4
++ .global _init
++ .type _init,@function
++_init:
++ st.a blink,[sp,-4]
++ st.a fp,[sp,-4]
++ mov fp,sp
++
++
++ .section .fini
++ .align 4
++ .global _fini
++ .type _fini,@function
++_fini:
++ st.a blink,[sp,-4]
++ st.a fp,[sp,-4]
++ mov fp,sp
++ .align 4
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/crtn.S uClibc-git/libc/sysdeps/linux/arc/crtn.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/crtn.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/crtn.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,29 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++___gnu_compiled_c:
++
++ .section .init
++ .align 4
++ .global _init
++ .type _init,@function
++ ; EPILOGUE
++ ld.ab fp,[sp,4]
++ ld blink,[sp,0]
++ j.d [blink]
++ add sp,sp,4
++; .size _init,.-_init
++
++ .section .fini
++ .align 4
++ .global _fini
++ .type _fini,@function
++ ; EPILOGUE
++ ld.ab fp,[sp,4]
++ ld blink,[sp,0]
++ j.d [blink]
++ add sp,sp,4
++; .size _fini,.-_fini
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/arc/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#define __JMP_BUF_SP (13+1)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/arc/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,13 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf[__JMP_BUF_SP]))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/__longjmp.S uClibc-git/libc/sysdeps/linux/arc/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/__longjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,38 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++
++;@ r0 = jump buffer from which regs will be restored
++;@ r1 = value that setjmp( ) will return due to this longjmp
++
++ENTRY(__longjmp)
++
++ ld_s r13, [r0]
++ ld_s r14, [r0,4]
++ ld r15, [r0,8]
++ ld r16, [r0,12]
++ ld r17, [r0,16]
++ ld r18, [r0,20]
++ ld r19, [r0,24]
++ ld r20, [r0,28]
++ ld r21, [r0,32]
++ ld r22, [r0,36]
++ ld r23, [r0,40]
++ ld r24, [r0,44]
++ ld r25, [r0,48]
++
++ ld blink, [r0,60] ; load it early enough to not stall the pipeline
++ ld fp, [r0,52]
++ ld sp, [r0,56]
++
++ mov.f r0, r1 ; get the setjmp return value(due to longjmp) in place
++
++ j.d [blink] ; to caller of setjmp location, right after the call
++ mov.z r0, 1 ; can't let setjmp return 0 when it is due to longjmp
++
++END(__longjmp)
++libc_hidden_def(__longjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/Makefile uClibc-git/libc/sysdeps/linux/arc/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,13 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++top_srcdir=../../../../
++top_builddir=../../../../
++all: objs
++include $(top_builddir)Rules.mak
++include Makefile.arch
++include $(top_srcdir)Makerules
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/Makefile.arch uClibc-git/libc/sysdeps/linux/arc/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/Makefile.arch 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++CSRC-y := syscall.c sigaction.c __syscall_error.c cacheflush.c
++
++SSRC-y := sigrestorer.S __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
++ vfork.S clone.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/setjmp.S uClibc-git/libc/sysdeps/linux/arc/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,39 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++
++;@ r0 = jump buffer into which regs will be saved
++;@ r1 = do we need to save signals
++
++ENTRY(__sigsetjmp)
++
++ st_s r13, [r0]
++ st_s r14, [r0,4]
++ st r15, [r0,8]
++ st r16, [r0,12]
++ st r17, [r0,16]
++ st r18, [r0,20]
++ st r19, [r0,24]
++ st r20, [r0,28]
++ st r21, [r0,32]
++ st r22, [r0,36]
++ st r23, [r0,40]
++ st r24, [r0,44]
++ st r25, [r0,48]
++ st fp, [r0,52]
++ st sp, [r0,56]
++
++ ; make a note of where longjmp will return to.
++ ; that will be right next to this setjmp call-site which will be
++ ; contained in blink, since "C" caller of this routine will do
++ ; a branch-n-link
++
++ st blink, [r0,60]
++ b __sigjmp_save
++
++END(__sigsetjmp)
++libc_hidden_def(__sigsetjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sigaction.c uClibc-git/libc/sysdeps/linux/arc/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sigaction.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,47 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <errno.h>
++#include <signal.h>
++#include <string.h>
++#include <sys/syscall.h>
++#include <bits/kernel_sigaction.h>
++
++extern void __default_rt_sa_restorer(void);
++//libc_hidden_proto(__default_rt_sa_restorer);
++
++#define SA_RESTORER 0x04000000
++
++/* If @act is not NULL, change the action for @sig to @act.
++ If @oact is not NULL, put the old action for @sig in @oact. */
++int
++__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
++{
++ struct sigaction kact;
++
++ /* !act means caller only wants to know @oact
++ * Hence only otherwise, do SA_RESTORER stuff
++ *
++ * For the normal/default cases (user not providing SA_RESTORER) use
++ * a real sigreturn stub to avoid kernel synthesizing one on user stack
++ * at runtime, which needs PTE permissions update (hence TLB entry
++ * update) and costly cache line flushes for code modification
++ */
++ if (act && !(act->sa_flags & SA_RESTORER)) {
++ memcpy(&kact, act, sizeof(kact));
++ kact.sa_restorer = __default_rt_sa_restorer;
++ kact.sa_flags |= SA_RESTORER;
++
++ act = &kact;
++ }
++
++ return __syscall_rt_sigaction(sig, act, oact, sizeof(act->sa_mask));
++}
++
++#ifndef LIBC_SIGACTION
++weak_alias(__libc_sigaction,sigaction)
++libc_hidden_weak(sigaction)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sigrestorer.S uClibc-git/libc/sysdeps/linux/arc/sigrestorer.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sigrestorer.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sigrestorer.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,21 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sysdep.h>
++#include <sys/syscall.h>
++
++/*
++ * Provide a real sigreturn stub to avoid kernel synthesizing one
++ * on user stack at runtime, which needs PTE permissions update
++ * (hence TLB entry update) and costly cache line flushes for
++ * code modification
++ */
++
++ENTRY(__default_rt_sa_restorer)
++ mov r8, __NR_rt_sigreturn
++ ARC_TRAP_INSN
++END(__default_rt_sa_restorer)
++libc_hidden_def(__default_rt_sa_restorer)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/cachectl.h uClibc-git/libc/sysdeps/linux/arc/sys/cachectl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/cachectl.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sys/cachectl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,21 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _SYS_CACHECTL_H
++#define _SYS_CACHECTL_H 1
++
++/*
++ * Get the kernel definition for the flag bits
++ */
++#include <asm/cachectl.h>
++
++__BEGIN_DECLS
++
++extern int cacheflush(void *addr, int nbytes, int flags);
++
++__END_DECLS
++
++#endif /* sys/cachectl.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/procfs.h uClibc-git/libc/sysdeps/linux/arc/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,108 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _SYS_PROCFS_H
++#define _SYS_PROCFS_H 1
++
++/* This is somewhat modelled after the file of the same name on SVR4
++ systems. It provides a definition of the core file format for ELF
++ used on Linux. It doesn't have anything to do with the /proc file
++ system, even though Linux has one.
++
++ Anyway, the whole purpose of this file is for GDB and GDB only.
++ Don't read too much into it. Don't use it for anything other than
++ GDB unless you know what you are doing. */
++
++#include <features.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#include <sys/user.h>
++
++__BEGIN_DECLS
++
++/* Type for a general-purpose register. */
++typedef unsigned long elf_greg_t;
++
++/* And the whole bunch of them. We could have used `struct
++ user_regs' directly in the typedef, but tradition says that
++ the register set is an array, which does have some peculiar
++ semantics, so leave it that way. */
++#define ELF_NGREG 20
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++/* Signal info. */
++struct elf_siginfo
++ {
++ int si_signo; /* Signal number. */
++ int si_code; /* Extra code. */
++ int si_errno; /* Errno. */
++ };
++
++/* Definitions to generate Intel SVR4-like core files. These mostly
++ have the same names as the SVR4 types with "elf_" tacked on the
++ front to prevent clashes with Linux definitions, and the typedef
++ forms have been avoided. This is mostly like the SVR4 structure,
++ but more Linuxy, with things that Linux does not support and which
++ GDB doesn't really use excluded. */
++
++struct elf_prstatus
++ {
++ struct elf_siginfo pr_info; /* Info associated with signal. */
++ short int pr_cursig; /* Current signal. */
++ unsigned long int pr_sigpend; /* Set of pending signals. */
++ unsigned long int pr_sighold; /* Set of held signals. */
++ __pid_t pr_pid;
++ __pid_t pr_ppid;
++ __pid_t pr_pgrp;
++ __pid_t pr_sid;
++ struct timeval pr_utime; /* User time. */
++ struct timeval pr_stime; /* System time. */
++ struct timeval pr_cutime; /* Cumulative user time. */
++ struct timeval pr_cstime; /* Cumulative system time. */
++ elf_gregset_t pr_reg; /* GP registers. */
++ int pr_fpvalid; /* True if math copro being used. */
++ };
++
++
++#define ELF_PRARGSZ (80) /* Number of chars for args. */
++
++struct elf_prpsinfo
++ {
++ char pr_state; /* Numeric process state. */
++ char pr_sname; /* Char for pr_state. */
++ char pr_zomb; /* Zombie. */
++ char pr_nice; /* Nice val. */
++ unsigned long int pr_flag; /* Flags. */
++ unsigned short int pr_uid;
++ unsigned short int pr_gid;
++ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
++ /* Lots missing */
++ char pr_fname[16]; /* Filename of executable. */
++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
++ };
++
++/* The rest of this file provides the types for emulation of the
++ Solaris <proc_service.h> interfaces that should be implemented by
++ users of libthread_db. */
++
++/* Addresses. */
++typedef void *psaddr_t;
++
++/* Register sets. Linux has different names. */
++typedef elf_gregset_t prgregset_t;
++typedef elf_gregset_t prfpregset_t;
++
++/* We don't have any differences between processes and threads,
++ therefore have only one PID type. */
++typedef __pid_t lwpid_t;
++
++/* Process status and info. In the end we do provide typedefs for them. */
++typedef struct elf_prstatus prstatus_t;
++typedef struct elf_prpsinfo prpsinfo_t;
++
++__END_DECLS
++
++#endif /* sys/procfs.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/ucontext.h uClibc-git/libc/sysdeps/linux/arc/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,22 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _SYS_UCONTEXT_H
++#define _SYS_UCONTEXT_H 1
++
++#include <features.h>
++#include <signal.h>
++#include <bits/sigcontext.h>
++
++typedef struct ucontext {
++ unsigned long uc_flags;
++ struct ucontext *uc_link;
++ stack_t uc_stack;
++ struct sigcontext uc_mcontext;
++ sigset_t uc_sigmask; /* mask last for extensibility */
++} ucontext_t;
++
++#endif /* sys/ucontext.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/user.h uClibc-git/libc/sysdeps/linux/arc/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sys/user.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _SYS_USER_H
++#define _SYS_USER_H 1
++
++/* The whole purpose of this file is for GDB and GDB only. Don't read
++ too much into it. Don't use it for anything other than GDB unless
++ you know what you are doing. */
++
++
++/* Actually apps like strace also expect a struct user, so it's better to
++ * have a dummy implementation
++ */
++
++struct user {
++ int dummy;
++};
++
++#endif /* sys/user.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/syscall.c uClibc-git/libc/sysdeps/linux/arc/syscall.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/syscall.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/syscall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,17 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/syscall.h>
++
++extern long syscall(long int sysnum, long a, long b, long c, long d, long e, long f);
++
++long syscall(long int sysnum, long a, long b, long c, long d, long e, long f)
++{
++ return INLINE_SYSCALL_NCS(sysnum, 6, a, b, c, d, e, f);
++}
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/__syscall_error.c uClibc-git/libc/sysdeps/linux/arc/__syscall_error.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/__syscall_error.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/__syscall_error.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,15 @@
++/* Wrapper for setting errno.
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <errno.h>
++#include <sys/syscall.h>
++
++int __syscall_error(int err_no)
++{
++ __set_errno(-err_no);
++ return -1;
++}
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/sysdep.h uClibc-git/libc/sysdeps/linux/arc/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/sysdep.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,22 @@
++#ifndef _LINUX_ARC_SYSDEP_H
++#define _LINUX_ARC_SYSDEP_H 1
++
++#include <features.h>
++#include <libc-internal.h>
++
++#ifdef __ASSEMBLER__
++
++#define ENTRY(nm) \
++ .text ` \
++ .align 4 ` \
++ .globl nm ` \
++ .type nm,@function ` \
++nm:
++
++#define END(name) .size name,.-name
++
++#endif /* __ASSEMBLER __*/
++
++#include <common/sysdep.h>
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/vfork.S uClibc-git/libc/sysdeps/linux/arc/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/vfork.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,29 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sys/syscall.h>
++#include <sysdep.h>
++
++/* No legacy syscall ABI means NR_vfork is not available at all, use clone */
++#define _SIGNAL_H
++#include <bits/signum.h> /* For SIGCHLD */
++
++#define CLONE_VM 0x00000100
++#define CLONE_VFORK 0x00004000
++#define CLONE_FLAGS_FOR_VFORK (CLONE_VM|CLONE_VFORK|SIGCHLD)
++
++ENTRY(vfork)
++ mov r0, CLONE_FLAGS_FOR_VFORK
++ mov_s r1, sp
++ mov r8, __NR_clone
++ ARC_TRAP_INSN
++
++ cmp r0, 0
++ jge [blink] ; pid >=0 return, else detour via tailcall to errno
++
++ b __syscall_error
++END(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arc/xstatconv.c uClibc-git/libc/sysdeps/linux/arc/xstatconv.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arc/xstatconv.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arc/xstatconv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1 @@
++/* We don't need any of this. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_assert.c uClibc-git/libc/sysdeps/linux/arm/aeabi_assert.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_assert.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_assert.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,16 +12,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #undef NDEBUG
+ #include <assert.h>
+ #include <stdlib.h>
+
+
+-void __aeabi_assert(const char *assertion, const char *file, unsigned int line);
++void __aeabi_assert(const char *assertion, const char *file, unsigned int line) attribute_noreturn;
+ void __aeabi_assert(const char *assertion, const char *file, unsigned int line)
+ {
+ __assert (assertion, file, line, NULL);
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_atexit.c uClibc-git/libc/sysdeps/linux/arm/aeabi_atexit.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_atexit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_atexit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_errno_addr.c uClibc-git/libc/sysdeps/linux/arm/aeabi_errno_addr.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_errno_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_errno_addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_lcsts.c uClibc-git/libc/sysdeps/linux/arm/aeabi_lcsts.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_lcsts.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_lcsts.c 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The ARM EABI requires that we provide ISO compile-time constants as
+ link-time constants. Some portable applications may reference these. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_localeconv.c uClibc-git/libc/sysdeps/linux/arm/aeabi_localeconv.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_localeconv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_localeconv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <locale.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_math.c uClibc-git/libc/sysdeps/linux/arm/aeabi_math.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_math.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_math.c 2014-02-03 12:32:56.000000000 +0100
+@@ -29,9 +29,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_mb_cur_max.c uClibc-git/libc/sysdeps/linux/arm/aeabi_mb_cur_max.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_mb_cur_max.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_mb_cur_max.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,16 +12,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <langinfo.h>
+ #include <locale.h>
+ #include <stdlib.h>
+
+-int
+-__aeabi_MB_CUR_MAX (void)
++int __aeabi_MB_CUR_MAX (void);
++int __aeabi_MB_CUR_MAX (void)
+ {
+ return MB_CUR_MAX;
+ }
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memclr.c uClibc-git/libc/sysdeps/linux/arm/aeabi_memclr.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memclr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_memclr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memcpy.c uClibc-git/libc/sysdeps/linux/arm/aeabi_memcpy.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memcpy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_memcpy.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memmove.c uClibc-git/libc/sysdeps/linux/arm/aeabi_memmove.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memmove.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_memmove.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memset.c uClibc-git/libc/sysdeps/linux/arm/aeabi_memset.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_memset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_memset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_sighandlers.S uClibc-git/libc/sysdeps/linux/arm/aeabi_sighandlers.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_sighandlers.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_sighandlers.S 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The ARM EABI defines these as "functions". */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_unwind_cpp_pr1.c uClibc-git/libc/sysdeps/linux/arm/aeabi_unwind_cpp_pr1.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/aeabi_unwind_cpp_pr1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/aeabi_unwind_cpp_pr1.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Because some objects in ld.so and libc.so are built with
+ -fexceptions, we end up with references to this personality
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/arm_asm.h uClibc-git/libc/sysdeps/linux/arm/bits/arm_asm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/arm_asm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/arm_asm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -3,8 +3,10 @@
+ #define _ARM_ASM_H
+
+ #ifdef __thumb2__
++# ifdef __ASSEMBLER__
+ .thumb
+ .syntax unified
++# endif /* __ASSEMBLER__ */
+ #define IT(t, cond) i##t cond
+ #else
+ /* XXX: This can be removed if/when we require an assembler that supports
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/armsigctx.h uClibc-git/libc/sysdeps/linux/arm/bits/armsigctx.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/armsigctx.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/armsigctx.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The format of struct sigcontext changed between 2.0 and 2.1 kernels.
+ Fortunately 2.0 puts a magic number in the first word and this is not
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/atomic.h uClibc-git/libc/sysdeps/linux/arm/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if defined __thumb__ && !defined __thumb2__
+ #include_next <common/bits/atomic.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/fcntl.h uClibc-git/libc/sysdeps/linux/arm/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/fenv.h uClibc-git/libc/sysdeps/linux/arm/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/huge_val.h uClibc-git/libc/sysdeps/linux/arm/bits/huge_val.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/huge_val.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/huge_val.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/arm/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef unsigned short __kernel_old_gid_t;
+ typedef long long __kernel_loff_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ #ifdef __USE_ALL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/mathdef.h uClibc-git/libc/sysdeps/linux/arm/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/setjmp.h uClibc-git/libc/sysdeps/linux/arm/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
++/* Copyright (C) 1997,1998,2005,2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,19 +12,18 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. ARM version. */
++
+ #ifndef _BITS_SETJMP_H
+-#define _BITS_SETJMP_H 1
++#define _BITS_SETJMP_H 1
+
+ #if !defined _SETJMP_H && !defined _PTHREAD_H
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ /* Jump buffer contains v1-v6, sl, fp, sp and pc. Other registers are not
+ saved. */
+ #ifdef __ARM_EABI__
+@@ -38,15 +37,10 @@
+ #elif defined __MAVERICK__ || defined __IWMMXT__
+ typedef int __jmp_buf[34];
+ #else
++# ifdef __UCLIBC_HAS_FPU__
+ typedef int __jmp_buf[22];
++# else
++typedef int __jmp_buf[10];
++# endif
+ #endif
+ #endif
+-
+-#define __JMP_BUF_SP 8
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf[__JMP_BUF_SP]))
+-
+-#endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/shm.h uClibc-git/libc/sysdeps/linux/arm/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/arm/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <bits/armsigctx.h>
+ #include <linux/version.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/arm/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,11 +11,11 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
+ #ifdef __ARM_EABI__
+-#define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++#define __UCLIBC_SYSCALL_ALIGN_64BIT__
+ #else
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+ #endif
+
+ /* does your target have a broken create_module() ? */
+@@ -48,4 +48,15 @@
+ /* only weird assemblers generally need this */
+ #undef __UCLIBC_ASM_LINE_SEP__
+
++#ifdef __GNUC__
++# define __need_uClibc_config_h
++# include <bits/uClibc_config.h>
++# undef __need_uClibc_config_h
++# if defined __CONFIG_ARM_EABI__ && !defined __ARM_EABI__
++# error Your toolchain does not support EABI
++# elif !defined __CONFIG_ARM_EABI__ && defined __ARM_EABI__
++# error Your toolchain was built for EABI, but you have chosen OABI
++# endif
++#endif
++
+ #endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/wordsize.h uClibc-git/libc/sysdeps/linux/arm/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/brk.c uClibc-git/libc/sysdeps/linux/arm/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/arm/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <bits/arm_asm.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/arm/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <bits/arm_asm.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/clone.S uClibc-git/libc/sysdeps/linux/arm/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+@@ -111,8 +110,8 @@
+ ldr r4, [sp, #12]
+ DO_CALL (clone)
+ movs a1, a1
+- blt __error
+ ldmnefd sp!, {r4}
++ blt __error
+ IT(t, ne)
+ #if defined(__USE_BX__)
+ bxne lr
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/crt1.S uClibc-git/libc/sysdeps/linux/arm/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -31,9 +31,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This is the canonical entry point, usually the first thing in the text
+ segment.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/find_exidx.c uClibc-git/libc/sysdeps/linux/arm/find_exidx.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/find_exidx.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/find_exidx.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <link.h>
+ #include <unwind.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/fpu_control.h uClibc-git/libc/sysdeps/linux/arm/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/getcontext.S uClibc-git/libc/sysdeps/linux/arm/getcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/getcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/getcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,80 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++ .syntax unified
++ .text
++
++/* int getcontext (ucontext_t *ucp) */
++
++ENTRY(__getcontext)
++ /* No need to save r0-r3, d0-d7, or d16-d31. */
++ add r1, r0, #MCONTEXT_ARM_R4
++ stmia r1, {r4-r11}
++
++ /* Save R13 separately as Thumb can't STM it. */
++ str r13, [r0, #MCONTEXT_ARM_SP]
++ str r14, [r0, #MCONTEXT_ARM_LR]
++ /* Return to LR */
++ str r14, [r0, #MCONTEXT_ARM_PC]
++ /* Return zero */
++ mov r2, #0
++ str r2, [r0, #MCONTEXT_ARM_R0]
++
++ /* Save ucontext_t * across the next call. */
++ mov r4, r0
++
++ /* __sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */
++ mov r0, #SIG_BLOCK
++ mov r1, #0
++ add r2, r4, #UCONTEXT_SIGMASK
++ bl PLTJMP(sigprocmask)
++
++#if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
++# ifdef __VFP_FP__
++ /* Store the VFP registers. */
++ /* Following instruction is fstmiax ip!, {d8-d15}. */
++ stc p11, cr8, [r0], #64
++ /* Store the floating-point status register. */
++ /* Following instruction is fmrx r2, fpscr. */
++ mrc p10, 7, r1, cr1, cr0, 0
++ str r1, [r0], #4
++# endif
++#endif
++#ifdef __IWMMXT__
++ /* Save the call-preserved iWMMXt registers. */
++ /* Following instructions are wstrd wr10, [r0], #8 (etc.) */
++ stcl p1, cr10, [r0], #8
++ stcl p1, cr11, [r0], #8
++ stcl p1, cr12, [r0], #8
++ stcl p1, cr13, [r0], #8
++ stcl p1, cr14, [r0], #8
++ stcl p1, cr15, [r0], #8
++#endif
++
++ /* Restore the clobbered R4 and LR. */
++ ldr r14, [r4, #MCONTEXT_ARM_LR]
++ ldr r4, [r4, #MCONTEXT_ARM_R4]
++
++ mov r0, #0
++ DO_RET(r14)
++
++END(__getcontext)
++weak_alias(__getcontext, getcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/ioperm.c uClibc-git/libc/sysdeps/linux/arm/ioperm.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/ioperm.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/ioperm.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* I/O port access on the ARM is something of a fiction. What we do is to
+ map an appropriate area of /dev/mem into user space so that a program
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/iopl.c uClibc-git/libc/sysdeps/linux/arm/iopl.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/iopl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/iopl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/io.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/arm/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++/* Private macros for accessing __jmp_buf contents. ARM version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifdef __UCLIBC_HAS_FPU__
++#define __JMP_BUF_SP 20
++#else
++#define __JMP_BUF_SP 8
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/arm/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,29 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf[__JMP_BUF_SP]))
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#undef _JMPBUF_UNWINDS
++#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
++ ((void *) (address) < (void *) demangle (jmpbuf[__JMP_BUF_SP]))
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[__JMP_BUF_SP] - (_adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/__longjmp.S uClibc-git/libc/sysdeps/linux/arm/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,16 +13,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <bits/arm_asm.h>
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+-
+
+ .global __longjmp
+ .type __longjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/makecontext.c uClibc-git/libc/sysdeps/linux/arm/makecontext.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/makecontext.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/makecontext.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,73 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <stdarg.h>
++#include <ucontext.h>
++
++/* Number of arguments that go in registers. */
++#define NREG_ARGS 4
++
++/* Take a context previously prepared via getcontext() and set to
++ call func() with the given int only args. */
++void
++__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
++{
++ extern void __startcontext (void);
++ unsigned long *funcstack;
++ va_list vl;
++ unsigned long *regptr;
++ unsigned int reg;
++ int misaligned;
++
++ /* Start at the top of stack. */
++ funcstack = (unsigned long *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
++
++ /* Ensure the stack stays eight byte aligned. */
++ misaligned = ((unsigned long) funcstack & 4) != 0;
++
++ if ((argc > NREG_ARGS) && (argc & 1) != 0)
++ misaligned = !misaligned;
++
++ if (misaligned)
++ funcstack -= 1;
++
++ va_start (vl, argc);
++
++ /* Reserve space for the on-stack arguments. */
++ if (argc > NREG_ARGS)
++ funcstack -= (argc - NREG_ARGS);
++
++ ucp->uc_mcontext.arm_sp = (unsigned long) funcstack;
++ ucp->uc_mcontext.arm_pc = (unsigned long) func;
++
++ /* Exit to startcontext() with the next context in R4 */
++ ucp->uc_mcontext.arm_r4 = (unsigned long) ucp->uc_link;
++ ucp->uc_mcontext.arm_lr = (unsigned long) __startcontext;
++
++ /* The first four arguments go into registers. */
++ regptr = &(ucp->uc_mcontext.arm_r0);
++
++ for (reg = 0; (reg < argc) && (reg < NREG_ARGS); reg++)
++ *regptr++ = va_arg (vl, unsigned long);
++
++ /* And the remainder on the stack. */
++ for (; reg < argc; reg++)
++ *funcstack++ = va_arg (vl, unsigned long);
++
++ va_end (vl);
++}
++weak_alias (__makecontext, makecontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/Makefile.arch uClibc-git/libc/sysdeps/linux/arm/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,42 +5,40 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c ioperm.c iopl.c mmap.c __syscall_error.c sigaction.c
++CSRC-y := brk.c ioperm.c iopl.c __syscall_error.c sigaction.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S setjmp.S bsd-setjmp.S \
+- bsd-_setjmp.S sigrestorer.S mmap64.S \
++ bsd-_setjmp.S sigrestorer.S \
+ vfork.S clone.S
+
+-ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-SSRC += libc-aeabi_read_tp.S libc-thumb_atomics.S
+-endif
+-
+-ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
+-CSRC += posix_fadvise.c posix_fadvise64.c
+-endif
++SSRC-$(UCLIBC_HAS_LFS) += mmap64.S
++SSRC-$(UCLIBC_HAS_THREADS_NATIVE) += libc-aeabi_read_tp.S libc-thumb_atomics.S
++CSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.c
++SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += getcontext.S setcontext.S swapcontext.S
+
+ # Is our compiler set up for EABI ?
+-IS_EABI:=$(shell $(CC) $(CFLAGS) -x c - -E -dM </dev/null 2>/dev/null \
+- | grep __ARM_EABI__ 2>&1 >/dev/null && echo 'y' \
+- )
++CC_IS_EABI_CHECK = $(filter-out -include libc-symbols.h,$(CC) $(CFLAGS))
++$(eval $(call cache-output-var,IS_EABI,$(CC_IS_EABI_CHECK) -x c - -E -dM </dev/null 2>/dev/null | grep __ARM_EABI__ 2>&1 >/dev/null && echo 'y'))
+
+-ifeq ($(IS_EABI),y)
+-CSRC += aeabi_assert.c aeabi_atexit.c aeabi_errno_addr.c \
++CSRC-$(IS_EABI) += aeabi_assert.c aeabi_atexit.c aeabi_errno_addr.c \
+ aeabi_localeconv.c aeabi_memclr.c aeabi_memcpy.c \
+ aeabi_memmove.c aeabi_memset.c find_exidx.c
+-SSRC += syscall-eabi.S
+-ARCH_OBJ_FILTEROUT := syscall.c
+-ifeq ($(UCLIBC_HAS_WCHAR),y)
+-CSRC += aeabi_mb_cur_max.c
+-endif
+-else
+-CSRC += syscall.c
+-endif
+-
++SSRC-$(IS_EABI) += syscall-eabi.S
++CSRC-$(if $(IS_EABI),,y)) += syscall.c
++ARCH_OBJ_FILTEROUT-$(IS_EABI) := syscall.c
+ ifeq ($(IS_EABI),y)
+-libc-static-y += $(ARCH_OUT)/aeabi_lcsts.o $(ARCH_OUT)/aeabi_math.o \
+- $(ARCH_OUT)/aeabi_sighandlers.o
+-libc-nonshared-y += $(ARCH_OUT)/aeabi_lcsts.os $(ARCH_OUT)/aeabi_math.os \
+- $(ARCH_OUT)/aeabi_sighandlers.os $(ARCH_OUT)/aeabi_unwind_cpp_pr1.o
++CSRC-$(UCLIBC_HAS_WCHAR) += aeabi_mb_cur_max.c
+ endif
++
++libc-static-$(IS_EABI) += $(addprefix $(ARCH_OUT)/, \
++ aeabi_lcsts.o \
++ aeabi_math.o \
++ aeabi_sighandlers.o \
++ )
++libc-nonshared-$(IS_EABI) += $(addprefix $(ARCH_OUT)/, \
++ aeabi_lcsts.os \
++ aeabi_math.os \
++ aeabi_sighandlers.os \
++ aeabi_unwind_cpp_pr1.o \
++ )
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/mmap64.S uClibc-git/libc/sysdeps/linux/arm/mmap64.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/mmap64.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/mmap64.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,17 +12,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
++#include <_lfs_64.h>
+ #define _ERRNO_H
+ #include <bits/errno.h>
+ #include <sys/syscall.h>
+ #include <bits/arm_asm.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_mmap2
++#ifdef __NR_mmap2
+
+ /* The mmap2 system call takes six arguments, all in registers. */
+ .text
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/mmap.c uClibc-git/libc/sysdeps/linux/arm/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,74 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * _mmap() for uClibc
+- *
+- * Copyright (C) 2000-2004 by Erik Andersen <andersen@codepoet.org>
+- *
+- * GNU Library General Public License (LGPL) version 2 or later.
+- */
+-#include <errno.h>
+-#include <unistd.h>
+-#include <sys/mman.h>
+-#include <sys/syscall.h>
+-
+-#if defined (__NR_mmap) || defined (__NR_mmap2)
+-
+-libc_hidden_proto(mmap)
+-#if defined (__UCLIBC_MMAP_HAS_6_ARGS__) && defined (__NR_mmap)
+-#define __NR__mmap __NR_mmap
+-static __inline__ _syscall6 (__ptr_t, _mmap, __ptr_t, addr, size_t, len,
+- int, prot, int, flags, int, fd, __off_t, offset)
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot,
+- int flags, int fd, __off_t offset)
+-{
+- return (__ptr_t) _mmap (addr, len, prot, flags,
+- fd, offset);
+-}
+-
+-#elif defined (__NR_mmap2)
+-#define __NR__mmap __NR_mmap2
+-
+-#ifndef MMAP2_PAGE_SHIFT
+-# define MMAP2_PAGE_SHIFT 12
+-#endif
+-
+-static __inline__ _syscall6 (__ptr_t, _mmap, __ptr_t, addr, size_t, len,
+- int, prot, int, flags, int, fd, __off_t, offset);
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot,
+- int flags, int fd, __off_t offset)
+-{
+- /* check if offset is page aligned */
+- if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1))
+- {
+- __set_errno(EINVAL);
+- return MAP_FAILED;
+- }
+-#ifdef __USE_FILE_OFFSET64
+- return (__ptr_t) _mmap (addr, len, prot, flags,
+- fd, ((__u_quad_t) offset >> MMAP2_PAGE_SHIFT));
+-#else
+- return (__ptr_t) _mmap (addr, len, prot, flags,
+- fd, ((__u_long) offset >> MMAP2_PAGE_SHIFT));
+-#endif
+-}
+-#elif defined (__NR_mmap)
+-# define __NR__mmap __NR_mmap
+-static __inline__ _syscall1(__ptr_t, _mmap, unsigned long *, buffer)
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot,
+- int flags, int fd, __off_t offset)
+-{
+- unsigned long buffer[6];
+-
+- buffer[0] = (unsigned long) addr;
+- buffer[1] = (unsigned long) len;
+- buffer[2] = (unsigned long) prot;
+- buffer[3] = (unsigned long) flags;
+- buffer[4] = (unsigned long) fd;
+- buffer[5] = (unsigned long) offset;
+- return (__ptr_t) _mmap(buffer);
+-}
+-#endif
+-libc_hidden_def (mmap)
+-#else
+-# error "Your architecture doesn't seem to provide mmap() !?"
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/posix_fadvise64.c uClibc-git/libc/sysdeps/linux/arm/posix_fadvise64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/posix_fadvise64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/posix_fadvise64.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,59 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * posix_fadvise64() for ARM uClibc
+- * http://www.opengroup.org/onlinepubs/009695399/functions/posix_fadvise.html
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <fcntl.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-
+-#if defined __NR_arm_fadvise64_64
+-
+-/* Was named __libc_posix_fadvise64 for some inexplicable reason.
+-** google says only uclibc has *__libc*_posix_fadviseXXX,
+-** so it cannot be compat with anything.
+-**
+-** Remove this comment and one at the end after 0.9.31
+-*/
+-
+-/* This is for the ARM version of fadvise64_64 which swaps the params
+- * about to avoid having ABI compat issues
+- */
+-#define __NR___syscall_arm_fadvise64_64 __NR_arm_fadvise64_64
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advise)
+-{
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (arm_fadvise64_64, err, 6, fd, advise,
+- __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset),
+- __LONG_LONG_PAIR ((long)(len >> 32), (long)len));
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- if (INTERNAL_SYSCALL_ERRNO (ret, err) != ENOSYS)
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+- return 0;
+-}
+-
+-/* weak_alias(__libc_posix_fadvise64, posix_fadvise64); */
+-
+-#elif defined __UCLIBC_HAS_STUBS__
+-
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advise)
+-{
+- return ENOSYS;
+-}
+-
+-#endif
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/posix_fadvise.c uClibc-git/libc/sysdeps/linux/arm/posix_fadvise.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/posix_fadvise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/posix_fadvise.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,49 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * posix_fadvise() for ARM uClibc
+- * http://www.opengroup.org/onlinepubs/009695399/functions/posix_fadvise.html
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-#include <sys/syscall.h>
+-#include <fcntl.h>
+-
+-#if defined __NR_arm_fadvise64_64
+-
+-#define HIGH_BITS(x) (sizeof(x) > 4 ? (x) >> 32 : 0)
+-
+-/* Was named __libc_posix_fadvise for some inexplicable reason.
+-** google says only uclibc has *__libc*_posix_fadviseXXX,
+-** so it cannot be compat with anything.
+-**
+-** Remove this comment and one at the end after 0.9.31
+-*/
+-
+-/* This is for the ARM version of fadvise64_64 which swaps the params
+- * about to avoid having ABI compat issues
+- */
+-#define __NR___syscall_arm_fadvise64_64 __NR_arm_fadvise64_64
+-int posix_fadvise(int fd, off_t offset, off_t len, int advise)
+-{
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (arm_fadvise64_64, err, 6, fd, advise,
+- __LONG_LONG_PAIR (HIGH_BITS(offset), (long)offset),
+- __LONG_LONG_PAIR (HIGH_BITS(len), (long)len));
+-
+- if (INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+- return 0;
+-}
+-
+-/* weak_alias(__libc_posix_fadvise, posix_fadvise); */
+-
+-#elif defined __UCLIBC_HAS_STUBS__
+-
+-int posix_fadvise(int fd attribute_unused, off_t offset attribute_unused, off_t len attribute_unused, int advice attribute_unused)
+-{
+- return ENOSYS;
+-}
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/setcontext.S uClibc-git/libc/sysdeps/linux/arm/setcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/setcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/setcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,76 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++ .syntax unified
++ .text
++
++/* int setcontext (const ucontext_t *ucp) */
++
++ENTRY(__setcontext)
++ mov r4, r0
++
++#if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
++# ifdef __VFP_FP__
++ /* Following instruction is vldmia r0!, {d8-d15}. */
++ ldc p11, cr8, [r0], #64
++ /* Restore the floating-point status register. */
++ ldr r1, [r0], #4
++ /* Following instruction is fmxr fpscr, r1. */
++ mcr p10, 7, r1, cr1, cr0, 0
++# endif
++#endif
++
++#ifdef __IWMMXT__
++ /* Restore the call-preserved iWMMXt registers. */
++ /* Following instructions are wldrd wr10, [r0], #8 (etc.) */
++ ldcl p1, cr10, [r0], #8
++ ldcl p1, cr11, [r0], #8
++ ldcl p1, cr12, [r0], #8
++ ldcl p1, cr13, [r0], #8
++ ldcl p1, cr14, [r0], #8
++ ldcl p1, cr15, [r0], #8
++#endif
++
++ /* Now bring back the signal status. */
++ mov r0, #SIG_SETMASK
++ add r1, r4, #UCONTEXT_SIGMASK
++ mov r2, #0
++ bl PLTJMP(sigprocmask)
++
++ /* Loading r0-r3 makes makecontext easier. */
++ add r14, r4, #MCONTEXT_ARM_R0
++ ldmia r14, {r0-r11}
++ ldr r13, [r14, #(MCONTEXT_ARM_SP - MCONTEXT_ARM_R0)]
++ add r14, r14, #(MCONTEXT_ARM_LR - MCONTEXT_ARM_R0)
++ ldmia r14, {r14, pc}
++
++END(setcontext)
++weak_alias(__setcontext, setcontext)
++
++ /* Called when a makecontext() context returns. Start the
++ context in R4 or fall through to exit(). */
++ENTRY(__startcontext)
++ movs r0, r4
++ bne PLTJMP(__setcontext)
++
++ @ New context was 0 - exit
++ b PLTJMP(_exit)
++END(__startcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/setjmp.S uClibc-git/libc/sysdeps/linux/arm/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <bits/arm_asm.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sigaction.c uClibc-git/libc/sysdeps/linux/arm/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
+
+ Totally hacked up for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+@@ -29,8 +28,6 @@
+ extern void __default_sa_restorer(void);
+ extern void __default_rt_sa_restorer(void);
+
+-extern __typeof(sigaction) __libc_sigaction;
+-
+ /* When RT signals are in use we need to use a different return stub. */
+ #ifdef __NR_rt_sigreturn
+ #define choose_restorer(flags) \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sigrestorer.S uClibc-git/libc/sysdeps/linux/arm/sigrestorer.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sigrestorer.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sigrestorer.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <bits/arm_asm.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/swapcontext.S uClibc-git/libc/sysdeps/linux/arm/swapcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/swapcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/swapcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,63 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++ .syntax unified
++ .text
++
++/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */
++
++ENTRY(swapcontext)
++
++ /* Have getcontext() do most of the work then fix up
++ LR afterwards. Save R3 to keep the stack aligned. */
++ push {r0,r1,r3,r14}
++ cfi_adjust_cfa_offset (16)
++ cfi_rel_offset (r0,0)
++ cfi_rel_offset (r1,4)
++ cfi_rel_offset (r3,8)
++ cfi_rel_offset (r14,12)
++
++ bl __getcontext
++ mov r4, r0
++
++ pop {r0,r1,r3,r14}
++ cfi_adjust_cfa_offset (-16)
++ cfi_restore (r0)
++ cfi_restore (r1)
++ cfi_restore (r3)
++ cfi_restore (r14)
++
++ /* Exit if getcontext() failed. */
++ cmp r4, #0
++ itt ne
++ movne r0, r4
++ RETINSTR(ne, r14)
++
++ /* Fix up LR and the PC. */
++ str r13,[r0, #MCONTEXT_ARM_SP]
++ str r14,[r0, #MCONTEXT_ARM_LR]
++ str r14,[r0, #MCONTEXT_ARM_PC]
++
++ /* And swap using swapcontext(). */
++ mov r0, r1
++ b __setcontext
++
++END(swapcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/elf.h uClibc-git/libc/sysdeps/linux/arm/sys/elf.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/elf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sys/elf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ELF_H
+ #define _SYS_ELF_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/io.h uClibc-git/libc/sysdeps/linux/arm/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+
+@@ -23,6 +22,7 @@
+
+ __BEGIN_DECLS
+
++#if defined __UCLIBC_LINUX_SPECIFIC__
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges. */
+@@ -34,6 +34,7 @@
+ permission to access any I/O port is granted. This call requires
+ root privileges. */
+ extern int iopl (int __level) __THROW;
++#endif /* __UCLIBC_LINUX_SPECIFIC__ */
+
+ /* The functions that actually perform reads and writes. */
+ extern unsigned char inb (unsigned long int port) __THROW;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/procfs.h uClibc-git/libc/sysdeps/linux/arm/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/ucontext.h uClibc-git/libc/sysdeps/linux/arm/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* System V/ARM ABI compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/user.h uClibc-git/libc/sysdeps/linux/arm/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/syscall-eabi.S uClibc-git/libc/sysdeps/linux/arm/syscall-eabi.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/syscall-eabi.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/syscall-eabi.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/syscall.h>
+ #include <bits/arm_asm.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/sysdep.h uClibc-git/libc/sysdeps/linux/arm/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINUX_ARM_SYSDEP_H
+ #define _LINUX_ARM_SYSDEP_H 1
+@@ -157,6 +156,7 @@
+ #define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
++#undef ret_ERRVAL
+ #define ret_ERRVAL PSEUDO_RET_NOERRNO
+
+ #if defined NOT_IN_libc
+@@ -254,7 +254,7 @@
+ #undef INLINE_SYSCALL
+ #define INLINE_SYSCALL(name, nr, args...) \
+ ({ unsigned int _inline_sys_result = INTERNAL_SYSCALL (name, , nr, args); \
+- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_inline_sys_result, ), 0)) \
++ if (unlikely (INTERNAL_SYSCALL_ERROR_P (_inline_sys_result, ))) \
+ { \
+ __set_errno (INTERNAL_SYSCALL_ERRNO (_inline_sys_result, )); \
+ _inline_sys_result = (unsigned int) -1; \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/ucontext_i.sym uClibc-git/libc/sysdeps/linux/arm/ucontext_i.sym
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/ucontext_i.sym 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/arm/ucontext_i.sym 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,30 @@
++#include <inttypes.h>
++#include <signal.h>
++#include <stddef.h>
++#include <sys/ucontext.h>
++
++SIG_BLOCK
++SIG_SETMASK
++
++-- Offsets of the fields in the ucontext_t structure.
++#define ucontext(member) offsetof (ucontext_t, member)
++#define mcontext(member) ucontext (uc_mcontext.member)
++
++UCONTEXT_FLAGS ucontext (uc_flags)
++UCONTEXT_LINK ucontext (uc_link)
++UCONTEXT_STACK ucontext (uc_stack)
++UCONTEXT_MCONTEXT ucontext (uc_mcontext)
++UCONTEXT_SIGMASK ucontext (uc_sigmask)
++
++UCONTEXT_REGSPACE ucontext (uc_regspace)
++
++MCONTEXT_TRAP_NO mcontext (trap_no)
++MCONTEXT_ERROR_CODE mcontext (error_code)
++MCONTEXT_OLDMASK mcontext (oldmask)
++MCONTEXT_ARM_R0 mcontext (arm_r0)
++MCONTEXT_ARM_R4 mcontext (arm_r4)
++MCONTEXT_ARM_SP mcontext (arm_sp)
++MCONTEXT_ARM_LR mcontext (arm_lr)
++MCONTEXT_ARM_PC mcontext (arm_pc)
++MCONTEXT_ARM_CPSR mcontext (arm_cpsr)
++MCONTEXT_FAULT_ADDRESS mcontext (fault_address)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/unwind.h uClibc-git/libc/sysdeps/linux/arm/unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -22,9 +22,8 @@
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+- along with this program; see the file COPYING. If not, write to
+- the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ along with this program; see the file COPYING. If not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Language-independent unwinder header public defines. This contains both
+ ABI defined objects, and GNU support routines. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/vfork.S uClibc-git/libc/sysdeps/linux/arm/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/arm/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -104,5 +104,5 @@
+ .size __vfork,.-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/atomic.h uClibc-git/libc/sysdeps/linux/avr32/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -28,6 +28,7 @@
+
+ #define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
+ ({ \
++ __uint32_t __result; \
+ __typeof__(*(mem)) __prev; \
+ __asm__ __volatile__( \
+ "/* __arch_compare_and_exchange_val_32_acq */\n" \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/avr32/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -39,6 +39,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef unsigned short __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ #ifdef __GNUC__
+ typedef long long __kernel_loff_t;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/setjmp.h uClibc-git/libc/sysdeps/linux/avr32/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,19 +12,10 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ /*
+ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are
+ * not saved.
+ */
+ typedef int __jmp_buf[11];
+-#endif
+-
+-#define __JMP_BUF_SP 4
+-
+-/* Test if longjmp to JMPBUF would unwind the frame containing a local
+- variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP]))
+
+ #endif /* _BITS_SETJMP_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/avr32/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/avr32/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/avr32/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,9 @@
++/* Private macros for accessing __jmp_buf contents. avr32 version.
++ * Copyright (C) 2004-2005 Atmel Corporation
++ *
++ * This file is subject to the terms and conditions of the GNU Lesser General
++ * Public License. See the file "COPYING.LIB" in the main directory of this
++ * archive for more details.
++ */
++
++#define __JMP_BUF_SP 4
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/avr32/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/avr32/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,14 @@
++/*
++ * Copyright (C) 2004-2005 Atmel Corporation
++ *
++ * This file is subject to the terms and conditions of the GNU Lesser General
++ * Public License. See the file "COPYING.LIB" in the main directory of this
++ * archive for more details.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP]))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/Makefile uClibc-git/libc/sysdeps/linux/avr32/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+ # details.
+ #
+ # You should have received a copy of the GNU Library General Public License
+-# along with this program; if not, write to the Free Software Foundation, Inc.,
+-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ top_srcdir=../../../../
+ top_builddir=../../../../
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/Makefile.arch uClibc-git/libc/sysdeps/linux/avr32/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c clone.c mmap.c prctl.c sigaction.c
++CSRC-y := brk.c clone.c mmap.c prctl.c sigaction.c
+
+-SSRC := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
++SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
+ sigrestorer.S syscall.S vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/mmap.c uClibc-git/libc/sysdeps/linux/avr32/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/mmap.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,10 +12,10 @@
+ #include <sys/syscall.h>
+
+
+-static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot,
+- int, flags, int, fd, __off_t, pgoff)
++static __inline__ _syscall6(void *, mmap2, void *, addr, size_t, len, int, prot,
++ int, flags, int, fd, __off_t, pgoff)
+
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++void *mmap(void *addr, size_t len, int prot, int flags, int fd, __off_t offset)
+ {
+ unsigned long page_size = sysconf(_SC_PAGESIZE);
+ unsigned long pgoff;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/setjmp.S uClibc-git/libc/sysdeps/linux/avr32/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -5,9 +5,6 @@
+ * Public License. See the file "COPYING.LIB" in the main directory of this
+ * archive for more details.
+ */
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+
+ .text
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sigaction.c uClibc-git/libc/sysdeps/linux/avr32/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,6 @@
+ #define SA_RESTORER 0x04000000
+ extern void __default_rt_sa_restorer(void);
+
+-extern __typeof(sigaction) __libc_sigaction;
+-
+ /*
+ * If act is not NULL, change the action for sig to *act.
+ * If oact is not NULL, put the old action for sig in *oact.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sys/elf.h uClibc-git/libc/sysdeps/linux/avr32/sys/elf.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sys/elf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/sys/elf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ELF_H
+ #define _SYS_ELF_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sys/procfs.h uClibc-git/libc/sysdeps/linux/avr32/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sys/ucontext.h uClibc-git/libc/sysdeps/linux/avr32/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Linux/AVR32 ABI compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/avr32/vfork.S uClibc-git/libc/sysdeps/linux/avr32/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/avr32/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/avr32/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -17,10 +17,10 @@
+ * Fortunately, the Linux kernel preserves LR across system calls.
+ */
+
+-#include <features.h>
+ #include <sys/syscall.h>
+
+ .global __vfork
++ .hidden __vfork
+ .type __vfork,@function
+ .align 1
+ __vfork:
+@@ -55,4 +55,4 @@
+ .size __vfork, . - __vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/elf-fdpic.h uClibc-git/libc/sysdeps/linux/bfin/bits/elf-fdpic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/elf-fdpic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/elf-fdpic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -22,8 +22,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_ELF_FDPIC_H
+ #define _BITS_ELF_FDPIC_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/fcntl.h uClibc-git/libc/sysdeps/linux/bfin/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/huge_val.h uClibc-git/libc/sysdeps/linux/bfin/bits/huge_val.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/huge_val.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/huge_val.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/bfin/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef unsigned short __kernel_old_gid_t;
+ typedef long long __kernel_loff_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ #ifdef __USE_ALL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/setjmp.h uClibc-git/libc/sysdeps/linux/bfin/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. bfin version. Lineo, Inc. 2001*/
+ #ifndef _BITS_SETJMP_H
+@@ -24,7 +23,6 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ /* Jump buffer contains r7-r4, p5-p3, fp, sp and pc. Other registers are not saved. */
+ typedef struct
+ {
+@@ -45,13 +43,4 @@
+ unsigned long pc;
+ }__jmp_buf[1];
+
+-#endif
+-
+-#define __JMP_BUF_SP 8
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)->fp)
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/bfin/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT int _code, struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS _code,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/bfin/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/typesizes.h uClibc-git/libc/sysdeps/linux/bfin/bits/typesizes.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/typesizes.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/wordsize.h uClibc-git/libc/sysdeps/linux/bfin/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/cacheflush.c uClibc-git/libc/sysdeps/linux/bfin/cacheflush.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/cacheflush.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/cacheflush.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,9 +6,10 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <unistd.h>
+-#include <errno.h>
+ #include <sys/syscall.h>
+-#include <sys/cachectl.h>
+
+-_syscall3 (int, cacheflush, void *, start, const int, nbytes, const int, flags)
++#ifdef __NR_cacheflush
++# include <sys/cachectl.h>
++
++_syscall3 (int, cacheflush, void *, addr, const int, nbytes, const int, flags)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crt1.S uClibc-git/libc/sysdeps/linux/bfin/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+
+ /* When we enter this piece of code, the user stack looks like this:
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crti.S uClibc-git/libc/sysdeps/linux/bfin/crti.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crti.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/crti.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+-along with GCC; see the file COPYING. If not, write to
+-the Free Software Foundation, 59 Temple Place - Suite 330,
+-Boston, MA 02111-1307, USA. */
++along with GCC; see the file COPYING. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ /* As a special exception, if you link this library with files
+ compiled with GCC to produce an executable, this does not cause
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crtn.S uClibc-git/libc/sysdeps/linux/bfin/crtn.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crtn.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/crtn.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+-along with GCC; see the file COPYING. If not, write to
+-the Free Software Foundation, 59 Temple Place - Suite 330,
+-Boston, MA 02111-1307, USA. */
++along with GCC; see the file COPYING. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ /* As a special exception, if you link this library with files
+ compiled with GCC to produce an executable, this does not cause
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crtreloc.c uClibc-git/libc/sysdeps/linux/bfin/crtreloc.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/crtreloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/crtreloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #ifdef __BFIN_FDPIC__
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/bfin/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/bfin/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,8 @@
++/* Private macros for accessing __jmp_buf contents. BFIN version. */
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#define __JMP_BUF_SP 8
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/bfin/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/bfin/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->fp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/Makefile.arch uClibc-git/libc/sysdeps/linux/bfin/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,9 +5,11 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := bsdsetjmp.c clone.c \
+- sram-alloc.c sram-free.c dma-memcpy.c cacheflush.c
++CSRC-y := bsdsetjmp.c clone.c \
++ sram-alloc.c sram-free.c dma-memcpy.c
+
+-SSRC := __longjmp.S setjmp.S bsd-_setjmp.S
++SSRC-y := __longjmp.S setjmp.S bsd-_setjmp.S
++
++CSRC-$(UCLIBC_LINUX_SPECIFIC) += cacheflush.c
+
+ ARCH_HEADERS := bfin_fixed_code.h bfin_l1layout.h bfin_sram.h
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/cachectl.h uClibc-git/libc/sysdeps/linux/bfin/sys/cachectl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/cachectl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/sys/cachectl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -18,7 +18,7 @@
+
+ __BEGIN_DECLS
+
+-extern int cacheflush (void *addr, __const int nbytes, __const int flags);
++extern int cacheflush (void *addr, const int nbytes, const int flags);
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/elf.h uClibc-git/libc/sysdeps/linux/bfin/sys/elf.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/elf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/sys/elf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ELF_H
+ #define _SYS_ELF_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/io.h uClibc-git/libc/sysdeps/linux/bfin/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+
+@@ -23,17 +22,18 @@
+
+ __BEGIN_DECLS
+
++#if defined __UCLIBC_LINUX_SPECIFIC__
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
+ permission to access any I/O port is granted. This call requires
+ root privileges. */
+ extern int iopl (int __level) __THROW;
++#endif /* __UCLIBC_LINUX_SPECIFIC__ */
+
+ /* The functions that actually perform reads and writes. */
+ extern unsigned char inb (unsigned long int port) __THROW;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/procfs.h uClibc-git/libc/sysdeps/linux/bfin/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/ucontext.h uClibc-git/libc/sysdeps/linux/bfin/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/bfin/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/bfin/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* System V/blackfin ABI compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/byteswap.h uClibc-git/libc/sysdeps/linux/c6x/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- *
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #ifndef _ASM_BITS_BYTESWAP_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/elf-dsbt.h uClibc-git/libc/sysdeps/linux/c6x/bits/elf-dsbt.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/elf-dsbt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/elf-dsbt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -25,8 +25,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_ELF_DSBT_H
+ #define _BITS_ELF_DSBT_H
+@@ -59,15 +58,10 @@
+
+ struct elf32_dsbt_loadmap {
+ /* Protocol version number, must be zero. */
+- Elf32_Word version;
+-
+- /* Pointer to DSBT */
+- unsigned *dsbt_table;
+- unsigned dsbt_size;
+- unsigned dsbt_index;
++ Elf32_Half version;
+
+ /* number of segments */
+- Elf32_Word nsegs;
++ Elf32_Half nsegs;
+
+ /* The actual memory map. */
+ struct elf32_dsbt_loadseg segs[0];
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/fcntl.h uClibc-git/libc/sysdeps/linux/c6x/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/ipc.h uClibc-git/libc/sysdeps/linux/c6x/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/c6x/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -22,6 +22,8 @@
+ typedef unsigned int __kernel_old_uid_t;
+ typedef unsigned int __kernel_old_gid_t;
+ typedef unsigned int __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef unsigned int __kernel_size_t;
+ typedef int __kernel_ssize_t;
+ typedef int __kernel_ptrdiff_t;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/mathdef.h uClibc-git/libc/sysdeps/linux/c6x/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/nan.h uClibc-git/libc/sysdeps/linux/c6x/bits/nan.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/nan.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/nan.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/nan.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/poll.h uClibc-git/libc/sysdeps/linux/c6x/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/resource.h uClibc-git/libc/sysdeps/linux/c6x/bits/resource.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/resource.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/resource.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_RESOURCE_H
+ # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/setjmp.h uClibc-git/libc/sysdeps/linux/c6x/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,12 +14,14 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- *
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+-#ifndef _SETJMP_H
++#ifndef _BITS_SETJMP_H
++#define _BITS_SETJMP_H 1
++
++#if !defined _SETJMP_H && !defined _PTHREAD_H
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+@@ -28,12 +30,4 @@
+ unsigned long __pc; /* the return address */
+ } __jmp_buf[1];
+
+-/* the stack pointer (B15) */
+-#define JP_SP 11
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)->__regs[JP_SP])
+-
+-
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/c6x/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT int _code, struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS _code,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/c6x/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/syscalls.h uClibc-git/libc/sysdeps/linux/c6x/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -37,7 +37,7 @@
+ #undef INLINE_SYSCALL
+ #define INLINE_SYSCALL(name, nr, args...) \
+ ({ unsigned int _inline_sys_result = INTERNAL_SYSCALL (name, , nr, args); \
+- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_inline_sys_result, ), 0)) \
++ if (unlikely (INTERNAL_SYSCALL_ERROR_P (_inline_sys_result, ))) \
+ { \
+ __set_errno (INTERNAL_SYSCALL_ERRNO (_inline_sys_result, )); \
+ _inline_sys_result = (unsigned int) -1; \
+@@ -103,7 +103,7 @@
+ register long __B6 __asm__ ("B6") = (long)(arg4); \
+ register long __A8 __asm__ ("A8") = (long)(arg5); \
+ register long __g1 __asm__ ("g1") = __NR_clone; \
+- __asm __volatile (__CLONE_SYSCALL_STRING : \
++ __asm__ __volatile__ (__CLONE_SYSCALL_STRING : \
+ "=r" (__g1), "=r" (__A4), "=r" (__B4) : \
+ "0" (__g1), "1" (__A4), "2" (__B4), \
+ "r" (__A6), "r" (__B6), "r" (__A8) : \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/wordsize.h uClibc-git/libc/sysdeps/linux/c6x/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/brk.c uClibc-git/libc/sysdeps/linux/c6x/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- *
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bsd-_setjmp.s uClibc-git/libc/sysdeps/linux/c6x/bsd-_setjmp.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bsd-_setjmp.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bsd-_setjmp.s 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ ; for more details.
+ ;
+ ; You should have received a copy of the GNU Library General Public License
+- ; along with this program; if not, write to the Free Software Foundation,
+- ; Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ ; along with this program; if not, see <http://www.gnu.org/licenses/>.
+ ;
+
+ .global _setjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/c6x/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ ; for more details.
+ ;
+ ; You should have received a copy of the GNU Library General Public License
+- ; along with this program; if not, write to the Free Software Foundation,
+- ; Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ ; along with this program; if not, see <http://www.gnu.org/licenses/>.
+ ;
+
+ .global setjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/clone.S uClibc-git/libc/sysdeps/linux/c6x/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ ; for more details.
+ ;
+ ; You should have received a copy of the GNU Library General Public License
+- ; along with this program; if not, write to the Free Software Foundation,
+- ; Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ ; along with this program; if not, see <http://www.gnu.org/licenses/>.
+ ;
+ #define __ASSEMBLY__
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/crt1.S uClibc-git/libc/sysdeps/linux/c6x/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+ ; for more details.
+ ;
+ ; You should have received a copy of the GNU Library General Public License
+-; along with this program; if not, write to the Free Software Foundation,
+-; Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++; along with this program; if not, see <http://www.gnu.org/licenses/>.
+ ;
+
+ .text
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/c6x/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/c6x/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,22 @@
++/* Private macros for accessing __jmp_buf contents. c6x version.
++ * Port of uClibc for TMS320C6000 DSP architecture
++ * Copyright (C) 2004 Texas Instruments Incorporated
++ * Author of TMS320C6000 port: Aurelien Jacquiot
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU Library General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
++ */
++
++/* the stack pointer (B15) */
++#define JP_SP 11
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/c6x/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/c6x/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Port of uClibc for TMS320C6000 DSP architecture
++ * Copyright (C) 2004 Texas Instruments Incorporated
++ * Author of TMS320C6000 port: Aurelien Jacquiot
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU Library General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->__regs[JP_SP])
++
++
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/__longjmp.S uClibc-git/libc/sysdeps/linux/c6x/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ ; for more details.
+ ;
+ ; You should have received a copy of the GNU Library General Public License
+- ; along with this program; if not, write to the Free Software Foundation,
+- ; Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ ; along with this program; if not, see <http://www.gnu.org/licenses/>.
+ ;
+
+ .global __longjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/Makefile.arch uClibc-git/libc/sysdeps/linux/c6x/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,6 +5,6 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c pread_write.c syscall.c prctl.c
++CSRC-y := brk.c syscall.c prctl.c
+
+-SSRC := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S _vfork.S
++SSRC-y := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S _vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/pread_write.c uClibc-git/libc/sysdeps/linux/c6x/pread_write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/pread_write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/pread_write.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,103 +0,0 @@
+-/* vi: set sw=4 ts=4:
+- *
+- * Copyright (C) 2002 by Erik Andersen <andersen@uclibc.org>
+- * Based in part on the files
+- * ./sysdeps/unix/sysv/linux/pwrite.c,
+- * ./sysdeps/unix/sysv/linux/pread.c,
+- * sysdeps/posix/pread.c
+- * sysdeps/posix/pwrite.c
+- * from GNU libc 2.2.5, but reworked considerably...
+- *
+- * This program is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU Library General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or (at your
+- * option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful, but WITHOUT
+- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+- * for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- */
+-
+-#define _LARGEFILE64_SOURCE
+-#include <features.h>
+-#undef __OPTIMIZE__
+-/* We absolutely do _NOT_ want interfaces silently
+- * * * renamed under us or very bad things will happen... */
+-#ifdef __USE_FILE_OFFSET64
+-# undef __USE_FILE_OFFSET64
+-#endif
+-
+-
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <unistd.h>
+-#include <stdint.h>
+-
+-extern __typeof(pread) __libc_pread;
+-extern __typeof(pwrite) __libc_pwrite;
+-#ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pread64) __libc_pread64;
+-extern __typeof(pwrite64) __libc_pwrite64;
+-#endif
+-
+-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */
+-# ifdef __NR_pread
+-# error "__NR_pread and __NR_pread64 both defined???"
+-# endif
+-# define __NR_pread __NR_pread64
+-#endif
+-
+-#define __NR___syscall_pread __NR_pread
+-static inline _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf,
+- size_t, count, off_t, offset_hi, off_t, offset_lo);
+-
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return(__syscall_pread(fd,buf,count,offset,offset >> 31));
+-}
+-weak_alias (__libc_pread, pread)
+-
+-#if defined __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return(__syscall_pread(fd, buf, count, low, high));
+-}
+-weak_alias (__libc_pread64, pread64)
+-#endif /* __UCLIBC_HAS_LFS__ */
+-
+-
+-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */
+-# ifdef __NR_pwrite
+-# error "__NR_pwrite and __NR_pwrite64 both defined???"
+-# endif
+-# define __NR_pwrite __NR_pwrite64
+-#endif
+-
+-#define __NR___syscall_pwrite __NR_pwrite
+-static inline _syscall5(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
+- size_t, count, off_t, offset_hi, off_t, offset_lo);
+-
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- return(__syscall_pwrite(fd,buf,count,offset,offset >> 31));
+-}
+-weak_alias (__libc_pwrite, pwrite)
+-
+-#if defined __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return(__syscall_pwrite(fd, buf, count, low, high));
+-}
+-weak_alias (__libc_pwrite64, pwrite64)
+-#endif /* __UCLIBC_HAS_LFS__ */
+-
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/setjmp.s uClibc-git/libc/sysdeps/linux/c6x/setjmp.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/setjmp.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/setjmp.s 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ ; for more details.
+ ;
+ ; You should have received a copy of the GNU Library General Public License
+- ; along with this program; if not, write to the Free Software Foundation,
+- ; Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ ; along with this program; if not, see <http://www.gnu.org/licenses/>.
+ ;
+
+ .global __sigsetjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sigaction.c uClibc-git/libc/sysdeps/linux/c6x/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,8 +17,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA.
++ see <http://www.gnu.org/licenses/>.
+
+ Totally hacked up for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+@@ -34,8 +33,6 @@
+
+ #define SA_RESTORER 0x04000000
+
+-extern __typeof(sigaction) __libc_sigaction;
+-
+ extern void restore_rt(void) __asm__ ("__restore_rt") attribute_hidden;
+ extern void restore(void) __asm__ ("__restore") attribute_hidden;
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/procfs.h uClibc-git/libc/sysdeps/linux/c6x/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/ptrace.h uClibc-git/libc/sysdeps/linux/c6x/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+@@ -112,12 +111,6 @@
+ PTRACE_SYSCALL = 24,
+ #define PT_SYSCALL PTRACE_SYSCALL
+
+- /* Obtain the load map of the main program or the interpreter of the
+- ptraced process, depending on whether the addr argument is
+- (void*)0 or (void*)1, respectively. */
+- PTRACE_GETDSBT = 31,
+-#define PT_GETDSBT PTRACE_GETDSBT
+-
+ /* Set ptrace filter options. */
+ PTRACE_SETOPTIONS = 0x4200,
+ #define PT_SETOPTIONS PTRACE_SETOPTIONS
+@@ -135,9 +128,6 @@
+ #define PT_SETSIGINFO PTRACE_SETSIGINFO
+ };
+
+-#define PTRACE_GETDSBT_EXEC ((void*)0) /* [addr] request the executable loadmap */
+-#define PTRACE_GETDSBT_INTERP ((void*)1) /* [addr] request the interpreter loadmap */
+-
+ /* Options set using PTRACE_SETOPTIONS. */
+ enum __ptrace_setoptions {
+ PTRACE_O_TRACESYSGOOD = 0x00000001,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/reg.h uClibc-git/libc/sysdeps/linux/c6x/sys/reg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/reg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/sys/reg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- *
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+ #ifndef _SYS_REG_H
+ #define _SYS_REG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/ucontext.h uClibc-git/libc/sysdeps/linux/c6x/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/user.h uClibc-git/libc/sysdeps/linux/c6x/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/c6x/_vfork.S uClibc-git/libc/sysdeps/linux/c6x/_vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/c6x/_vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/c6x/_vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+ #define __ASSEMBLY__
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/access.c uClibc-git/libc/sysdeps/linux/common/access.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/access.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/access.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,4 +9,14 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++
++#if defined __NR_faccessat && !defined __NR_access
++# include <fcntl.h>
++int access(const char *pathname, int mode)
++{
++ return faccessat(AT_FDCWD, pathname, mode, 0);
++}
++
++#else
+ _syscall2(int, access, const char *, pathname, int, mode)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/alarm.c uClibc-git/libc/sysdeps/linux/common/alarm.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/alarm.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/alarm.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,12 +10,10 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
+-
+ #ifdef __NR_alarm
+ _syscall1(unsigned int, alarm, unsigned int, seconds)
+ #else
+-#include <sys/time.h>
+-
++# include <sys/time.h>
+
+ unsigned int alarm(unsigned int seconds)
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/arch_prctl.c uClibc-git/libc/sysdeps/linux/common/arch_prctl.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/arch_prctl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/arch_prctl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,6 @@
+ #include <sys/syscall.h>
+
+ #ifdef __NR_arch_prctl
+-extern int arch_prctl(int code, unsigned long addr);
++int arch_prctl(int code, unsigned long addr);
+ _syscall2(int, arch_prctl, int, code, unsigned long, addr)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/atomic.h uClibc-git/libc/sysdeps/linux/common/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_ATOMIC_H
+ #define _BITS_ATOMIC_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/byteswap-common.h uClibc-git/libc/sysdeps/linux/common/bits/byteswap-common.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/byteswap-common.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/byteswap-common.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _BYTESWAP_H && !defined _NETINET_IN_H
+ # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/cmathcalls.h uClibc-git/libc/sysdeps/linux/common/bits/cmathcalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/cmathcalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/cmathcalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* NOTE: Because of the special way this file is used by <complex.h>, this
+ file must NOT be protected from multiple inclusion as header files
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/confname.h uClibc-git/libc/sysdeps/linux/common/bits/confname.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/confname.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/confname.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UNISTD_H
+ # error "Never use <bits/confname.h> directly; include <unistd.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/dirent.h uClibc-git/libc/sysdeps/linux/common/bits/dirent.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/dirent.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/dirent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _DIRENT_H
+ # error "Never use <bits/dirent.h> directly; include <dirent.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/dlfcn.h uClibc-git/libc/sysdeps/linux/common/bits/dlfcn.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/dlfcn.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/dlfcn.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _DLFCN_H
+ # error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/environments.h uClibc-git/libc/sysdeps/linux/common/bits/environments.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/environments.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/environments.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UNISTD_H
+ # error "Never include this file directly. Use <unistd.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/errno.h uClibc-git/libc/sysdeps/linux/common/bits/errno.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/errno.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/errno.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef _ERRNO_H
+
+@@ -43,6 +42,11 @@
+ # ifndef __ASSEMBLER__
+ /* Function to get address of global `errno' variable. */
+ extern int *__errno_location (void) __THROW __attribute__ ((__const__));
++# ifdef _LIBC
++# if !defined(__UCLIBC_HAS_TLS__) && !defined(__UCLIBC_HAS_THREADS__)
++extern int weak_const_function *__errno_location(void);
++# endif
++# endif
+ libc_hidden_proto(__errno_location)
+
+ # ifdef __UCLIBC_HAS_THREADS__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/eventfd.h uClibc-git/libc/sysdeps/linux/common/bits/eventfd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/eventfd.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/bits/eventfd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_EVENTFD_H
++# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
++#endif
++
++/* Flags for eventfd. */
++enum
++ {
++ EFD_SEMAPHORE = 00000001,
++#define EFD_SEMAPHORE EFD_SEMAPHORE
++ EFD_CLOEXEC = 02000000,
++#define EFD_CLOEXEC EFD_CLOEXEC
++ EFD_NONBLOCK = 00004000
++#define EFD_NONBLOCK EFD_NONBLOCK
++ };
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/fenv.h uClibc-git/libc/sysdeps/linux/common/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -53,4 +52,4 @@
+ fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) -1l)
++#define FE_DFL_ENV ((const fenv_t *) -1l)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/getopt.h uClibc-git/libc/sysdeps/linux/common/bits/getopt.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/getopt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/getopt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GETOPT_H
+
+@@ -26,31 +25,7 @@
+ # define _GETOPT_H 1
+ #endif
+
+-/* If __GNU_LIBRARY__ is not already defined, either we are being used
+- standalone, or this is the first header included in the source file.
+- If we are being used with glibc, we need to include <features.h>, but
+- that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
+- not defined, include <ctype.h>, which will pull in <features.h> for us
+- if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
+- doesn't flood the namespace with stuff the way some other headers do.) */
+-#if !defined __GNU_LIBRARY__
+-# include <ctype.h>
+-#endif
+-
+-#ifndef __THROW
+-# ifndef __GNUC_PREREQ
+-# define __GNUC_PREREQ(maj, min) (0)
+-# endif
+-# if defined __cplusplus && __GNUC_PREREQ (2,8)
+-# define __THROW throw ()
+-# else
+-# define __THROW
+-# endif
+-#endif
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
++__BEGIN_DECLS
+
+ /* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+@@ -147,17 +122,9 @@
+ arguments to the option '\0'. This behavior is specific to the GNU
+ `getopt'. */
+
+-#if defined __GNU_LIBRARY__ || defined __UCLIBC__
+-/* Many other libraries have conflicting prototypes for getopt, with
+- differences in the consts, in stdlib.h. To avoid compilation
+- errors, only prototype getopt for the GNU C library. */
+ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+ __THROW;
+ libc_hidden_proto(getopt)
+-#else /* not __GNU_LIBRARY__ */
+-extern int getopt ();
+-libc_hidden_proto(getopt)
+-#endif /* __GNU_LIBRARY__ */
+
+ #if defined __UCLIBC_HAS_GNU_GETOPT__ || defined __UCLIBC_HAS_GETOPT_LONG__
+ #ifndef __need_getopt
+@@ -173,9 +140,7 @@
+ #endif
+ #endif
+
+-#ifdef __cplusplus
+-}
+-#endif
++__END_DECLS
+
+ /* Make sure we later can get all the definitions and declarations. */
+ #undef __need_getopt
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/huge_valf.h uClibc-git/libc/sysdeps/linux/common/bits/huge_valf.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/huge_valf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/huge_valf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/huge_valf.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/huge_val.h uClibc-git/libc/sysdeps/linux/common/bits/huge_val.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/huge_val.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/huge_val.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/huge_vall.h uClibc-git/libc/sysdeps/linux/common/bits/huge_vall.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/huge_vall.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/huge_vall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/huge_vall.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/inf.h uClibc-git/libc/sysdeps/linux/common/bits/inf.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/inf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/inf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/inf.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/in.h uClibc-git/libc/sysdeps/linux/common/bits/in.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/in.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/in.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-1999, 2000, 2004 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2013 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Linux version. */
+
+@@ -43,31 +42,49 @@
+ #define IP_ADD_SOURCE_MEMBERSHIP 39 /* ip_mreq_source: join source group */
+ #define IP_DROP_SOURCE_MEMBERSHIP 40 /* ip_mreq_source: leave source group */
+ #define IP_MSFILTER 41
+-#define MCAST_JOIN_GROUP 42 /* group_req: join any-source group */
+-#define MCAST_BLOCK_SOURCE 43 /* group_source_req: block from given group */
+-#define MCAST_UNBLOCK_SOURCE 44 /* group_source_req: unblock from given group*/
+-#define MCAST_LEAVE_GROUP 45 /* group_req: leave any-source group */
+-#define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */
+-#define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/
+-#define MCAST_MSFILTER 48
+-
+-#define MCAST_EXCLUDE 0
+-#define MCAST_INCLUDE 1
+-
+-#define IP_ROUTER_ALERT 5 /* bool */
+-#define IP_PKTINFO 8 /* bool */
+-#define IP_PKTOPTIONS 9
+-#define IP_PMTUDISC 10 /* obsolete name? */
+-#define IP_MTU_DISCOVER 10 /* int; see below */
+-#define IP_RECVERR 11 /* bool */
+-#define IP_RECVTTL 12 /* bool */
+-#define IP_RECVTOS 13 /* bool */
++#if defined __USE_MISC || defined __USE_GNU
++# define MCAST_JOIN_GROUP 42 /* group_req: join any-source group */
++# define MCAST_BLOCK_SOURCE 43 /* group_source_req: block from given group */
++# define MCAST_UNBLOCK_SOURCE 44 /* group_source_req: unblock from given group*/
++# define MCAST_LEAVE_GROUP 45 /* group_req: leave any-source group */
++# define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */
++# define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/
++# define MCAST_MSFILTER 48
++# define IP_MULTICAST_ALL 49
++# define IP_UNICAST_IF 50
++
++# define MCAST_EXCLUDE 0
++# define MCAST_INCLUDE 1
++#endif
++
++#define IP_ROUTER_ALERT 5 /* bool */
++#define IP_PKTINFO 8 /* bool */
++#define IP_PKTOPTIONS 9
++#define IP_PMTUDISC 10 /* obsolete name? */
++#define IP_MTU_DISCOVER 10 /* int; see below */
++#define IP_RECVERR 11 /* bool */
++#define IP_RECVTTL 12 /* bool */
++#define IP_RECVTOS 13 /* bool */
++#define IP_MTU 14 /* int */
++#define IP_FREEBIND 15
++#define IP_IPSEC_POLICY 16
++#define IP_XFRM_POLICY 17
++#define IP_PASSSEC 18
++#define IP_TRANSPARENT 19
++#define IP_MULTICAST_ALL 49 /* bool */
++
++/* TProxy original addresses */
++#define IP_ORIGDSTADDR 20
++#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR
++
++#define IP_MINTTL 21
+
+
+ /* IP_MTU_DISCOVER arguments. */
+ #define IP_PMTUDISC_DONT 0 /* Never send DF frames. */
+ #define IP_PMTUDISC_WANT 1 /* Use per route hints. */
+ #define IP_PMTUDISC_DO 2 /* Always DF. */
++#define IP_PMTUDISC_PROBE 3 /* Ignore dst pmtu. */
+
+ /* To select the IP level. */
+ #define SOL_IP 0
+@@ -76,6 +93,7 @@
+ #define IP_DEFAULT_MULTICAST_LOOP 1
+ #define IP_MAX_MEMBERSHIPS 20
+
++#if defined __USE_MISC || defined __USE_GNU
+ /* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
+ The `ip_dst' field is used for the first-hop gateway when using a
+ source route (this gets put into the header proper). */
+@@ -100,6 +118,7 @@
+ struct in_addr ipi_spec_dst; /* Routing destination address */
+ struct in_addr ipi_addr; /* Header destination address */
+ };
++#endif
+
+ #ifdef __UCLIBC_HAS_IPV6__
+ /* Options for use with `getsockopt' and `setsockopt' at the IPv6 level.
+@@ -159,6 +178,7 @@
+ #define IPV6_PMTUDISC_DONT 0 /* Never send DF frames. */
+ #define IPV6_PMTUDISC_WANT 1 /* Use per route hints. */
+ #define IPV6_PMTUDISC_DO 2 /* Always DF. */
++#define IPV6_PMTUDISC_PROBE 3 /* Ignore dst pmtu. */
+
+ /* Socket level values for IPv6. */
+ #define SOL_IPV6 41
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/initspin.h uClibc-git/libc/sysdeps/linux/common/bits/initspin.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/initspin.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/initspin.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* Initial value of a spinlock. Most platforms should use zero,
+ unless they only implement a "test and clear" operation instead of
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ioctls.h uClibc-git/libc/sysdeps/linux/common/bits/ioctls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ioctls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/ioctls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IOCTL_H
+ # error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ioctl-types.h uClibc-git/libc/sysdeps/linux/common/bits/ioctl-types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ioctl-types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/ioctl-types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IOCTL_H
+ # error "Never use <bits/ioctl-types.h> directly; include <sys/ioctl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ipc.h uClibc-git/libc/sysdeps/linux/common/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/kernel-features.h uClibc-git/libc/sysdeps/linux/common/bits/kernel-features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/kernel-features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/kernel-features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file must not contain any C code. At least it must be protected
+ to allow using the file also in assembler files. */
+@@ -311,17 +310,19 @@
+
+ /* Support for various CLOEXEC and NONBLOCK flags was added for x86,
+ * x86-64, PPC, IA-64, and SPARC in 2.6.27. */
+-#if __LINUX_KERNEL_VERSION >= 0x02061b \
+- && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
+- || defined __ia64__ || defined __sparc__ || defined __s390__)
++#if (__LINUX_KERNEL_VERSION >= 0x02061b \
++ && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
++ || defined __ia64__ || defined __sparc__ || defined __s390__) \
++ ) || (__LINUX_KERNEL_VERSION >= 0x020621 && defined __alpha__) \
++ || defined __aarch64__ || defined __tile__
+ /* # define __ASSUME_SOCK_CLOEXEC 1 */
+ /* # define __ASSUME_IN_NONBLOCK 1 */
+ # define __ASSUME_PIPE2 1
+ /* # define __ASSUME_EVENTFD2 1 */
+ /* # define __ASSUME_SIGNALFD4 1 */
++/* # define __ASSUME_DUP3 1 */
+ #endif
+
+-
+ /* These features were surely available with 2.4.12. */
+ #if __LINUX_KERNEL_VERSION >= 132108 && defined __mc68000__
+ # define __ASSUME_MMAP2_SYSCALL 1
+@@ -494,6 +495,14 @@
+ # define __ASSUME_PRIVATE_FUTEX 1
+ #endif
+
++/* Support for fallocate was added in 2.6.23,
++ on s390 only after 2.6.23-rc1, on alpha only after 2.6.33-rc1. */
++#if __LINUX_KERNEL_VERSION >= 0x020617 \
++ && (!defined __s390__ || __LINUX_KERNEL_VERSION >= 0x020618) \
++ && (!defined __alpha__ || __LINUX_KERNEL_VERSION >= 0x020621)
++# define __ASSUME_FALLOCATE 1
++#endif
++
+ /* getcpu is a syscall for x86-64 since 3.1. */
+ #if defined __x86_64__ && __LINUX_KERNEL_VERSION >= 0x030100
+ # define __ASSUME_GETCPU_SYSCALL 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/kernel_sigaction.h uClibc-git/libc/sysdeps/linux/common/bits/kernel_sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/kernel_sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/kernel_sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -19,18 +19,6 @@
+ unsigned long sa_flags;
+ void (*sa_restorer)(void);
+ };
+-/* In uclibc, userspace struct sigaction is identical to
+- * "new" struct kernel_sigaction (one from the Linux 2.1.68 kernel).
+- * See sigaction.h
+- */
+-
+-extern int __syscall_sigaction(int, const struct old_kernel_sigaction *,
+- struct old_kernel_sigaction *);
+-
+ #endif
+
+-
+-extern int __syscall_rt_sigaction(int, const struct sigaction *,
+- struct sigaction *, size_t);
+-
+ #endif /* _BITS_SIGACTION_STRUCT_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/locale.h uClibc-git/libc/sysdeps/linux/common/bits/locale.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/locale.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/locale.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _LOCALE_H && !defined _LANGINFO_H
+ # error "Never use <bits/locale.h> directly; include <locale.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/local_lim.h uClibc-git/libc/sysdeps/linux/common/bits/local_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/local_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+@@ -71,6 +70,8 @@
+
+ /* The number of threads per process. */
+ #define _POSIX_THREAD_THREADS_MAX 64
++/* We have no predefined limit on the number of threads. */
++#undef PTHREAD_THREADS_MAX
+
+ /* Maximum amount by which a process can descrease its asynchronous I/O
+ priority level. */
+@@ -93,3 +94,6 @@
+
+ /* Maximum message queue priority level. */
+ #define MQ_PRIO_MAX 32768
++
++/* Maximum value the semaphore can have. */
++#define SEM_VALUE_MAX (2147483647)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mathcalls.h uClibc-git/libc/sysdeps/linux/common/bits/mathcalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mathcalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/mathcalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* NOTE: Because of the special way this file is used by <math.h>, this
+ file must NOT be protected from multiple inclusion as header files
+@@ -49,7 +48,7 @@
+
+
+ /* __MATHCALLX(type,function,[suffix],args,attrib) and
+- * __MATHCALLI(type,function,[suffix],args) include libm_hidden_def
++ * __MATHCALLI(type,function,[suffix],args) include libm_hidden_proto
+ * (for "double" versions only, xxxf and xxxl do not get this treatment).
+ *
+ * __MATHDECL(type,function,[suffix],args) does not.
+@@ -57,7 +56,7 @@
+ * (it is just a shortcut to __MATHDECL(_Mdouble_,function,[suffix],args)).
+ *
+ * __MATHDECL_PRIV(type,function,[suffix],args,attrib)
+- * includes libm_hidden_def (always) and declares __foo, not foo.
++ * includes libm_hidden_proto (always) and declares __foo, not foo.
+ */
+
+
+@@ -155,7 +154,7 @@
+ __MATHCALLI (exp2,, (_Mdouble_ __x))
+
+ /* Compute base-2 logarithm of X. */
+-__MATHCALL (log2,, (_Mdouble_ __x))
++__MATHCALLI (log2,, (_Mdouble_ __x))
+ __END_NAMESPACE_C99
+ #endif
+
+@@ -223,7 +222,7 @@
+
+
+ /* Return the fractional part of X after dividing out `ilogb (X)'. */
+-__MATHCALL (significand,, (_Mdouble_ __x))
++__MATHCALLI (significand,, (_Mdouble_ __x))
+ #endif /* Use misc. */
+
+ #if defined __USE_MISC || defined __USE_ISOC99
+@@ -236,7 +235,7 @@
+ #ifdef __USE_ISOC99
+ __BEGIN_NAMESPACE_C99
+ /* Return representation of NaN for double type. */
+-__MATHCALLX (nan,, (__const char *__tagb), (__const__))
++__MATHCALLX (nan,, (const char *__tagb), (__const__))
+ __END_NAMESPACE_C99
+ #endif
+
+@@ -278,7 +277,7 @@
+
+ #if defined __USE_MISC || defined __USE_XOPEN
+ /* Obsolete alias for `lgamma'. */
+-__MATHCALL (gamma,, (_Mdouble_))
++__MATHCALLI (gamma,, (_Mdouble_))
+ #endif
+
+ #ifdef __USE_MISC
+@@ -286,6 +285,8 @@
+ `signgam'. The reentrant version instead takes a pointer and stores
+ the value through it. */
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp))
++/* __MATHCALLI does not work here, probably due to ,_r, */
++libm_hidden_proto(lgamma_r)
+ #endif
+
+
+@@ -376,5 +377,5 @@
+ #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) \
+ && defined __UCLIBC_SUSV3_LEGACY__
+ /* Return X times (2 to the Nth power). */
+-__MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n))
++__MATHCALLI (scalb,, (_Mdouble_ __x, _Mdouble_ __n))
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mathdef.h uClibc-git/libc/sysdeps/linux/common/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mman-common.h uClibc-git/libc/sysdeps/linux/common/bits/mman-common.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mman-common.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/mman-common.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+@@ -64,7 +63,7 @@
+ # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
+ # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+ # define MAP_STACK 0x20000 /* Allocation is for a stack. */
+-# define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mqueue.h uClibc-git/libc/sysdeps/linux/common/bits/mqueue.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/mqueue.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/mqueue.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MQUEUE_H
+ # error "Never use <bits/mqueue.h> directly; include <mqueue.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/msq.h uClibc-git/libc/sysdeps/linux/common/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/nan.h uClibc-git/libc/sysdeps/linux/common/bits/nan.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/nan.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/nan.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/nan.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/netdb.h uClibc-git/libc/sysdeps/linux/common/bits/netdb.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/netdb.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/netdb.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _NETDB_H
+ # error "Never include <bits/netdb.h> directly; use <netdb.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/poll.h uClibc-git/libc/sysdeps/linux/common/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/posix1_lim.h uClibc-git/libc/sysdeps/linux/common/bits/posix1_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/posix1_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/posix1_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * POSIX Standard: 2.9.2 Minimum Values Added to <limits.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/posix2_lim.h uClibc-git/libc/sysdeps/linux/common/bits/posix2_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/posix2_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/posix2_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Never include this file directly; include <limits.h> instead.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/posix_opt.h uClibc-git/libc/sysdeps/linux/common/bits/posix_opt.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/posix_opt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/posix_opt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Define POSIX options for Linux.
+- Copyright (C) 1996-2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++ Copyright (C) 1996-2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,12 +13,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+-#ifndef _POSIX_OPT_H
+-#define _POSIX_OPT_H 1
++#ifndef _BITS_POSIX_OPT_H
++#define _BITS_POSIX_OPT_H 1
+
+ /* Job control is supported. */
+ #define _POSIX_JOB_CONTROL 1
+@@ -27,28 +26,28 @@
+ #define _POSIX_SAVED_IDS 1
+
+ /* Priority scheduling is supported. */
+-#define _POSIX_PRIORITY_SCHEDULING 200112L
++#define _POSIX_PRIORITY_SCHEDULING 200809L
+
+ /* Synchronizing file data is supported. */
+-#define _POSIX_SYNCHRONIZED_IO 200112L
++#define _POSIX_SYNCHRONIZED_IO 200809L
+
+ /* The fsync function is present. */
+-#define _POSIX_FSYNC 200112L
++#define _POSIX_FSYNC 200809L
+
+ /* Mapping of files to memory is supported. */
+-#define _POSIX_MAPPED_FILES 200112L
++#define _POSIX_MAPPED_FILES 200809L
+
+ /* Locking of all memory is supported. */
+-#define _POSIX_MEMLOCK 200112L
++#define _POSIX_MEMLOCK 200809L
+
+ /* Locking of ranges of memory is supported. */
+-#define _POSIX_MEMLOCK_RANGE 200112L
++#define _POSIX_MEMLOCK_RANGE 200809L
+
+ /* Setting of memory protections is supported. */
+-#define _POSIX_MEMORY_PROTECTION 200112L
++#define _POSIX_MEMORY_PROTECTION 200809L
+
+-/* Only root can change owner of file. */
+-#define _POSIX_CHOWN_RESTRICTED 1
++/* Some filesystems allow all users to change file ownership. */
++#define _POSIX_CHOWN_RESTRICTED 0
+
+ /* `c_cc' member of 'struct termios' structure can be disabled by
+ using the value _POSIX_VDISABLE. */
+@@ -60,53 +59,67 @@
+ /* X/Open realtime support is available. */
+ #define _XOPEN_REALTIME 1
+
++/* X/Open thread realtime support is available. */
++#define _XOPEN_REALTIME_THREADS 1
++
+ /* XPG4.2 shared memory is supported. */
+ #define _XOPEN_SHM 1
+
+ /* Tell we have POSIX threads. */
+-#define _POSIX_THREADS 200112L
++#define _POSIX_THREADS 200809L
+
+ /* We have the reentrant functions described in POSIX. */
+ #define _POSIX_REENTRANT_FUNCTIONS 1
+-#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
++#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
+
+ /* We provide priority scheduling for threads. */
+-#define _POSIX_THREAD_PRIORITY_SCHEDULING 200112L
++#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
+
+ /* We support user-defined stack sizes. */
+-#define _POSIX_THREAD_ATTR_STACKSIZE 200112L
++#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
+
+ /* We support user-defined stacks. */
+-#define _POSIX_THREAD_ATTR_STACKADDR 200112L
++#define _POSIX_THREAD_ATTR_STACKADDR 200809L
+
+-#ifdef __UCLIBC_HAS_REALTIME__
+-/* We support POSIX.1b semaphores. */
+-#define _POSIX_SEMAPHORES 200112L
++/* We support priority inheritence. */
++#define _POSIX_THREAD_PRIO_INHERIT 200809L
++
++/* We support priority protection, though only for non-robust
++ mutexes. */
++#define _POSIX_THREAD_PRIO_PROTECT 200809L
++
++#ifdef __USE_XOPEN2K8
++/* We support priority inheritence for robust mutexes. */
++# define _POSIX_THREAD_ROBUST_PRIO_INHERIT 200809L
++
++/* We do not support priority protection for robust mutexes. */
++# define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1
+ #endif
+
++/* We support POSIX.1b semaphores. */
++#define _POSIX_SEMAPHORES 200809L
++
+ /* Real-time signals are supported. */
+-#define _POSIX_REALTIME_SIGNALS 200112L
++#define _POSIX_REALTIME_SIGNALS 200809L
+
+ /* We support asynchronous I/O. */
+-#define _POSIX_ASYNCHRONOUS_IO 200112L
++#define _POSIX_ASYNCHRONOUS_IO 200809L
+ #define _POSIX_ASYNC_IO 1
+ /* Alternative name for Unix98. */
+ #define _LFS_ASYNCHRONOUS_IO 1
+ /* Support for prioritization is also available. */
+-#define _POSIX_PRIORITIZED_IO 200112L
++#define _POSIX_PRIORITIZED_IO 200809L
+
+ /* The LFS support in asynchronous I/O is also available. */
+ #define _LFS64_ASYNCHRONOUS_IO 1
+
+-#ifdef __UCLIBC_HAS_LFS__
+ /* The rest of the LFS is also available. */
+ #define _LFS_LARGEFILE 1
+ #define _LFS64_LARGEFILE 1
+ #define _LFS64_STDIO 1
+-#endif
+
+ /* POSIX shared memory objects are implemented. */
+-#define _POSIX_SHARED_MEMORY_OBJECTS 200112L
++#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
+
+ /* CPU-time clocks support needs to be checked at runtime. */
+ #define _POSIX_CPUTIME 0
+@@ -114,61 +127,53 @@
+ /* Clock support in threads must be also checked at runtime. */
+ #define _POSIX_THREAD_CPUTIME 0
+
+-#ifdef __UCLIBC_HAS_REGEX__
+ /* GNU libc provides regular expression handling. */
+ #define _POSIX_REGEXP 1
+-#endif
+
+ /* Reader/Writer locks are available. */
+-#define _POSIX_READER_WRITER_LOCKS 200112L
++#define _POSIX_READER_WRITER_LOCKS 200809L
+
+ /* We have a POSIX shell. */
+ #define _POSIX_SHELL 1
+
+ /* We support the Timeouts option. */
+-#define _POSIX_TIMEOUTS 200112L
++#define _POSIX_TIMEOUTS 200809L
+
+ /* We support spinlocks. */
+-#define _POSIX_SPIN_LOCKS 200112L
++#define _POSIX_SPIN_LOCKS 200809L
+
+ /* The `spawn' function family is supported. */
+-#if 0 /* no support in uClibc (yet) */
+-#define _POSIX_SPAWN 200112L
+-#endif
++#define _POSIX_SPAWN 200809L
+
+ /* We have POSIX timers. */
+-#define _POSIX_TIMERS 200112L
++#define _POSIX_TIMERS 200809L
+
+ /* The barrier functions are available. */
+-#define _POSIX_BARRIERS 200112L
++#define _POSIX_BARRIERS 200809L
+
+ /* POSIX message queues are available. */
+-#define _POSIX_MESSAGE_PASSING 200112L
++#define _POSIX_MESSAGE_PASSING 200809L
+
+ /* Thread process-shared synchronization is supported. */
+-#define _POSIX_THREAD_PROCESS_SHARED 200112L
++#define _POSIX_THREAD_PROCESS_SHARED 200809L
+
+ /* The monotonic clock might be available. */
+ #define _POSIX_MONOTONIC_CLOCK 0
+
+ /* The clock selection interfaces are available. */
+-#define _POSIX_CLOCK_SELECTION 200112L
++#define _POSIX_CLOCK_SELECTION 200809L
+
+ /* Advisory information interfaces are available. */
+-#define _POSIX_ADVISORY_INFO 200112L
++#define _POSIX_ADVISORY_INFO 200809L
+
+-#ifdef __UCLIBC_HAS_IPV6__
+ /* IPv6 support is available. */
+-#define _POSIX_IPV6 200112L
+-#endif
++#define _POSIX_IPV6 200809L
+
+-#ifdef __UCLIBC_HAS_SOCKET__
+ /* Raw socket support is available. */
+-#define _POSIX_RAW_SOCKETS 200112L
+-#endif
++#define _POSIX_RAW_SOCKETS 200809L
+
+ /* We have at least one terminal. */
+-#define _POSIX2_CHAR_TERM 200112L
++#define _POSIX2_CHAR_TERM 200809L
+
+ /* Neither process nor thread sporadic server interfaces is available. */
+ #define _POSIX_SPORADIC_SERVER -1
+@@ -183,8 +188,4 @@
+ /* Typed memory objects are not available. */
+ #define _POSIX_TYPED_MEMORY_OBJECTS -1
+
+-/* No support for priority inheritance or protection so far. */
+-#define _POSIX_THREAD_PRIO_INHERIT -1
+-#define _POSIX_THREAD_PRIO_PROTECT -1
+-
+-#endif /* posix_opt.h */
++#endif /* bits/posix_opt.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/resource.h uClibc-git/libc/sysdeps/linux/common/bits/resource.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/resource.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/resource.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_RESOURCE_H
+ # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sched.h uClibc-git/libc/sysdeps/linux/common/bits/sched.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sched.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sched.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __need_schedparam
+
+@@ -109,6 +108,7 @@
+ /* Size definition for CPU sets. */
+ # define __CPU_SETSIZE 1024
+ # define __NCPUBITS (8 * sizeof (__cpu_mask))
++# include <stdlib.h>
+
+ /* Type for array elements in 'cpu_set_t'. */
+ typedef unsigned long int __cpu_mask;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/select.h uClibc-git/libc/sysdeps/linux/common/bits/select.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/select.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/select.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SELECT_H
+ # error "Never use <bits/select.h> directly; include <sys/select.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sem.h uClibc-git/libc/sysdeps/linux/common/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/shm.h uClibc-git/libc/sysdeps/linux/common/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigaction.h uClibc-git/libc/sysdeps/linux/common/bits/sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/common/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigcontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+ # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/common/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* In general we cannot provide any information. */
+ #define SIGCONTEXT struct sigcontext *
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/siginfo.h uClibc-git/libc/sysdeps/linux/common/bits/siginfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/siginfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/siginfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined __need_siginfo_t \
+ && !defined __need_sigevent_t
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/signum.h uClibc-git/libc/sysdeps/linux/common/bits/signum.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/signum.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/signum.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef _SIGNAL_H
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigset.h uClibc-git/libc/sysdeps/linux/common/bits/sigset.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigset.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sigset.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGSET_H_types
+ # define _SIGSET_H_types 1
+@@ -153,7 +152,7 @@
+ checking is done in the non __ versions. */
+
+ # if !defined __USE_EXTERN_INLINES || defined __PROVIDE_OUT_OF_LINE_SIGSETFN
+-extern int __sigismember (__const __sigset_t *, int);
++extern int __sigismember (const __sigset_t *, int);
+ libc_hidden_proto(__sigismember)
+ extern int __sigaddset (__sigset_t *, int);
+ libc_hidden_proto(__sigaddset)
+@@ -179,7 +178,7 @@
+ return BODY; \
+ }
+
+-__SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, __const)
++__SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, const)
+ __SIGSETFN (__sigaddset, ((__set->__val[__word] |= __mask), 0), )
+ __SIGSETFN (__sigdelset, ((__set->__val[__word] &= ~__mask), 0), )
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigstack.h uClibc-git/libc/sysdeps/linux/common/bits/sigstack.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigstack.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sigstack.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include this file directly. Use <signal.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigthread.h uClibc-git/libc/sysdeps/linux/common/bits/sigthread.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sigthread.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sigthread.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SIGTHREAD_H
+ #define _BITS_SIGTHREAD_H 1
+@@ -29,7 +28,7 @@
+ /* Modify the signal mask for the calling thread. The arguments have
+ the same meaning as for sigprocmask(2). */
+ extern int pthread_sigmask (int __how,
+- __const __sigset_t *__restrict __newmask,
++ const __sigset_t *__restrict __newmask,
+ __sigset_t *__restrict __oldmask)__THROW;
+
+ /* Send signal SIGNO to the given thread. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sockaddr.h uClibc-git/libc/sysdeps/linux/common/bits/sockaddr.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/sockaddr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/sockaddr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Never include this file directly; use <sys/socket.h> instead.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/socket.h uClibc-git/libc/sysdeps/linux/common/bits/socket.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/socket.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/socket.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,6 @@
+ /* System-specific socket constants and types. Linux version.
+- Copyright (C) 1991,1992,1994-2001,2004,2006 Free Software Foundation, Inc.
++ Copyright (C) 1991,1992,1994-2001,2004,2006-2012
++ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,19 +14,17 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef __BITS_SOCKET_H
+ #define __BITS_SOCKET_H
+
+-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
++#ifndef _SYS_SOCKET_H
+ # error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+ #endif
+
+ #define __need_size_t
+-#define __need_NULL
+ #include <stddef.h>
+
+ #include <limits.h>
+@@ -37,37 +36,8 @@
+ # define __socklen_t_defined
+ #endif
+
+-/* Types of sockets. */
+-enum __socket_type
+-{
+- SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
+- byte streams. */
+-#define SOCK_STREAM SOCK_STREAM
+- SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
+- of fixed maximum length. */
+-#define SOCK_DGRAM SOCK_DGRAM
+- SOCK_RAW = 3, /* Raw protocol interface. */
+-#define SOCK_RAW SOCK_RAW
+- SOCK_RDM = 4, /* Reliably-delivered messages. */
+-#define SOCK_RDM SOCK_RDM
+- SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
+- datagrams of fixed maximum length. */
+-#define SOCK_SEQPACKET SOCK_SEQPACKET
+- SOCK_PACKET = 10, /* Linux specific way of getting packets
+- at the dev level. For writing rarp and
+- other similar things on the user level. */
+-#define SOCK_PACKET SOCK_PACKET
+-
+- /* Flags to be ORed into the type parameter of socket and socketpair and
+- used for the flags parameter of paccept. */
+-
+- SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
+- new descriptor(s). */
+-#define SOCK_CLOEXEC SOCK_CLOEXEC
+- SOCK_NONBLOCK = 04000 /* Atomically mark descriptor(s) as
+- non-blocking. */
+-#define SOCK_NONBLOCK SOCK_NONBLOCK
+-};
++/* Get the architecture-dependent definition of enum __socket_type. */
++#include <bits/socket_type.h>
+
+ /* Protocol families. */
+ #define PF_UNSPEC 0 /* Unspecified. */
+@@ -94,22 +64,24 @@
+ #define PF_ASH 18 /* Ash. */
+ #define PF_ECONET 19 /* Acorn Econet. */
+ #define PF_ATMSVC 20 /* ATM SVCs. */
++#define PF_RDS 21 /* RDS sockets. */
+ #define PF_SNA 22 /* Linux SNA Project */
+ #define PF_IRDA 23 /* IRDA sockets. */
+ #define PF_PPPOX 24 /* PPPoX sockets. */
+ #define PF_WANPIPE 25 /* Wanpipe API sockets. */
+-#define PF_LLC 26 /* Linux LLC. */
+-#define PF_CAN 29 /* Controller Area Network. */
+-#define PF_TIPC 30 /* TIPC sockets. */
++#define PF_LLC 26 /* Linux LLC. */
++#define PF_CAN 29 /* Controller Area Network. */
++#define PF_TIPC 30 /* TIPC sockets. */
+ #define PF_BLUETOOTH 31 /* Bluetooth sockets. */
+ #define PF_IUCV 32 /* IUCV sockets. */
+-#define PF_RXRPC 33 /* RxRPC sockets. */
+-#define PF_ISDN 34 /* mISDN sockets. */
+-#define PF_PHONET 35 /* Phonet sockets. */
+-#define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */
+-#define PF_CAIF 37 /* CAIF sockets. */
+-#define PF_ALG 38 /* Algorithm sockets. */
+-#define PF_MAX 39 /* For now.. */
++#define PF_RXRPC 33 /* RxRPC sockets. */
++#define PF_ISDN 34 /* mISDN sockets. */
++#define PF_PHONET 35 /* Phonet sockets. */
++#define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */
++#define PF_CAIF 37 /* CAIF sockets. */
++#define PF_ALG 38 /* Algorithm sockets. */
++#define PF_NFC 39 /* NFC sockets. */
++#define PF_MAX 40 /* For now.. */
+
+ /* Address families. */
+ #define AF_UNSPEC PF_UNSPEC
+@@ -136,21 +108,23 @@
+ #define AF_ASH PF_ASH
+ #define AF_ECONET PF_ECONET
+ #define AF_ATMSVC PF_ATMSVC
++#define AF_RDS PF_RDS
+ #define AF_SNA PF_SNA
+ #define AF_IRDA PF_IRDA
+ #define AF_PPPOX PF_PPPOX
+ #define AF_WANPIPE PF_WANPIPE
+-#define AF_LLC PF_LLC
+-#define AF_CAN PF_CAN
+-#define AF_TIPC PF_TIPC
++#define AF_LLC PF_LLC
++#define AF_CAN PF_CAN
++#define AF_TIPC PF_TIPC
+ #define AF_BLUETOOTH PF_BLUETOOTH
+-#define AF_IUCV PF_IUCV
+-#define AF_RXRPC PF_RXRPC
+-#define AF_ISDN PF_ISDN
+-#define AF_PHONET PF_PHONET
+-#define AF_IEEE802154 PF_IEEE802154
+-#define AF_CAIF PF_CAIF
+-#define AF_ALG PF_ALG
++#define AF_IUCV PF_IUCV
++#define AF_RXRPC PF_RXRPC
++#define AF_ISDN PF_ISDN
++#define AF_PHONET PF_PHONET
++#define AF_IEEE802154 PF_IEEE802154
++#define AF_CAIF PF_CAIF
++#define AF_ALG PF_ALG
++#define AF_NFC PF_NFC
+ #define AF_MAX PF_MAX
+
+ /* Socket level values. Others are defined in the appropriate headers.
+@@ -235,8 +209,14 @@
+ #define MSG_ERRQUEUE MSG_ERRQUEUE
+ MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */
+ #define MSG_NOSIGNAL MSG_NOSIGNAL
+- MSG_MORE = 0x8000 /* Sender will send more. */
++ MSG_MORE = 0x8000, /* Sender will send more. */
+ #define MSG_MORE MSG_MORE
++ MSG_WAITFORONE = 0x10000, /* Wait for at least one packet to return.*/
++#define MSG_WAITFORONE MSG_WAITFORONE
++ MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file
++ descriptor received through
++ SCM_RIGHTS. */
++#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+ };
+
+
+@@ -290,7 +270,7 @@
+ #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+ #define CMSG_FIRSTHDR(mhdr) \
+ ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
+- ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
++ ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
+ #define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+ & (size_t) ~(sizeof (size_t) - 1))
+ #define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+@@ -302,14 +282,14 @@
+ libc_hidden_proto(__cmsg_nxthdr)
+ #ifdef __USE_EXTERN_INLINES
+ # ifndef _EXTERN_INLINE
+-# define _EXTERN_INLINE extern __inline
++# define _EXTERN_INLINE __extern_inline
+ # endif
+ _EXTERN_INLINE struct cmsghdr *
+ __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+ {
+ if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+ /* The kernel header does this so there may be a reason. */
+- return 0;
++ return (struct cmsghdr *) 0;
+
+ __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+ + CMSG_ALIGN (__cmsg->cmsg_len));
+@@ -318,7 +298,7 @@
+ || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+ > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+ /* No more entries. */
+- return 0;
++ return (struct cmsghdr *) 0;
+ return __cmsg;
+ }
+ #endif /* Use `extern inline'. */
+@@ -329,20 +309,21 @@
+ {
+ SCM_RIGHTS = 0x01 /* Transfer file descriptors. */
+ #define SCM_RIGHTS SCM_RIGHTS
+-#ifdef __USE_BSD
++#ifdef __USE_GNU
+ , SCM_CREDENTIALS = 0x02 /* Credentials passing. */
+ # define SCM_CREDENTIALS SCM_CREDENTIALS
+ #endif
+ };
+
++#ifdef __USE_GNU
+ /* User visible structure for SCM_CREDENTIALS message */
+-
+ struct ucred
+ {
+ pid_t pid; /* PID of sending process. */
+ uid_t uid; /* UID of sending process. */
+ gid_t gid; /* GID of sending process. */
+ };
++#endif
+
+ /* Get socket manipulation related informations from kernel headers. */
+ #ifndef __GLIBC__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/socket_type.h uClibc-git/libc/sysdeps/linux/common/bits/socket_type.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/socket_type.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/bits/socket_type.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,54 @@
++/* Define enum __socket_type for generic Linux.
++ Copyright (C) 1991-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets. */
++enum __socket_type
++{
++ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
++ byte streams. */
++#define SOCK_STREAM SOCK_STREAM
++ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
++ of fixed maximum length. */
++#define SOCK_DGRAM SOCK_DGRAM
++ SOCK_RAW = 3, /* Raw protocol interface. */
++#define SOCK_RAW SOCK_RAW
++ SOCK_RDM = 4, /* Reliably-delivered messages. */
++#define SOCK_RDM SOCK_RDM
++ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
++ datagrams of fixed maximum length. */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
++#define SOCK_DCCP SOCK_DCCP
++ SOCK_PACKET = 10, /* Linux specific way of getting packets
++ at the dev level. For writing rarp and
++ other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++ /* Flags to be ORed into the type parameter of socket and socketpair. */
++
++ SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
++ new descriptor(s). */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++ SOCK_NONBLOCK = 00004000 /* Atomically mark descriptor(s) as
++ non-blocking. */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stab.def uClibc-git/libc/sysdeps/linux/common/bits/stab.def
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stab.def 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/stab.def 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This contains contribution from Cygnus Support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/common/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. Since there is no general truth we can't say
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/statfs.h uClibc-git/libc/sysdeps/linux/common/bits/statfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/statfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/statfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STATFS_H
+ # error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stat.h uClibc-git/libc/sysdeps/linux/common/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/statvfs.h uClibc-git/libc/sysdeps/linux/common/bits/statvfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/statvfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/statvfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STATVFS_H
+ # error "Never include <bits/statvfs.h> directly; use <sys/statvfs.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stdio.h uClibc-git/libc/sysdeps/linux/common/bits/stdio.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stdio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/stdio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _STDIO_H
+ # error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stdio_lim.h uClibc-git/libc/sysdeps/linux/common/bits/stdio_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/stdio_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/stdio_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _STDIO_H && !defined __need_FOPEN_MAX && !defined __need_IOV_MAX
+ # error "Never include <bits/stdio_lim.h> directly; use <stdio.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/termios.h uClibc-git/libc/sysdeps/linux/common/bits/termios.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TERMIOS_H
+ # error "Never include <bits/termios.h> directly; use <termios.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/time.h uClibc-git/libc/sysdeps/linux/common/bits/time.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/time.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/time.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Never include this file directly; use <time.h> instead.
+@@ -54,6 +53,12 @@
+ # define CLOCK_PROCESS_CPUTIME_ID 2
+ /* Thread-specific CPU-time clock. */
+ # define CLOCK_THREAD_CPUTIME_ID 3
++/* Monotonic system-wide clock, not adjusted for frequency scaling. */
++# define CLOCK_MONOTONIC_RAW 4
++/* Identifier for system-wide realtime clock, updated only on ticks. */
++# define CLOCK_REALTIME_COARSE 5
++/* Monotonic system-wide clock, updated only on ticks. */
++# define CLOCK_MONOTONIC_COARSE 6
+
+ /* Flag to indicate time is absolute. */
+ # define TIMER_ABSTIME 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/types.h uClibc-git/libc/sysdeps/linux/common/bits/types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* bits/types.h -- definitions of __*_t types underlying *_t types.
+- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++ Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Never include this file directly; use <sys/types.h> instead.
+@@ -27,8 +26,6 @@
+ #include <features.h>
+ #include <bits/wordsize.h>
+
+-#define __need_size_t
+-#include <stddef.h>
+ #ifdef _LIBC
+ #include <bits/kernel_types.h>
+ #endif
+@@ -49,7 +46,7 @@
+ #if __WORDSIZE == 64
+ typedef signed long int __int64_t;
+ typedef unsigned long int __uint64_t;
+-#elif defined(__GNUC__)
++#elif defined(__GNUC__) || defined __ICC || defined __TenDRA__
+ __extension__ typedef signed long long int __int64_t;
+ __extension__ typedef unsigned long long int __uint64_t;
+ #endif
+@@ -58,7 +55,7 @@
+ #if __WORDSIZE == 64
+ typedef long int __quad_t;
+ typedef unsigned long int __u_quad_t;
+-#elif defined(__GNUC__)
++#elif defined(__GNUC__) || defined __ICC || defined __TenDRA__
+ __extension__ typedef long long int __quad_t;
+ __extension__ typedef unsigned long long int __u_quad_t;
+ #else
+@@ -200,9 +197,4 @@
+
+ #undef __STD_TYPE
+
+-/* Now add the thread types. */
+-#if defined __UCLIBC_HAS_THREADS__ && (defined __USE_POSIX199506 || defined __USE_UNIX98)
+-# include <bits/pthreadtypes.h>
+-#endif
+-
+ #endif /* bits/types.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/typesizes.h uClibc-git/libc/sysdeps/linux/common/bits/typesizes.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/typesizes.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_ctype.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_ctype.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_ctype.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_ctype.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_fpmax.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_fpmax.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_fpmax.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_fpmax.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,10 +12,6 @@
+ #ifndef _UCLIBC_FPMAX_H
+ #define _UCLIBC_FPMAX_H
+
+-#ifndef _ISOC99_SOURCE
+-#define _ISOC99_SOURCE 1
+-#endif
+-
+ #include <features.h>
+ #include <float.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_locale.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_locale.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_locale.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_locale.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -93,7 +92,7 @@
+ #ifdef _LIBC
+
+ /* extern void _locale_set(const unsigned char *p); */
+-/* extern void _locale_init(void); */
++extern void weak_function _locale_init(void) attribute_hidden;
+
+ #include <stddef.h>
+ #include <stdint.h>
+@@ -338,7 +337,9 @@
+ extern __locale_t __curlocale_var;
+ # ifdef __UCLIBC_HAS_THREADS__
+ extern __locale_t __curlocale(void) __THROW __attribute__ ((__const__));
++libc_hidden_proto(__curlocale)
+ extern __locale_t __curlocale_set(__locale_t newloc);
++libc_hidden_proto(__curlocale_set)
+ # define __UCLIBC_CURLOCALE (__curlocale())
+ # else
+ # define __UCLIBC_CURLOCALE (__curlocale_var)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_local_lim.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_local_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_local_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,14 +11,22 @@
+ #define _BITS_UCLIBC_LOCAL_LIM_H 1
+
+ /* This file works correctly only if local_lim.h is the NPTL version */
+-#if !defined PTHREAD_KEYS_MAX || defined TIMER_MAX
++#if !defined PTHREAD_KEYS_MAX || defined TIMER_MAX || !defined SEM_VALUE_MAX
+ # error local_lim.h was incorrectly updated, use the NPTL version from glibc
+ #endif
+
+ /* This should really be moved to thread specific directories */
+ #if defined __UCLIBC_HAS_THREADS__ && !defined __UCLIBC_HAS_THREADS_NATIVE__
++/* glibc uses 16384 */
+ # define PTHREAD_THREADS_MAX 1024
+ # define TIMER_MAX 256
++# ifdef __LINUXTHREADS_OLD__
++# undef SEM_VALUE_MAX
++# define SEM_VALUE_MAX ((int) ((~0u) >> 1))
++# endif
++# undef PTHREAD_STACK_MIN
++/* glibc uses at least 16364 */
++# define PTHREAD_STACK_MIN 1024
+ #endif
+
+ #ifndef __UCLIBC_HAS_THREADS__
+@@ -28,6 +36,7 @@
+ # undef PTHREAD_DESTRUCTOR_ITERATIONS
+ # undef PTHREAD_STACK_MIN
+ # undef DELAYTIMER_MAX
++# undef SEM_VALUE_MAX
+ #endif
+
+ #endif /* bits/uClibc_local_lim.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_mutex.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_mutex.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_mutex.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_mutex.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,7 +13,9 @@
+ #ifdef __UCLIBC_HAS_THREADS__
+
+ #include <pthread.h>
++#ifdef _LIBC
+ #include <bits/uClibc_pthread.h>
++#endif
+
+ #define __UCLIBC_MUTEX_TYPE pthread_mutex_t
+
+@@ -108,8 +110,8 @@
+ #define __UCLIBC_IO_MUTEX_AUTO_UNLOCK(M,A) __UCLIBC_MUTEX_AUTO_UNLOCK(M,A)
+ #define __UCLIBC_IO_MUTEX_LOCK_CANCEL_UNSAFE(M) __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)
+ #define __UCLIBC_IO_MUTEX_UNLOCK_CANCEL_UNSAFE(M) __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)
+-#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_LOCK(M, 1)
+-#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M, 1)
++#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)
++#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)
+
+ #endif /* of __USE_STDIO_FUTEXES__ */
+
+@@ -146,8 +148,8 @@
+ #define __UCLIBC_IO_MUTEX_AUTO_UNLOCK(M,A) __UCLIBC_MUTEX_AUTO_UNLOCK(M,A)
+ #define __UCLIBC_IO_MUTEX_LOCK_CANCEL_UNSAFE(M) __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)
+ #define __UCLIBC_IO_MUTEX_UNLOCK_CANCEL_UNSAFE(M) __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)
+-#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_LOCK(M, 1)
+-#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M, 1)
++#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)
++#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C) __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)
+
+ #endif /* of __UCLIBC_HAS_THREADS__ */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_posix_opt.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_posix_opt.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_posix_opt.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_posix_opt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,136 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++/*
++ * Never include this file directly; use <unistd.h> instead.
++ */
++
++#ifndef _BITS_UCLIBC_POSIX_OPT_H
++#define _BITS_UCLIBC_POSIX_OPT_H 1
++
++/* This file works correctly only if posix_opt.h is the NPTL version */
++#ifndef _POSIX_THREADS
++# error posix_opt.h was incorrectly updated, use the NPTL version from glibc
++#endif
++
++/* change first options based on what glibc does */
++
++#ifndef __UCLIBC_HAS_THREADS_NATIVE__
++# undef _POSIX_THREAD_PROCESS_SHARED
++# define _POSIX_THREAD_PROCESS_SHARED -1
++# undef _POSIX_CLOCK_SELECTION
++# define _POSIX_CLOCK_SELECTION -1
++# undef _POSIX_THREAD_PRIO_INHERIT
++# define _POSIX_THREAD_PRIO_INHERIT -1
++# undef _POSIX_THREAD_PRIO_PROTECT
++# define _POSIX_THREAD_PRIO_PROTECT -1
++# undef _POSIX_THREAD_ROBUST_PRIO_INHERIT
++# undef _POSIX_THREAD_ROBUST_PRIO_PROTECT
++#endif
++
++/* this has to be adapted to uClibc, not all are thread related */
++#ifndef __UCLIBC_HAS_THREADS__
++# undef _XOPEN_REALTIME_THREADS
++# undef _POSIX_THREADS
++# undef _POSIX_REENTRANT_FUNCTIONS
++# undef _POSIX_THREAD_SAFE_FUNCTIONS
++# undef _POSIX_THREAD_PRIORITY_SCHEDULING
++# undef _POSIX_THREAD_ATTR_STACKSIZE
++# undef _POSIX_THREAD_ATTR_STACKADDR
++# undef _POSIX_THREAD_PRIO_INHERIT
++# undef _POSIX_THREAD_PRIO_PROTECT
++# undef _POSIX_SEMAPHORES
++# undef _POSIX_ASYNCHRONOUS_IO
++# undef _POSIX_ASYNC_IO
++# undef _LFS_ASYNCHRONOUS_IO
++# undef _POSIX_PRIORITIZED_IO
++# undef _LFS64_ASYNCHRONOUS_IO
++# undef _POSIX_CPUTIME
++# undef _POSIX_THREAD_CPUTIME
++# undef _POSIX_READER_WRITER_LOCKS
++# undef _POSIX_TIMEOUTS
++# undef _POSIX_SPIN_LOCKS
++# undef _POSIX_BARRIERS
++# undef _POSIX_MESSAGE_PASSING
++# undef _POSIX_THREAD_PROCESS_SHARED
++# undef _POSIX_CLOCK_SELECTION
++# undef _POSIX_ADVISORY_INFO
++/*# undef _POSIX_RAW_SOCKETS*/
++/*# undef _POSIX2_CHAR_TERM*/
++# undef _POSIX_SPORADIC_SERVER
++# undef _POSIX_THREAD_SPORADIC_SERVER
++/*# undef _POSIX_TRACE
++# undef _POSIX_TRACE_EVENT_FILTER
++# undef _POSIX_TRACE_INHERIT
++# undef _POSIX_TRACE_LOG
++# undef _POSIX_TYPED_MEMORY_OBJECTS*/
++#endif
++
++/* were in earlier version, used by sysconf */
++#define _POSIX_POLL 1
++#define _POSIX_SELECT 1
++
++/* disable independently unsupported features */
++#undef _POSIX_TRACE
++#undef _POSIX_TRACE_EVENT_FILTER
++#undef _POSIX_TRACE_INHERIT
++#undef _POSIX_TRACE_LOG
++#undef _POSIX_TYPED_MEMORY_OBJECTS
++#undef _POSIX_SPAWN
++
++#if 0 /* does uClibc support these? */
++# undef _POSIX_ASYNCHRONOUS_IO
++# undef _POSIX_ASYNC_IO
++# undef _LFS_ASYNCHRONOUS_IO
++# undef _POSIX_PRIORITIZED_IO
++# undef _LFS64_ASYNCHRONOUS_IO
++# undef _POSIX_MESSAGE_PASSING
++#endif
++
++/* change options based on uClibc config options */
++
++#if 0 /*ndef __UCLIBC_HAS_POSIX_TIMERS__*/
++# undef _POSIX_TIMERS
++# undef _POSIX_THREAD_CPUTIME
++#endif
++
++#if 0 /*ndef __UCLIBC_HAS_POSIX_BARRIERS__*/
++# undef _POSIX_BARRIERS
++#endif
++
++#if 0 /*ndef __UCLIBC_HAS_POSIX_SPINLOCKS__*/
++# undef _POSIX_SPIN_LOCKS
++#endif
++
++#ifndef __ARCH_USE_MMU__
++# undef _POSIX_MEMLOCK
++# undef _POSIX_MEMLOCK_RANGE
++# undef _POSIX_MEMORY_PROTECTION
++#endif
++
++#ifndef __UCLIBC_HAS_LFS__
++# undef _LFS64_ASYNCHRONOUS_IO
++# undef _LFS_LARGEFILE
++# undef _LFS64_LARGEFILE
++# undef _LFS64_STDIO
++#endif
++
++#ifndef __UCLIBC_HAS_REALTIME__
++# undef _POSIX_SEMAPHORES
++#endif
++
++#ifndef __UCLIBC_HAS_REGEX__
++# undef _POSIX_REGEXP
++#endif
++
++#ifndef __UCLIBC_HAS_IPV6__
++# undef _POSIX_IPV6
++#endif
++
++#ifndef __UCLIBC_HAS_SOCKET__
++# undef _POSIX_RAW_SOCKETS
++#endif
++
++#endif /* bits/uClibc_posix_opt.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_pthread.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_pthread.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_pthread.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_pthread.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply prototypes for the internal thread functions used by the
+@@ -27,15 +26,12 @@
+ # error "Always include <pthread.h> rather than <bits/uClibc_pthread.h>"
+ #endif
+
+-#if defined _LIBC && (defined IS_IN_libc || defined NOT_IN_libc)
+-
+ struct _pthread_cleanup_buffer;
+
+ /* Threading functions internal to uClibc. Make these thread functions
+ * weak so that we can elide them from single-threaded processes. */
+ extern int weak_function __pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutex_attr);
+-extern int weak_function __pthread_mutex_destroy (pthread_mutex_t *__mutex);
++ const pthread_mutexattr_t *__mutex_attr);
+ extern int weak_function __pthread_mutex_lock (pthread_mutex_t *__mutex);
+ extern int weak_function __pthread_mutex_unlock (pthread_mutex_t *__mutex);
+ extern int weak_function __pthread_mutex_trylock (pthread_mutex_t *__mutex);
+@@ -47,5 +43,3 @@
+ int __execute);
+
+ #endif
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_stdio.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_stdio.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_stdio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_stdio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -54,27 +54,6 @@
+ #endif
+
+ /**********************************************************************/
+-/* Make sure defines related to large files are consistent. */
+-#ifdef _LIBC
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-#undef __USE_LARGEFILE
+-#undef __USE_LARGEFILE64
+-#undef __USE_FILE_OFFSET64
+-/* If we're actually building uClibc with large file support, only define... */
+-#define __USE_LARGEFILE64 1
+-#endif /* __UCLIBC_HAS_LFS__ */
+-
+-#else /* not _LIBC */
+-
+-#ifndef __UCLIBC_HAS_LFS__
+-#if defined(__LARGEFILE64_SOURCE) || defined(__USE_LARGEFILE64) || defined(__USE_FILE_OFFSET64)
+-#error Sorry... uClibc was built without large file support!
+-#endif
+-#endif /* __UCLIBC_HAS_LFS__ */
+-
+-#endif /* _LIBC */
+-/**********************************************************************/
+ #ifdef __UCLIBC_HAS_WCHAR__
+
+ #define __need_wchar_t
+@@ -99,22 +78,7 @@
+ #define __STDIO_PUTC_MACRO
+ #endif
+
+-
+-/* These are consistency checks on the different options */
+-
+-#ifndef __STDIO_BUFFERS
+-#undef __STDIO_GETC_MACRO
+-#undef __STDIO_PUTC_MACRO
+-#endif
+-
+-#ifdef __BCC__
+-#undef __UCLIBC_HAS_LFS__
+-#endif
+-
+-#ifndef __UCLIBC_HAS_LFS__
+-#undef __UCLIBC_HAS_FOPEN_LARGEFILE_MODE__
+-#endif
+-
++#ifdef _LIBC
+ /**********************************************************************/
+ #include <bits/uClibc_mutex.h>
+
+@@ -169,6 +133,8 @@
+ #endif
+ #endif
+
++#endif /* _LIBC */
++
+ /**********************************************************************/
+
+ #define __STDIO_IOFBF 0 /* Fully buffered. */
+@@ -209,7 +175,7 @@
+
+ typedef __ssize_t __io_read_fn(void *__cookie, char *__buf, size_t __bufsize);
+ typedef __ssize_t __io_write_fn(void *__cookie,
+- __const char *__buf, size_t __bufsize);
++ const char *__buf, size_t __bufsize);
+ /* NOTE: GLIBC difference!!! -- fopencookie seek function
+ * For glibc, the type of pos is always (__off64_t *) but in our case
+ * it is type (__off_t *) when the lib is built without large file support.
+@@ -224,7 +190,7 @@
+ __io_close_fn *close;
+ } _IO_cookie_io_functions_t;
+
+-#if defined(_LIBC) || defined(_GNU_SOURCE)
++#ifdef __USE_GNU
+
+ typedef __io_read_fn cookie_read_function_t;
+ typedef __io_write_fn cookie_write_function_t;
+@@ -238,6 +204,17 @@
+ #endif
+ /**********************************************************************/
+
++#if defined __UCLIBC_HAS_THREADS__ && !defined __UCLIBC_IO_MUTEX
++/* keep this in sync with uClibc_mutex.h */
++# ifdef __USE_STDIO_FUTEXES__
++# include <bits/stdio-lock.h>
++# define __UCLIBC_IO_MUTEX(M) _IO_lock_t M
++# else
++# include <bits/pthreadtypes.h>
++# define __UCLIBC_IO_MUTEX(M) pthread_mutex_t M
++# endif /* __UCLIBC_HAS_THREADS_NATIVE__ */
++#endif
++
+ struct __STDIO_FILE_STRUCT {
+ unsigned short __modeflags;
+ /* There could be a hole here, but modeflags is used most.*/
+@@ -351,22 +328,27 @@
+ **********************************************************************/
+ #if defined _LIBC && (defined IS_IN_libc || defined NOT_IN_libc)
+
+-extern void _stdio_init(void) attribute_hidden;
+-extern void _stdio_term(void) attribute_hidden;
++extern void weak_function _stdio_init(void) attribute_hidden;
++extern void weak_function _stdio_term(void) attribute_hidden;
+
+ #ifdef __STDIO_HAS_OPENLIST
+
+ extern struct __STDIO_FILE_STRUCT *_stdio_openlist;
+
+ #ifdef __UCLIBC_HAS_THREADS__
+-__UCLIBC_IO_MUTEX_EXTERN(_stdio_openlist_add_lock);
++__UCLIBC_IO_MUTEX_EXTERN(_stdio_openlist_add_lock)
++# ifndef __UCLIBC_HAS_THREADS_NATIVE__
++ attribute_hidden
++# endif
++ ;
+ #ifdef __STDIO_BUFFERS
+-__UCLIBC_IO_MUTEX_EXTERN(_stdio_openlist_del_lock);
+-extern volatile int _stdio_openlist_use_count; /* _stdio_openlist_del_lock */
+-extern int _stdio_openlist_del_count; /* _stdio_openlist_del_lock */
++__UCLIBC_IO_MUTEX_EXTERN(_stdio_openlist_del_lock)
++# ifndef __UCLIBC_HAS_THREADS_NATIVE__
++ attribute_hidden
++# endif
++ ;
+ #endif
+ extern int _stdio_user_locking;
+-extern void __stdio_init_mutex(__UCLIBC_MUTEX_TYPE *m) attribute_hidden;
+ #endif
+
+ #endif
+@@ -465,6 +447,8 @@
+
+ #else
+
++# define __stdin stdin
++
+ #endif /* __STDIO_GETC_MACRO */
+
+
+@@ -524,4 +508,8 @@
+ # endif
+ # endif
+
++#else
++
++# define __stdout stdout
++
+ #endif /* __STDIO_PUTC_MACRO */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_touplow.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_touplow.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_touplow.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_touplow.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_uintmaxtostr.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_uintmaxtostr.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_uintmaxtostr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_uintmaxtostr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -28,16 +27,6 @@
+ #ifndef _UINTMAXTOSTR_H
+ #define _UINTMAXTOSTR_H 1
+
+-#ifdef _FEATURES_H
+-# ifndef __USE_ISOC99
+-# error features was included without defining _ISOC99_SOURCE!
+-# endif
+-#else
+-# ifndef _ISOC99_SOURCE
+-# define _ISOC99_SOURCE
+-# endif
+-#endif
+-
+ #include <features.h>
+ #include <limits.h>
+ #include <stdint.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_uwchar.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_uwchar.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_uwchar.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_uwchar.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_va_copy.h uClibc-git/libc/sysdeps/linux/common/bits/uClibc_va_copy.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uClibc_va_copy.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uClibc_va_copy.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
++ * License along with the GNU C Library; see the file COPYING.LIB. If
++ * not, see <http://www.gnu.org/licenses/>.
+ */
+
+ #ifndef _UCLIBC_VA_COPY_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uio.h uClibc-git/libc/sysdeps/linux/common/bits/uio.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/uio.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/uio.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SYS_UIO_H && !defined _FCNTL_H
+ # error "Never include <bits/uio.h> directly; use <sys/uio.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ustat.h uClibc-git/libc/sysdeps/linux/common/bits/ustat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/ustat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/ustat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USTAT_H
+ # error "Never include <bits/ustat.h> directly; use <sys/ustat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/utmp.h uClibc-git/libc/sysdeps/linux/common/bits/utmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/utmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/utmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UTMP_H
+ # error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/utmpx.h uClibc-git/libc/sysdeps/linux/common/bits/utmpx.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/utmpx.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/utmpx.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UTMPX_H
+ # error "Never include <bits/utmpx.h> directly; use <utmpx.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/utsname.h uClibc-git/libc/sysdeps/linux/common/bits/utsname.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/utsname.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/utsname.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UTSNAME_H
+ # error "Never include <bits/utsname.h> directly; use <sys/utsname.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/waitflags.h uClibc-git/libc/sysdeps/linux/common/bits/waitflags.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/waitflags.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/waitflags.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SYS_WAIT_H && !defined _STDLIB_H
+ # error "Never include <bits/waitflags.h> directly; use <sys/wait.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/waitstatus.h uClibc-git/libc/sysdeps/linux/common/bits/waitstatus.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/waitstatus.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/waitstatus.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SYS_WAIT_H && !defined _STDLIB_H
+ # error "Never include <bits/waitstatus.h> directly; use <sys/wait.h> instead."
+@@ -25,7 +24,7 @@
+ /* Everything extant so far uses these same bits. */
+
+
+-/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */
++/* If WIFEXITED(STATUS), the low-order 8 bits of exit(N). */
+ #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
+
+ /* If WIFSIGNALED(STATUS), the terminating signal. */
+@@ -37,12 +36,20 @@
+ /* Nonzero if STATUS indicates normal termination. */
+ #define __WIFEXITED(status) (__WTERMSIG(status) == 0)
+
+-/* Nonzero if STATUS indicates termination by a signal. */
+-#define __WIFSIGNALED(status) \
+- (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
++/* Nonzero if STATUS indicates termination by a signal.
++ * Note that status 0x007f is "died from signal 127", not "stopped by signal 0".
++ * This does happen on MIPS.
++ * The comparison is "< 0xff", not "< 0x7f", because WCOREDUMP bit (0x80)
++ * can be set too.
++ */
++#define __WIFSIGNALED(status) (((unsigned)((status) & 0xffff) - 1U) < 0xffU)
+
+ /* Nonzero if STATUS indicates the child is stopped. */
++#if !defined(__mips__)
+ #define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
++#else
++#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f && ((status) & 0xff00))
++#endif
+
+ /* Nonzero if STATUS indicates the child continued after a stop. We only
+ define this if <bits/waitflags.h> provides the WCONTINUED flag bit. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/wchar.h uClibc-git/libc/sysdeps/linux/common/bits/wchar.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/wchar.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/wchar.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_WCHAR_H
+ #define _BITS_WCHAR_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/xopen_lim.h uClibc-git/libc/sysdeps/linux/common/bits/xopen_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/xopen_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/bits/xopen_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Never include this file directly; use <limits.h> instead.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/brk.c uClibc-git/libc/sysdeps/linux/common/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,10 +8,8 @@
+ #include <unistd.h>
+ #include <sys/syscall.h>
+
+-libc_hidden_proto(brk)
+-
+ #define __NR___syscall_brk __NR_brk
+-static inline _syscall1(void *, __syscall_brk, void *, end)
++static __always_inline _syscall1(void *, __syscall_brk, void *, end)
+
+ /* This must be initialized data because commons can't have aliases. */
+ void * __curbrk attribute_hidden = 0;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/capget.c uClibc-git/libc/sysdeps/linux/common/capget.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/capget.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/capget.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,7 +8,8 @@
+ */
+
+ #include <sys/syscall.h>
+-int capget(void *header, void *data);
++
+ #ifdef __NR_capget
++int capget(void *header, void *data);
+ _syscall2(int, capget, void *, header, void *, data)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/capset.c uClibc-git/libc/sysdeps/linux/common/capset.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/capset.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/capset.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,7 +9,7 @@
+
+ #include <sys/syscall.h>
+
+-int capset(void *header, const void *data);
+ #ifdef __NR_capset
++int capset(void *header, const void *data);
+ _syscall2(int, capset, void *, header, const void *, data)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/chdir.c uClibc-git/libc/sysdeps/linux/common/chdir.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/chdir.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/chdir.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,15 +8,7 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <string.h>
+ #include <unistd.h>
+-#include <sys/param.h>
+
+-
+-#define __NR___syscall_chdir __NR_chdir
+-static __inline__ _syscall1(int, __syscall_chdir, const char *, path)
+-int chdir(const char *path)
+-{
+- return __syscall_chdir(path);
+-}
++_syscall1(int, chdir, const char *, path)
+ libc_hidden_def(chdir)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/chmod.c uClibc-git/libc/sysdeps/linux/common/chmod.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/chmod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/chmod.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,13 +9,22 @@
+
+ #include <sys/syscall.h>
+ #include <sys/stat.h>
++#include <unistd.h>
+
++#if defined __NR_fchmodat && !defined __NR_chmod
++# include <fcntl.h>
++int chmod(const char *path, mode_t mode)
++{
++ return fchmodat(AT_FDCWD, path, mode, 0);
++}
+
+-#define __NR___syscall_chmod __NR_chmod
++#else
++# define __NR___syscall_chmod __NR_chmod
+ static __inline__ _syscall2(int, __syscall_chmod, const char *, path, __kernel_mode_t, mode)
+
+ int chmod(const char *path, mode_t mode)
+ {
+ return __syscall_chmod(path, mode);
+ }
++#endif
+ libc_hidden_def(chmod)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/chown.c uClibc-git/libc/sysdeps/linux/common/chown.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/chown.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/chown.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,18 +11,26 @@
+ #include <unistd.h>
+ #include <bits/wordsize.h>
+
++#if defined __NR_fchownat && !defined __NR_chown
++# include <fcntl.h>
++int chown(const char *path, uid_t owner, gid_t group)
++{
++ return fchownat(AT_FDCWD, path, owner, group, 0);
++}
+
+-#if (__WORDSIZE == 32 && defined(__NR_chown32)) || __WORDSIZE == 64
+-# ifdef __NR_chown32
+-# undef __NR_chown
+-# define __NR_chown __NR_chown32
+-# endif
++#else
++
++# if (__WORDSIZE == 32 && defined(__NR_chown32)) || __WORDSIZE == 64
++# ifdef __NR_chown32
++# undef __NR_chown
++# define __NR_chown __NR_chown32
++# endif
+
+ _syscall3(int, chown, const char *, path, uid_t, owner, gid_t, group)
+
+-#else
++# else
+
+-# define __NR___syscall_chown __NR_chown
++# define __NR___syscall_chown __NR_chown
+ static __inline__ _syscall3(int, __syscall_chown, const char *, path,
+ __kernel_uid_t, owner, __kernel_gid_t, group)
+
+@@ -35,6 +43,7 @@
+ }
+ return (__syscall_chown(path, owner, group));
+ }
+-#endif
++# endif
+
++#endif
+ libc_hidden_def(chown)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/clock_getres.c uClibc-git/libc/sysdeps/linux/common/clock_getres.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/clock_getres.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/clock_getres.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,11 +9,11 @@
+
+ #include <sys/syscall.h>
+ #include <time.h>
+-#include <unistd.h>
+
+ #ifdef __NR_clock_getres
+ _syscall2(int, clock_getres, clockid_t, clock_id, struct timespec*, res)
+ #else
++# include <unistd.h>
+
+ int clock_getres(clockid_t clock_id, struct timespec* res)
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/clock_gettime.c uClibc-git/libc/sysdeps/linux/common/clock_gettime.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/clock_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/clock_gettime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,11 +10,11 @@
+
+ #include <sys/syscall.h>
+ #include <time.h>
+-#include <sys/time.h>
+
+ #ifdef __NR_clock_gettime
+ _syscall2(int, clock_gettime, clockid_t, clock_id, struct timespec*, tp)
+ #else
++# include <sys/time.h>
+
+ int clock_gettime(clockid_t clock_id, struct timespec* tp)
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/clock_settime.c uClibc-git/libc/sysdeps/linux/common/clock_settime.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/clock_settime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/clock_settime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,11 +9,11 @@
+
+ #include <sys/syscall.h>
+ #include <time.h>
+-#include <sys/time.h>
+
+ #ifdef __NR_clock_settime
+ _syscall2(int, clock_settime, clockid_t, clock_id, const struct timespec*, tp)
+ #else
++# include <sys/time.h>
+
+ int clock_settime(clockid_t clock_id, const struct timespec* tp)
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/close.c uClibc-git/libc/sysdeps/linux/common/close.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/close.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/close.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,12 +9,13 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#include <cancel.h>
+
+-_syscall1(int, close, int, fd)
++#define __NR___close_nocancel __NR_close
++_syscall1(int, __NC(close), int, fd)
+
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(close)
+-#else
+-libc_hidden_weak(close)
+-strong_alias(close,__libc_close)
+-#endif
++#define __NR___close_nocancel_no_status __NR_close
++_syscall_noerr1(void, __close_nocancel_no_status, int, fd)
++
++CANCELLABLE_SYSCALL(int, close, (int fd), (fd))
++lt_libc_hidden(close)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/cmsg_nxthdr.c uClibc-git/libc/sysdeps/linux/common/cmsg_nxthdr.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/cmsg_nxthdr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/cmsg_nxthdr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,12 +13,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define __FORCE_GLIBC
+ #include <features.h>
++#include <stddef.h>
+ /* Prevent math.h from defining a colliding inline */
+ #undef __USE_EXTERN_INLINES
+ #include <sys/socket.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/creat64.c uClibc-git/libc/sysdeps/linux/common/creat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/creat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/creat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,19 +12,17 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
+ #include <fcntl.h>
+-#include <sys/types.h>
++#include <cancel.h>
+
+ /* Create FILE with protections MODE. */
+ int creat64(const char *file, mode_t mode)
+ {
+- return open64(file, O_WRONLY|O_CREAT|O_TRUNC, mode);
++ return open64(file, O_WRONLY | O_CREAT | O_TRUNC, mode);
+ }
+-#endif /* __UCLIBC_HAS_LFS__ */
++/* open handled cancellation, noop on uClibc */
++LIBC_CANCEL_HANDLED();
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/creat.c uClibc-git/libc/sysdeps/linux/common/creat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/creat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/creat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,8 +8,11 @@
+ */
+
+ #include <fcntl.h>
++#include <cancel.h>
+
+ int creat(const char *file, mode_t mode)
+ {
+ return open(file, O_WRONLY | O_CREAT | O_TRUNC, mode);
+ }
++/* open handled cancellation, noop on uClibc */
++LIBC_CANCEL_HANDLED();
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/create_module.c uClibc-git/libc/sysdeps/linux/common/create_module.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/create_module.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/create_module.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,10 +7,10 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <errno.h>
+-#include <unistd.h>
+ #include <features.h>
+-#include <sys/types.h>
++#define __need_size_t
++#include <stddef.h>
++#include <errno.h>
+ #include <sys/syscall.h>
+
+ #ifdef __NR_create_module
+@@ -22,7 +22,7 @@
+ static __inline__ _syscall2(long, __create_module, const char *, name, size_t, size)
+ /* By checking the value of errno, we know if we have been fooled
+ * by the syscall2 macro making a very high address look like a
+- * negative, so we we fix it up here. */
++ * negative, so we fix it up here. */
+ unsigned long create_module(const char *name, size_t size)
+ {
+ long ret = __create_module(name, size);
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/delete_module.c uClibc-git/libc/sysdeps/linux/common/delete_module.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/delete_module.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/delete_module.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,7 +7,7 @@
+ */
+
+ #include <sys/syscall.h>
+-int delete_module(const char *name, unsigned int flags);
+ #ifdef __NR_delete_module
++int delete_module(const char *name, unsigned int flags);
+ _syscall2(int, delete_module, const char *, name, unsigned int, flags)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/dl-osinfo.h uClibc-git/libc/sysdeps/linux/common/dl-osinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/dl-osinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/dl-osinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -17,10 +17,11 @@
+ # endif
+
+ # include <stdint.h>
+-# include <sys/time.h>
+
+ # ifdef IS_IN_libc
+-#include <fcntl.h>
++# include <fcntl.h>
++# include <unistd.h>
++# include <sys/time.h>
+ # define OPEN open
+ # define READ read
+ # define CLOSE close
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/dup2.c uClibc-git/libc/sysdeps/linux/common/dup2.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/dup2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/dup2.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,7 +9,24 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#if defined __NR_dup3 && !defined __NR_dup2
++# include <fcntl.h>
++extern int __libc_fcntl (int fd, int cmd, ...);
++libc_hidden_proto(__libc_fcntl);
+
++int dup2(int old, int newfd)
++{
++ /*
++ * Check if old fd is valid before we try
++ * to ducplicate it. Return it if valid
++ * or EBADF otherwise
++ */
++ if (old == newfd)
++ return fcntl(old, F_GETFL, 0) < 0 ? -1 : newfd;
+
++ return dup3(old, newfd, 0);
++}
++#else
+ _syscall2(int, dup2, int, oldfd, int, newfd)
++#endif
+ libc_hidden_def(dup2)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/dup3.c uClibc-git/libc/sysdeps/linux/common/dup3.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/dup3.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/dup3.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,16 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * dup3() for uClibc
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sys/syscall.h>
++#include <unistd.h>
++
++#if defined(__NR_dup3)
++_syscall3(int, dup3, int, oldfd, int, newfd, int, flags)
++libc_hidden_def(dup3)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/epoll.c uClibc-git/libc/sysdeps/linux/common/epoll.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/epoll.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/epoll.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* vi: set sw=4 ts=4: */
+ /*
+- * epoll_create() / epoll_ctl() / epoll_wait() for uClibc
++ * epoll_create() / epoll_ctl() / epoll_wait() / epoll_pwait() for uClibc
+ *
+ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+ *
+@@ -9,75 +9,61 @@
+
+ #include <sys/syscall.h>
+ #include <sys/epoll.h>
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
+-#else
+-# define SINGLE_THREAD_P 1
+-#endif
++#include <cancel.h>
+
+-/*
+- * epoll_create()
+- */
+ #ifdef __NR_epoll_create
+ _syscall1(int, epoll_create, int, size)
+ #endif
+
+-/*
+- * epoll_create1()
+- */
+ #ifdef __NR_epoll_create1
+ _syscall1(int, epoll_create1, int, flags)
+ #endif
+
+-/*
+- * epoll_ctl()
+- */
++#if defined __NR_epoll_create1 && !defined __NR_epoll_create
++int epoll_create(int size)
++{
++ return INLINE_SYSCALL(epoll_create1, 1, 0);
++}
++
++#endif
++
+ #ifdef __NR_epoll_ctl
+-_syscall4(int,epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event *, event)
++_syscall4(int, epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event *, event)
+ #endif
+
+-/*
+- * epoll_wait()
+- */
+ #ifdef __NR_epoll_wait
+-extern __typeof(epoll_wait) __libc_epoll_wait;
+-int __libc_epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
++static int __NC(epoll_wait)(int epfd, struct epoll_event *events, int maxevents, int timeout)
+ {
+- if (SINGLE_THREAD_P)
+- return INLINE_SYSCALL(epoll_wait, 4, epfd, events, maxevents, timeout);
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- else {
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = INLINE_SYSCALL(epoll_wait, 4, epfd, events, maxevents, timeout);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+- }
+-# endif
++ return INLINE_SYSCALL(epoll_wait, 4, epfd, events, maxevents, timeout);
+ }
+-weak_alias(__libc_epoll_wait, epoll_wait)
++CANCELLABLE_SYSCALL(int, epoll_wait, (int epfd, struct epoll_event *events, int maxevents, int timeout),
++ (epfd, events, maxevents, timeout))
+ #endif
+
+-/*
+- * epoll_pwait()
+- */
+ #ifdef __NR_epoll_pwait
+ # include <signal.h>
+
+-extern __typeof(epoll_pwait) __libc_epoll_pwait;
+-int __libc_epoll_pwait(int epfd, struct epoll_event *events, int maxevents,
+- int timeout, const sigset_t *set)
++# define __NR___syscall_epoll_pwait __NR_epoll_pwait
++static __always_inline _syscall6(int, __syscall_epoll_pwait, int, epfd, struct epoll_event *, events,
++ int, maxevents, int, timeout, const sigset_t *, sigmask, size_t, sigsetsize)
++
++static int __NC(epoll_pwait)(int epfd, struct epoll_event *events, int maxevents, int timeout,
++ const sigset_t *set)
+ {
+- int nsig = _NSIG / 8;
+- if (SINGLE_THREAD_P)
+- return INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, nsig);
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- else {
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, nsig);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+- }
+-# endif
++ return __syscall_epoll_pwait(epfd, events, maxevents, timeout, set, __SYSCALL_SIGSET_T_SIZE);
+ }
+-weak_alias(__libc_epoll_pwait, epoll_pwait)
++CANCELLABLE_SYSCALL(int, epoll_pwait, (int epfd, struct epoll_event *events, int maxevents, int timeout,
++ const sigset_t *set),
++ (epfd, events, maxevents, timeout, set))
++/*
++ * If epoll_wait is not defined, then call epoll_pwait instead using NULL
++ * for sigmask argument
++ */
++# ifndef __NR_epoll_wait
++# include <stddef.h>
++int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
++{
++ return INLINE_SYSCALL(epoll_pwait, 5, epfd, events, maxevents, timeout, NULL);
++}
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/eventfd.c uClibc-git/libc/sysdeps/linux/common/eventfd.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/eventfd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/eventfd.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,12 +7,24 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <errno.h>
+ #include <sys/syscall.h>
+ #include <sys/eventfd.h>
+
+ /*
+ * eventfd()
+ */
+-#ifdef __NR_eventfd
+-_syscall2(int, eventfd, int, count, int, flags)
++#if defined __NR_eventfd || defined __NR_eventfd2
++int eventfd (int count, int flags)
++{
++#if defined __NR_eventfd2
++ return INLINE_SYSCALL (eventfd2, 2, count, flags);
++#elif defined __NR_eventfd
++ if (flags != 0) {
++ __set_errno (EINVAL);
++ return -1;
++ }
++ return INLINE_SYSCALL (eventfd, 1, count);
++#endif
++}
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/_exit.c uClibc-git/libc/sysdeps/linux/common/_exit.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/_exit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/_exit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,28 +7,36 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-#include <errno.h>
+ #include <unistd.h>
+-#include <sys/types.h>
++#include <stdlib.h>
+ #include <sys/syscall.h>
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep.h>
++#include <bits/kernel-features.h>
++
++#ifdef __UCLIBC_ABORT_INSTRUCTION__
++# define ABORT_INSTRUCTION __asm__(__UCLIBC_ABORT_INSTRUCTION__)
++#else
++# warning "no abort instruction defined for this arch"
+ #endif
+
++/* have to check for kernel 2.5.35 too, since NR was earlier present */
++#if defined __NR_exit_group && __LINUX_KERNEL_VERSION >= 0x020600 \
++ && defined __UCLIBC_HAS_THREADS__
++# undef __NR_exit
++# define __NR_exit __NR_exit_group
++#endif
+
+-void attribute_noreturn _exit(int status)
++void _exit(int status)
+ {
+ /* The loop is added only to keep gcc happy. */
+ while(1)
+ {
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# ifdef __NR_exit_group
+- INLINE_SYSCALL(exit_group, 1, status);
+-# endif
+-#endif
+ INLINE_SYSCALL(exit, 1, status);
++#ifdef ABORT_INSTRUCTION
++ ABORT_INSTRUCTION;
++#endif
+ }
+ }
+ libc_hidden_def(_exit)
++#ifdef __USE_ISOC99
+ weak_alias(_exit,_Exit)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/faccessat.c uClibc-git/libc/sysdeps/linux/common/faccessat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/faccessat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/faccessat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_faccessat
+ _syscall4(int, faccessat, int, fd, const char *, file, int, type, int, flag)
++libc_hidden_def(faccessat)
+ #else
+ /* should add emulation with faccess() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fchdir.c uClibc-git/libc/sysdeps/linux/common/fchdir.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fchdir.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fchdir.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
+-
++#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+ _syscall1(int, fchdir, int, fd)
+ libc_hidden_def(fchdir)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fchmodat.c uClibc-git/libc/sysdeps/linux/common/fchmodat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fchmodat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fchmodat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,7 @@
+
+ return INLINE_SYSCALL(fchmodat, 3, fd, file, mode);
+ }
++libc_hidden_def(fchmodat)
+ #else
+ /* should add emulation with fchmod() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fchownat.c uClibc-git/libc/sysdeps/linux/common/fchownat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fchownat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fchownat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_fchownat
+ _syscall5(int, fchownat, int, fd, const char *, file, uid_t, owner, gid_t, group, int, flag)
++libc_hidden_def(fchownat)
+ #else
+ /* should add emulation with fchown() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fdatasync.c uClibc-git/libc/sysdeps/linux/common/fdatasync.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fdatasync.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fdatasync.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,36 +8,17 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <unistd.h>
+
+ #if !defined __NR_fdatasync && defined __NR_osf_fdatasync
+ # define __NR_fdatasync __NR_osf_fdatasync
+ #endif
+
+ #ifdef __NR_fdatasync
++# include <unistd.h>
++# include <cancel.h>
+
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
+-# else
+-# define SINGLE_THREAD_P 1
+-# endif
+-
+-#define __NR___syscall_fdatasync __NR_fdatasync
+-
+-static __always_inline
+-_syscall1(int, __syscall_fdatasync, int, fd)
+-
+-int fdatasync(int fd)
+-{
+- if (SINGLE_THREAD_P)
+- return __syscall_fdatasync(fd);
+-
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __syscall_fdatasync(fd);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-# endif
+-}
++# define __NR___fdatasync_nocancel __NR_fdatasync
++static _syscall1(int, __NC(fdatasync), int, fd)
+
++CANCELLABLE_SYSCALL(int, fdatasync, (int fd), (fd))
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fork.c uClibc-git/libc/sysdeps/linux/common/fork.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fork.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,16 +8,35 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <unistd.h>
+
+-#ifdef __ARCH_USE_MMU__
+-
+-#ifdef __NR_fork
+-#define __NR___libc_fork __NR_fork
++#if defined __ARCH_USE_MMU__
++# include <unistd.h>
+ extern __typeof(fork) __libc_fork;
+-_syscall0(pid_t, __libc_fork)
+-weak_alias(__libc_fork,fork)
++# if defined __NR_fork
++# include <cancel.h>
++# define __NR___libc_fork __NR_fork
++_syscall0(pid_t, fork)
++
++# elif defined __NR_clone && !defined __NR_fork
++# include <sys/types.h>
++# include <signal.h>
++# include <stddef.h>
++pid_t fork(void)
++{
++ pid_t pid = INLINE_SYSCALL(clone, 4, SIGCHLD, NULL, NULL, NULL);
++
++ if (pid < 0)
++ return -1;
++
++ return pid;
++}
++
++# endif
++# ifdef __UCLIBC_HAS_THREADS__
++strong_alias(fork,__libc_fork)
+ libc_hidden_weak(fork)
+-#endif
++# else
++libc_hidden_def(fork)
++# endif
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fpu_control.h uClibc-git/libc/sysdeps/linux/common/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fstat64.c uClibc-git/libc/sysdeps/linux/common/fstat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fstat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fstat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,20 +7,20 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_fstat64
+-#include <unistd.h>
+-#include <sys/stat.h>
+-#include "xstatconv.h"
+-
+-
+-#define __NR___syscall_fstat64 __NR_fstat64
+-static __inline__ _syscall2(int, __syscall_fstat64,
+- int, filedes, struct kernel_stat64 *, buf)
++#ifdef __NR_fstat64
++# include <unistd.h>
++# include <sys/stat.h>
++# include "xstatconv.h"
++# define __NR___syscall_fstat64 __NR_fstat64
++static __always_inline _syscall2(int, __syscall_fstat64,
++ int, filedes, struct kernel_stat64 *, buf)
+
+ int fstat64(int fd, struct stat64 *buf)
+ {
++#ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ int result;
+ struct kernel_stat64 kbuf;
+
+@@ -29,6 +29,9 @@
+ __xstat64_conv(&kbuf, buf);
+ }
+ return result;
++#else
++ return __syscall_fstat64(fd, buf);
++#endif
+ }
+ libc_hidden_def(fstat64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fstatat64.c uClibc-git/libc/sysdeps/linux/common/fstatat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fstatat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fstatat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,20 +6,21 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <_lfs_64.h>
++#include <bits/wordsize.h>
+ #include <sys/syscall.h>
+-#include <sys/stat.h>
+-#include "xstatconv.h"
+-
+-#ifdef __UCLIBC_HAS_LFS__
+
+ /* 64bit ports tend to favor newfstatat() */
+-#ifdef __NR_newfstatat
++#if __WORDSIZE == 64 && defined __NR_newfstatat
+ # define __NR_fstatat64 __NR_newfstatat
+ #endif
+
+ #ifdef __NR_fstatat64
++# include <sys/stat.h>
++# include "xstatconv.h"
+ int fstatat64(int fd, const char *file, struct stat64 *buf, int flag)
+ {
++# ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ int ret;
+ struct kernel_stat64 kbuf;
+
+@@ -28,9 +29,11 @@
+ __xstat64_conv(&kbuf, buf);
+
+ return ret;
++# else
++ return INLINE_SYSCALL(fstatat64, 4, fd, file, buf, flag);
++# endif
+ }
++libc_hidden_def(fstatat64)
+ #else
+ /* should add emulation with fstat64() and /proc/self/fd/ ... */
+ #endif
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fstatat.c uClibc-git/libc/sysdeps/linux/common/fstatat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fstatat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fstatat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,7 +11,7 @@
+ #include "xstatconv.h"
+
+ /* 64bit ports tend to favor newfstatat() */
+-#ifdef __NR_newfstatat
++#if __WORDSIZE == 64 && defined __NR_newfstatat
+ # define __NR_fstatat64 __NR_newfstatat
+ #endif
+
+@@ -19,14 +19,26 @@
+ int fstatat(int fd, const char *file, struct stat *buf, int flag)
+ {
+ int ret;
++# ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ struct kernel_stat64 kbuf;
+-
+ ret = INLINE_SYSCALL(fstatat64, 4, fd, file, &kbuf, flag);
+ if (ret == 0)
+ __xstat32_conv(&kbuf, buf);
+-
++# else
++ ret = INLINE_SYSCALL(fstatat64, 4, fd, file, buf, flag);
++ if (ret == 0) {
++ /* Did we overflow */
++ if (buf->__pad1 || buf->__pad2 || buf->__pad3
++ || buf->__pad4 || buf->__pad5 || buf->__pad6
++ || buf->__pad7) {
++ __set_errno(EOVERFLOW);
++ return -1;
++ }
++ }
++# endif /* __ARCH_HAS_DEPRECATED_SYSCALLS__ */
+ return ret;
+ }
++libc_hidden_def(fstatat)
+ #else
+ /* should add emulation with fstat() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fstat.c uClibc-git/libc/sysdeps/linux/common/fstat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fstat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fstat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,10 +12,28 @@
+ #include <sys/stat.h>
+ #include "xstatconv.h"
+
++#if defined __NR_fstat64 && !defined __NR_fstat
++int fstat(int fd, struct stat *buf)
++{
++ int result = INLINE_SYSCALL(fstat64, 2, fd, buf);
++ if (result == 0) {
++ /* Did we overflow? */
++ if (buf->__pad1 || buf->__pad2 || buf->__pad3
++ || buf->__pad4 || buf->__pad5
++ || buf->__pad6 || buf->__pad7) {
++ __set_errno(EOVERFLOW);
++ return -1;
++ }
++ }
++ return result;
++}
++libc_hidden_def(fstat)
++
++#elif defined __NR_fstat
+ int fstat(int fd, struct stat *buf)
+ {
+ int result;
+-#ifdef __NR_fstat64
++# ifdef __NR_fstat64
+ /* normal stat call has limited values for various stat elements
+ * e.g. uid device major/minor etc.
+ * so we use 64 variant if available
+@@ -26,19 +44,21 @@
+ if (result == 0) {
+ __xstat32_conv(&kbuf, buf);
+ }
+-#else
++# else
+ struct kernel_stat kbuf;
+
+ result = INLINE_SYSCALL(fstat, 2, fd, &kbuf);
+ if (result == 0) {
+ __xstat_conv(&kbuf, buf);
+ }
+-#endif
++# endif
+ return result;
+ }
+ libc_hidden_def(fstat)
+
+-#if ! defined __NR_fstat64 && defined __UCLIBC_HAS_LFS__
++# if ! defined __NR_fstat64 && defined __UCLIBC_HAS_LFS__
+ strong_alias_untyped(fstat,fstat64)
+ libc_hidden_def(fstat64)
++# endif
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fstatfs.c uClibc-git/libc/sysdeps/linux/common/fstatfs.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fstatfs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fstatfs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,8 +9,9 @@
+
+ #include <sys/syscall.h>
+ #include <sys/vfs.h>
++#include <string.h>
+
+-#ifndef __USE_FILE_OFFSET64
++#ifndef __USE_FILE_OFFSET64__
+ extern int fstatfs (int __fildes, struct statfs *__buf)
+ __THROW __nonnull ((2));
+ #else
+@@ -23,8 +24,26 @@
+ #endif
+
+ extern __typeof(fstatfs) __libc_fstatfs attribute_hidden;
+-#define __NR___libc_fstatfs __NR_fstatfs
++#ifdef __NR_fstatfs
++# define __NR___libc_fstatfs __NR_fstatfs
+ _syscall2(int, __libc_fstatfs, int, fd, struct statfs *, buf)
++#else
++int __libc_fstatfs (int __fildes, struct statfs *__buf)
++{
++ int err = INLINE_SYSCALL(fstatfs64, 3, __fildes, sizeof(*__buf), __buf);
++
++ if (err == 0) {
++ /* Did we overflow? */
++ if (__buf->__pad1 || __buf->__pad2 || __buf->__pad3 ||
++ __buf->__pad4 || __buf->__pad5) {
++ __set_errno(EOVERFLOW);
++ return -1;
++ }
++ }
++ return err;
++};
++/* Redefined fstatfs because we need it for backwards compatibility */
++#endif /* __NR_fstatfs */
+
+ #if defined __UCLIBC_LINUX_SPECIFIC__
+ weak_alias(__libc_fstatfs,fstatfs)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/fsync.c uClibc-git/libc/sysdeps/linux/common/fsync.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/fsync.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/fsync.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,29 +9,9 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include "sysdep-cancel.h"
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
++#define __NR___fsync_nocancel __NR_fsync
++static _syscall1(int, __NC(fsync), int, fd)
+
+-#define __NR___syscall_fsync __NR_fsync
+-static inline _syscall1(int, __syscall_fsync, int, fd)
+-
+-extern __typeof(fsync) __libc_fsync;
+-
+-int __libc_fsync(int fd)
+-{
+- if (SINGLE_THREAD_P)
+- return __syscall_fsync(fd);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __syscall_fsync(fd);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-
+-weak_alias(__libc_fsync, fsync)
++CANCELLABLE_SYSCALL(int, fsync, (int fd), (fd))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ftruncate64.c uClibc-git/libc/sysdeps/linux/common/ftruncate64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ftruncate64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ftruncate64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,50 +7,41 @@
+ * and on 32 bit machines this sends things into the kernel as
+ * two 32-bit arguments (high and low 32 bits of length) that
+ * are ordered based on endianess. It turns out endian.h has
+- * just the macro we need to order things, __LONG_LONG_PAIR.
++ * just the macro we need to order things, OFF64_HI_LO.
+ */
+
+-#include <features.h>
++#include <_lfs_64.h>
++#include <sys/syscall.h>
++#include <unistd.h>
+
+-#ifdef __UCLIBC_HAS_LFS__
++#ifdef __NR_ftruncate64
++# include <bits/wordsize.h>
+
+-# include <unistd.h>
+-# include <errno.h>
+-# include <endian.h>
+-# include <stdint.h>
+-# include <sys/types.h>
+-# include <sys/syscall.h>
+-
+-
+-# ifdef __NR_ftruncate64
+-
+-# if __WORDSIZE == 64
++# if __WORDSIZE == 64
+
+ /* For a 64 bit machine, life is simple... */
+ _syscall2(int, ftruncate64, int, fd, __off64_t, length)
+
+-# elif __WORDSIZE == 32
++# elif __WORDSIZE == 32
++# include <endian.h>
++# include <stdint.h>
+
+ /* The exported ftruncate64 function. */
+ int ftruncate64 (int fd, __off64_t length)
+ {
+- uint32_t low = length & 0xffffffff;
+- uint32_t high = length >> 32;
+-# if defined(__UCLIBC_TRUNCATE64_HAS_4_ARGS__)
+- return INLINE_SYSCALL(ftruncate64,
+- 4, fd, 0, __LONG_LONG_PAIR (high, low));
+-# else
+- return INLINE_SYSCALL(ftruncate64, 3, fd,
+- __LONG_LONG_PAIR (high, low));
+-# endif
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++ return INLINE_SYSCALL(ftruncate64, 4, fd, 0, OFF64_HI_LO(length));
++# else
++ return INLINE_SYSCALL(ftruncate64, 3, fd, OFF64_HI_LO(length));
++# endif
+ }
+
+-# else /* __WORDSIZE */
+-# error Your machine is not 64 bit or 32 bit, I am dazed and confused.
+-# endif /* __WORDSIZE */
+-
+-# else /* __NR_ftruncate64 */
++# else /* __WORDSIZE */
++# error Your machine is not 64 bit or 32 bit, I am dazed and confused.
++# endif /* __WORDSIZE */
+
++#else /* __NR_ftruncate64 */
++# include <errno.h>
+
+ int ftruncate64 (int fd, __off64_t length)
+ {
+@@ -65,7 +56,5 @@
+ return -1;
+ }
+
+-# endif /* __NR_ftruncate64 */
++#endif /* __NR_ftruncate64 */
+ libc_hidden_def(ftruncate64)
+-
+-#endif /* __UCLIBC_HAS_LFS__ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ftruncate.c uClibc-git/libc/sysdeps/linux/common/ftruncate.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ftruncate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ftruncate.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,20 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
++#if defined __NR_ftruncate64 && !defined __NR_ftruncate
++# include <endian.h>
++# include <stdint.h>
++int ftruncate(int fd, __off_t length)
++{
++# if defined __UCLIBC_HAS_LFS__
++ return ftruncate64(fd, length);
++# elif __WORDSIZE == 32
++ return INLINE_SYSCALL(ftruncate64, 3, fd, OFF_HI_LO(length));
++# endif
++}
++libc_hidden_def(ftruncate);
+
++#else
+ _syscall2(int, ftruncate, int, fd, __off_t, length)
+ libc_hidden_def(ftruncate)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/futimens.c uClibc-git/libc/sysdeps/linux/common/futimens.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/futimens.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/futimens.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,13 +16,13 @@
+ * Note that due to not including the header, we have to alias the call
+ * manually.
+ */
+-extern int utimensat (int __fd, __const char *__path,
+- __const struct timespec __times[2],
++extern int utimensat (int __fd, const char *__path,
++ const struct timespec __times[2],
+ int __flags) __THROW;
+ libc_hidden_proto(utimensat)
+
+-int futimens (int __fd, __const struct timespec __times[2]) __THROW;
+-int futimens (int fd, __const struct timespec ts[2])
++int futimens (int __fd, const struct timespec __times[2]) __THROW;
++int futimens (int fd, const struct timespec ts[2])
+ {
+ return utimensat(fd, 0, ts, 0);
+ }
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getdents64.c uClibc-git/libc/sysdeps/linux/common/getdents64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getdents64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getdents64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,7 +4,11 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
++#include <_lfs_64.h>
++#include <sys/syscall.h>
++
++#ifdef __NR_getdents64
++
+ #include <assert.h>
+ #include <errno.h>
+ #include <dirent.h>
+@@ -13,17 +17,9 @@
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/param.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <bits/kernel_types.h>
++#include <bits/wordsize.h>
+ #include <bits/uClibc_alloc.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_getdents64
+-
+-# ifndef offsetof
+-# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+-# endif
+-
+ struct kernel_dirent64
+ {
+ uint64_t d_ino;
+@@ -36,7 +32,6 @@
+ # define __NR___syscall_getdents64 __NR_getdents64
+ static __inline__ _syscall3(int, __syscall_getdents64, int, fd, unsigned char *, dirp, size_t, count)
+
+-ssize_t __getdents64 (int fd, char *buf, size_t nbytes) attribute_hidden;
+ ssize_t __getdents64 (int fd, char *buf, size_t nbytes)
+ {
+ struct dirent64 *dp;
+@@ -96,10 +91,10 @@
+ return (char *) dp - buf;
+ }
+
+-#if __WORDSIZE == 64
++#if __WORDSIZE == 64 || (defined __UCLIBC_HAS_LFS__ && !defined __NR_getdents)
+ /* since getdents doesnt give us d_type but getdents64 does, try and
+ * use getdents64 as much as possible */
+-attribute_hidden strong_alias(__getdents64,__getdents)
++strong_alias(__getdents64,__getdents)
+ #endif
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getdents.c uClibc-git/libc/sysdeps/linux/common/getdents.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getdents.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getdents.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,21 +4,17 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <assert.h>
+-#include <errno.h>
++#include <sys/syscall.h>
++#include <bits/wordsize.h>
++
++#if !(defined __UCLIBC_HAS_LFS__ && defined __NR_getdents64 && __WORDSIZE == 64)
++
+ #include <dirent.h>
+-#include <stddef.h>
+-#include <stdint.h>
+ #include <string.h>
+-#include <unistd.h>
+-#include <sys/param.h>
+ #include <sys/types.h>
+-#include <sys/syscall.h>
+ #include <bits/kernel_types.h>
+ #include <bits/kernel-features.h>
+-#include <bits/uClibc_alloc.h>
+
+-#if !(defined __UCLIBC_HAS_LFS__ && defined __NR_getdents64 && __WORDSIZE == 64)
+ /* If the condition above is met, __getdents is defined as an alias
+ * for __getdents64 (see getdents64.c). Otherwise...
+ */
+@@ -30,10 +26,7 @@
+ * version / arch details.
+ */
+
+-#ifndef offsetof
+-# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+-#endif
+-
++# ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ struct kernel_dirent
+ {
+ long int d_ino;
+@@ -41,13 +34,16 @@
+ unsigned short int d_reclen;
+ char d_name[256];
+ };
++# else
++# define kernel_dirent dirent
++# endif
+
+-ssize_t __getdents (int fd, char *buf, size_t nbytes) attribute_hidden;
+-
+-#define __NR___syscall_getdents __NR_getdents
++# if defined __NR_getdents
++# define __NR___syscall_getdents __NR_getdents
+ static __always_inline _syscall3(int, __syscall_getdents, int, fd, unsigned char *, kdirp, size_t, count)
++# endif
+
+-#if defined __ASSUME_GETDENTS32_D_TYPE
++# if defined __ASSUME_GETDENTS32_D_TYPE && defined __NR_getdents
+
+ ssize_t __getdents (int fd, char *buf, size_t nbytes)
+ {
+@@ -76,7 +72,14 @@
+ return retval;
+ }
+
+-#elif ! defined __UCLIBC_HAS_LFS__ || ! defined __NR_getdents64
++# elif ! defined __UCLIBC_HAS_LFS__ || !defined __NR_getdents64
++
++# include <assert.h>
++# include <stddef.h>
++# include <errno.h>
++# include <unistd.h>
++# include <sys/param.h>
++# include <bits/uClibc_alloc.h>
+
+ ssize_t __getdents (int fd, char *buf, size_t nbytes)
+ {
+@@ -88,6 +91,7 @@
+ const size_t size_diff = (offsetof (struct dirent, d_name)
+ - offsetof (struct kernel_dirent, d_name));
+
++# ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ red_nbytes = MIN (nbytes - ((nbytes /
+ (offsetof (struct dirent, d_name) + 14)) * size_diff),
+ nbytes - size_diff);
+@@ -96,6 +100,21 @@
+ skdp = kdp = stack_heap_alloc(red_nbytes);
+
+ retval = __syscall_getdents(fd, (unsigned char *)kdp, red_nbytes);
++# else
++
++ dp = (struct dirent *) buf;
++ skdp = kdp = stack_heap_alloc(nbytes);
++
++ retval = INLINE_SYSCALL(getdents64, 3, fd, (unsigned char *)kdp, nbytes);
++ if (retval > 0) {
++ /* Did we overflow? */
++ if (kdp->__pad1 || kdp->__pad2) {
++ __set_errno(EINVAL);
++ return -1;
++ }
++ }
++# endif
++
+ if (retval == -1) {
+ stack_heap_free(skdp);
+ return -1;
+@@ -137,9 +156,10 @@
+ return (char *) dp - buf;
+ }
+
+-#elif __WORDSIZE == 32
++# elif __WORDSIZE == 32 && !defined __NR_getdents64
++
++# include <stddef.h>
+
+-extern __typeof(__getdents) __getdents64 attribute_hidden;
+ ssize_t __getdents (int fd, char *buf, size_t nbytes)
+ {
+ struct dirent *dp;
+@@ -165,10 +185,10 @@
+ return ret;
+ }
+
+-#endif
++# endif
+
+-#if defined __UCLIBC_HAS_LFS__ && ! defined __NR_getdents64
+-attribute_hidden strong_alias(__getdents,__getdents64)
+-#endif
++# if defined __UCLIBC_HAS_LFS__ && ! defined __NR_getdents64
++strong_alias(__getdents,__getdents64)
++# endif
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getdirname.c uClibc-git/libc/sysdeps/linux/common/getdirname.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getdirname.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getdirname.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getgroups.c uClibc-git/libc/sysdeps/linux/common/getgroups.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getgroups.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getgroups.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,10 +8,7 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <stdlib.h>
+ #include <unistd.h>
+-#include <grp.h>
+-
+
+ #if defined(__NR_getgroups32)
+ # undef __NR_getgroups
+@@ -22,12 +19,14 @@
+ _syscall2(int, getgroups, int, size, gid_t *, list)
+
+ #else
+-
+-#define MIN(a,b) (((a)<(b))?(a):(b))
+-
+-#define __NR___syscall_getgroups __NR_getgroups
+-static __inline__ _syscall2(int, __syscall_getgroups,
+- int, size, __kernel_gid_t *, list)
++# include <errno.h>
++# include <stdlib.h>
++# include <sys/types.h>
++# include <sys/param.h>
++
++# define __NR___syscall_getgroups __NR_getgroups
++static __always_inline
++_syscall2(int, __syscall_getgroups, int, size, __kernel_gid_t *, list)
+
+ int getgroups(int size, gid_t groups[])
+ {
+@@ -56,5 +55,4 @@
+ }
+ }
+ #endif
+-
+ libc_hidden_def(getgroups)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/get_kernel_syms.c uClibc-git/libc/sysdeps/linux/common/get_kernel_syms.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/get_kernel_syms.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/get_kernel_syms.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,8 +9,8 @@
+
+ #include <sys/syscall.h>
+
+-struct kernel_sym;
+-int get_kernel_syms(struct kernel_sym *table attribute_unused);
+ #ifdef __NR_get_kernel_syms
++struct kernel_sym;
++int get_kernel_syms(struct kernel_sym *table);
+ _syscall1(int, get_kernel_syms, struct kernel_sym *, table)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getpagesize.c uClibc-git/libc/sysdeps/linux/common/getpagesize.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getpagesize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getpagesize.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,16 +12,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <features.h>
+ #include <sys/param.h>
+
+-extern size_t __pagesize;
+-
+ /* Return the system page size. */
+ /* couldn't make __getpagesize hidden, because shm.h uses it in a macro */
+ extern __typeof(getpagesize) __getpagesize;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getrlimit64.c uClibc-git/libc/sysdeps/linux/common/getrlimit64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getrlimit64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getrlimit64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,20 +12,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+-
+-#include <sys/types.h>
+-#include <sys/resource.h>
+ #include <bits/wordsize.h>
+
+ /* the regular getrlimit will work just fine for 64bit users */
++#if __WORDSIZE == 32
+
+-#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 32
+-
++# include <sys/resource.h>
+
+ /* Put the soft and hard limits for RESOURCE in *RLIMITS.
+ Returns 0 if successful, -1 if not (and sets errno). */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/getrlimit.c uClibc-git/libc/sysdeps/linux/common/getrlimit.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/getrlimit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/getrlimit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,12 +7,9 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define getrlimit64 __hide_getrlimit64
+ #include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/resource.h>
+-#undef getrlimit64
+-
++#include <bits/wordsize.h>
+
+ /* Only wrap getrlimit if the new ugetrlimit is not present and getrlimit sucks */
+
+@@ -25,14 +22,14 @@
+ struct rlimit *, rlim)
+ int getrlimit(__rlimit_resource_t resource, struct rlimit *rlimits)
+ {
+- return (__syscall_ugetrlimit(resource, rlimits));
++ return __syscall_ugetrlimit(resource, rlimits);
+ }
+
+ #elif !defined(__UCLIBC_HANDLE_OLDER_RLIMIT__)
+
+ /* We don't need to wrap getrlimit() */
+ _syscall2(int, getrlimit, __rlimit_resource_t, resource,
+- struct rlimit *, rlim)
++ struct rlimit *, rlim)
+
+ #else
+
+@@ -59,9 +56,8 @@
+ return result;
+ }
+ #endif
+-
+ libc_hidden_def(getrlimit)
+
+ #if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
+-strong_alias(getrlimit, getrlimit64)
++strong_alias_untyped(getrlimit, getrlimit64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/gettimeofday.c uClibc-git/libc/sysdeps/linux/common/gettimeofday.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/gettimeofday.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/gettimeofday.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,9 +10,5 @@
+ #include <sys/syscall.h>
+ #include <sys/time.h>
+
+-#ifdef __USE_BSD
+-_syscall2(int, gettimeofday, struct timeval *, tv, struct timezone *, tz)
+-#else
+-_syscall2(int, gettimeofday, struct timeval *, tv, void *, tz)
+-#endif
++_syscall2(int, gettimeofday, struct timeval *, tv, __timezone_ptr_t, tz)
+ libc_hidden_def(gettimeofday)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/hp-timing.h uClibc-git/libc/sysdeps/linux/common/hp-timing.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/hp-timing.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/hp-timing.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/init_module.c uClibc-git/libc/sysdeps/linux/common/init_module.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/init_module.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/init_module.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,12 +8,13 @@
+ */
+
+ #include <sys/syscall.h>
+-int init_module(void *first, void *second, void *third, void *fourth, void *fifth);
++
+ #ifdef __NR_init_module
++int init_module(void *first, void *second, void *third, void *fourth, void *fifth);
+ /* This may have 5 arguments (for old 2.0 kernels) or 2 arguments
+ * (for 2.2 and 2.4 kernels). Use the greatest common denominator,
+ * and let the kernel cope with whatever it gets. It's good at that. */
+ _syscall5(int, init_module, void *, first, void *, second, void *, third,
+- void *, fourth, void *, fifth)
++ void *, fourth, void *, fifth)
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/inotify.c uClibc-git/libc/sysdeps/linux/common/inotify.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/inotify.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/inotify.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,6 +19,13 @@
+ _syscall1(int, inotify_init1, int, flags)
+ #endif
+
++#if defined __NR_inotify_init1 && !defined __NR_inotify_init
++int inotify_init(void)
++{
++ return INLINE_SYSCALL(inotify_init1, 1, 0);
++}
++#endif
++
+ #ifdef __NR_inotify_add_watch
+ _syscall3(int, inotify_add_watch, int, fd, const char *, path, uint32_t, mask)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ioctl.c uClibc-git/libc/sysdeps/linux/common/ioctl.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ioctl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ioctl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,14 +10,7 @@
+ #include <sys/syscall.h>
+ #include <stdarg.h>
+ #include <sys/ioctl.h>
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+-libc_hidden_proto(ioctl)
++#include <cancel.h>
+
+ #define __NR___syscall_ioctl __NR_ioctl
+ static __always_inline
+@@ -30,17 +23,16 @@
+
+ va_start(list, request);
+ arg = va_arg(list, void *);
+-
+ va_end(list);
+
+ if (SINGLE_THREAD_P)
+ return __syscall_ioctl(fd, request, arg);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#ifdef __NEW_THREADS
+ int oldtype = LIBC_CANCEL_ASYNC ();
+ int result = __syscall_ioctl(fd, request, arg);
+ LIBC_CANCEL_RESET (oldtype);
+ return result;
+ #endif
+ }
+-libc_hidden_def(ioctl)
++lt_strong_alias(ioctl)
++lt_libc_hidden(ioctl)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ioperm.c uClibc-git/libc/sysdeps/linux/common/ioperm.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ioperm.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ioperm.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,10 +13,6 @@
+
+ /* psm: can't #include <sys/io.h>, some archs miss it */
+ extern int ioperm(unsigned long __from, unsigned long __num, int __turn_on) __THROW;
+-/* Not needed internally;
+-libc_hidden_proto(ioperm)
+-*/
+ _syscall3(int, ioperm, unsigned long, from, unsigned long, num, int, turn_on)
+-/*libc_hidden_def(ioperm)*/
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/common/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,6 @@
++/* Private macros for accessing __jmp_buf contents. dummy version. */
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/lchown.c uClibc-git/libc/sysdeps/linux/common/lchown.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/lchown.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/lchown.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,17 +11,26 @@
+ #include <unistd.h>
+ #include <bits/wordsize.h>
+
+-#if (__WORDSIZE == 32 && defined(__NR_lchown32)) || __WORDSIZE == 64
+-# ifdef __NR_lchown32
+-# undef __NR_lchown
+-# define __NR_lchown __NR_lchown32
+-# endif
++#if defined __NR_fchownat && !defined __NR_lchown
++# include <fcntl.h>
++int lchown(const char *path, uid_t owner, gid_t group)
++{
++ return fchownat(AT_FDCWD, path, owner, group, AT_SYMLINK_NOFOLLOW);
++}
++
++#else
++
++# if (__WORDSIZE == 32 && defined(__NR_lchown32)) || __WORDSIZE == 64
++# ifdef __NR_lchown32
++# undef __NR_lchown
++# define __NR_lchown __NR_lchown32
++# endif
+
+ _syscall3(int, lchown, const char *, path, uid_t, owner, gid_t, group)
+
+-#else
++# else
+
+-# define __NR___syscall_lchown __NR_lchown
++# define __NR___syscall_lchown __NR_lchown
+ static __inline__ _syscall3(int, __syscall_lchown, const char *, path,
+ __kernel_uid_t, owner, __kernel_gid_t, group)
+
+@@ -35,4 +44,6 @@
+ return __syscall_lchown(path, owner, group);
+ }
+
++# endif
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/linkat.c uClibc-git/libc/sysdeps/linux/common/linkat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/linkat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/linkat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_linkat
+ _syscall5(int, linkat, int, fromfd, const char *, from, int, tofd, const char *, to, int, flags)
++libc_hidden_def(linkat)
+ #else
+ /* should add emulation with link() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/link.c uClibc-git/libc/sysdeps/linux/common/link.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/link.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/link.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,4 +9,13 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++
++#if defined __NR_linkat && !defined __NR_link
++# include <fcntl.h>
++int link(const char *oldpath, const char *newpath)
++{
++ return linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0);
++}
++#else
+ _syscall2(int, link, const char *, oldpath, const char *, newpath)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/llseek.c uClibc-git/libc/sysdeps/linux/common/llseek.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/llseek.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/llseek.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,36 +7,26 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <unistd.h>
+-#include <sys/types.h>
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
++#include <bits/wordsize.h>
+
+ /* Newer kernel ports have llseek() instead of _llseek() */
+ #if !defined __NR__llseek && defined __NR_llseek
+ # define __NR__llseek __NR_llseek
+ #endif
+
+-#if defined __NR__llseek && defined __UCLIBC_HAS_LFS__
+-
+-loff_t lseek64(int fd, loff_t offset, int whence)
+-{
+- loff_t result;
+- return (loff_t)(INLINE_SYSCALL(_llseek, 5, fd, (off_t) (offset >> 32),
+- (off_t) (offset & 0xffffffff), &result, whence) ?: result);
+-}
+-
+-#else
+-
+-loff_t lseek64(int fd, loff_t offset, int whence)
++#if defined __NR__llseek && __WORDSIZE == 32
++# include <unistd.h>
++# include <endian.h>
++# include <cancel.h>
++off64_t __NC(lseek64)(int fd, off64_t offset, int whence)
+ {
+- return (loff_t)(lseek(fd, (off_t) (offset), whence));
++ off64_t result;
++ /* do we not need to handle the offset with __LONG_LONG_PAIR depending on endianness? */
++ return (off64_t)INLINE_SYSCALL(_llseek, 5, fd, (off_t) OFF64_HI(offset),
++ (off_t) OFF64_LO(offset), &result, whence) ?: result;
+ }
+-
+-#endif
+-
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(lseek64)
+-#else
+-libc_hidden_weak(lseek64)
+-strong_alias(lseek64,__libc_lseek64)
++CANCELLABLE_SYSCALL(off64_t, lseek64, (int fd, off64_t offset, int whence), (fd, offset, whence))
++lt_libc_hidden(lseek64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/longjmp.c uClibc-git/libc/sysdeps/linux/common/longjmp.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/longjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/longjmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,23 +12,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <setjmp.h>
+ #include <signal.h>
+
+-
+-extern void __longjmp (__jmp_buf __env, int __val) attribute_noreturn;
+-libc_hidden_proto(__longjmp)
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-extern void _longjmp_unwind (jmp_buf env, int val);
+-#endif
+-
+-extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
+ /* Set the signal mask to the one specified in ENV, and jump
+ to the position specified in ENV, causing the setjmp
+ call there to return VAL, or 1 if VAL is 0. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/lseek.c uClibc-git/libc/sysdeps/linux/common/lseek.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/lseek.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/lseek.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,19 +9,55 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#include <cancel.h>
+
+ #ifdef __NR_lseek
+-_syscall3(__off_t, lseek, int, fildes, __off_t, offset, int, whence)
++# define __NR___lseek_nocancel __NR_lseek
++_syscall3(off_t, __NC(lseek), int, fd, off_t, offset, int, whence)
++/* Use lseek64 if __NR_lseek is not defined but UCLIBC_HAS_LFS is enabled */
++#elif !defined __NR_lseek && defined __NR_llseek
++#include <endian.h>
++off_t __NC(lseek)(int fd, off_t offset, int whence)
++{
++#if defined __UCLIBC_HAS_LFS__
++ return lseek64(fd, offset, whence);
++#elif __WORDSIZE == 32
++ __off64_t result;
++ __off_t high = 0;
++ return INLINE_SYSCALL(llseek, 5, fd,
++ __LONG_LONG_PAIR(high, offset),
++ &result, whence) ?: result;
++#endif
++/* No need to handle __WORDSIZE == 64 as such a kernel won't define __NR_llseek */
++}
+ #else
+-
+-__off_t lseek(int fildes, __off_t offset, int whence)
++# include <errno.h>
++off_t __NC(lseek)(int fd, off_t offset attribute_unused, int whence)
+ {
+- return lseek64(fildes, offset, whence);
++ if (fd < 0) {
++ __set_errno(EBADF);
++ return -1;
++ }
++
++ switch(whence) {
++ case SEEK_SET:
++ case SEEK_CUR:
++ case SEEK_END:
++ break;
++ default:
++ __set_errno(EINVAL);
++ return -1;
++ }
++
++ __set_errno(ENOSYS);
++ return -1;
+ }
+ #endif
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(lseek)
+-#else
+-libc_hidden_weak(lseek)
+-strong_alias(lseek,__libc_lseek)
++CANCELLABLE_SYSCALL(off_t, lseek, (int fd, off_t offset, int whence), (fd, offset, whence))
++lt_libc_hidden(lseek)
++#if defined __UCLIBC_HAS_LFS__ && (__WORDSIZE == 64 || (!defined __NR__llseek && !defined __NR_llseek))
++strong_alias_untyped(__NC(lseek),__NC(lseek64))
++strong_alias_untyped(lseek,lseek64)
++lt_strong_alias(lseek64)
++lt_libc_hidden(lseek64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/lstat64.c uClibc-git/libc/sysdeps/linux/common/lstat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/lstat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/lstat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,17 +7,27 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_lstat64
+ # include <unistd.h>
+ # include <sys/stat.h>
+-# include "xstatconv.h"
+
++#if defined __NR_fstatat64 && !defined __NR_lstat64
++# include <fcntl.h>
++
++int lstat64(const char *file_name, struct stat64 *buf)
++{
++ return fstatat64(AT_FDCWD, file_name, buf, AT_SYMLINK_NOFOLLOW);
++}
++libc_hidden_def(lstat64)
+
++/* For systems which have both, prefer the old one */
++#elif defined __NR_lstat64
++# include "xstatconv.h"
+ # define __NR___syscall_lstat64 __NR_lstat64
+-static __inline__ _syscall2(int, __syscall_lstat64, const char *, file_name,
+- struct kernel_stat64 *, buf)
++static __always_inline _syscall2(int, __syscall_lstat64, const char *, file_name,
++ struct kernel_stat64 *, buf)
+
+ int lstat64(const char *file_name, struct stat64 *buf)
+ {
+@@ -31,5 +41,4 @@
+ return result;
+ }
+ libc_hidden_def(lstat64)
+-
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/lstat.c uClibc-git/libc/sysdeps/linux/common/lstat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/lstat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/lstat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,12 +10,23 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+-#include "xstatconv.h"
++
++#if defined __NR_fstatat64 && !defined __NR_lstat
++# include <fcntl.h>
+
+ int lstat(const char *file_name, struct stat *buf)
+ {
++ return fstatat(AT_FDCWD, file_name, buf, AT_SYMLINK_NOFOLLOW);
++}
++libc_hidden_def(lstat)
++
++/* For systems which have both, prefer the old one */
++#else
++# include "xstatconv.h"
++int lstat(const char *file_name, struct stat *buf)
++{
+ int result;
+-#ifdef __NR_lstat64
++# ifdef __NR_lstat64
+ /* normal stat call has limited values for various stat elements
+ * e.g. uid device major/minor etc.
+ * so we use 64 variant if available
+@@ -26,19 +37,22 @@
+ if (result == 0) {
+ __xstat32_conv(&kbuf, buf);
+ }
+-#else
++# else
+ struct kernel_stat kbuf;
+
+ result = INLINE_SYSCALL(lstat, 2, file_name, &kbuf);
+ if (result == 0) {
+ __xstat_conv(&kbuf, buf);
+ }
+-#endif
++# endif /* __NR_lstat64 */
+ return result;
+ }
+ libc_hidden_def(lstat)
+
+-#if ! defined __NR_lstat64 && defined __UCLIBC_HAS_LFS__
++# if ! defined __NR_fstatat64 && ! defined __NR_lstat64 \
++ && defined __UCLIBC_HAS_LFS__
+ strong_alias_untyped(lstat,lstat64)
+ libc_hidden_def(lstat64)
+-#endif
++# endif
++
++#endif /* __NR_fstatat64 */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/Makefile.in uClibc-git/libc/sysdeps/linux/common/Makefile.in
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -23,6 +23,7 @@
+ bdflush.c \
+ capget.c \
+ capset.c \
++ dup3.c \
+ eventfd.c \
+ inotify.c \
+ ioperm.c \
+@@ -64,24 +65,30 @@
+ # NPTL needs these internally: madvise.c
+ CSRC-$(findstring y,$(UCLIBC_LINUX_SPECIFIC)$(UCLIBC_HAS_THREADS_NATIVE)) += madvise.c
+ ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC- += fork.c getpid.c raise.c open.c close.c read.c write.c
++CSRC- += fork.c getpid.c raise.c #open.c close.c read.c write.c
+ CSRC- += $(if $(findstring =arm=,=$(TARGET_ARCH)=),vfork.c)
+ CSRC- += $(if $(findstring =x86_64=,=$(TARGET_ARCH)=),vfork.c)
+-CSRC- += $(if $(findstring =mips=y=,=$(TARGET_ARCH)=$(CONFIG_MIPS_O32_ABI)=),waitpid.c)
++#CSRC- += $(if $(findstring =mips=y=,=$(TARGET_ARCH)=$(CONFIG_MIPS_O32_ABI)=),waitpid.c)
++CSRC- += $(if $(findstring =metag=,=$(TARGET_ARCH)=),vfork.c)
++endif
++ifneq ($(ARCH_HAS_DEPRECATED_SYSCALLS),y)
++# No conversion is needed for new architectures
++CSRC- += xstatconv.c
+ endif
+ # stubbed out in mman.h
+ CSRC-$(ARCH_USE_MMU) += msync.c
+ # we need these internally: getdomainname.c
+ CSRC-$(UCLIBC_BSD_SPECIFIC) += mincore.c setdomainname.c
+ CSRC-$(UCLIBC_NTP_LEGACY) += ntp_gettime.c
+-# aio_cancel|aio_error|aio_fsync|aio_read|aio_return|aio_suspend|aio_write|clock_getres|clock_gettime|clock_settime|clock_settime|fdatasync|lio_listio|mlockall|munlockall|mlock|munlock|mq_close|mq_getattr|mq_notify|mq_open|mq_receive|mq_timedreceive|mq_send|mq_timedsend|mq_setattr|mq_unlink|nanosleep|sched_getparam|sched_get_priority_max|sched_get_priority_min|sched_getscheduler|sched_rr_get_interval|sched_setparam|sched_setscheduler|sem_close|sem_destroy|sem_getvalue|sem_init|sem_open|sem_post|sem_trywait|sem_wait|sem_unlink|sem_wait|shm_open|shm_unlink|sigqueue|sigtimedwait|sigwaitinfo|sigwaitinfo|timer_create|timer_delete|timer_getoverrun|timer_gettime|timer_settime
++# aio_cancel|aio_error|aio_fsync|aio_read|aio_return|aio_suspend|aio_write|clock_getres|clock_gettime|clock_settime|clock_settime|fdatasync|lio_listio|mlockall|munlockall|mlock|munlock|mq_close|mq_getattr|mq_notify|mq_open|mq_receive|mq_timedreceive|mq_send|mq_timedsend|mq_setattr|mq_unlink|nanosleep|sched_getparam|sched_get_priority_max|sched_get_priority_min|sched_getscheduler|sched_rr_get_interval|sched_setparam|sched_setscheduler|sem_close|sem_destroy|sem_getvalue|sem_init|sem_open|sem_post|sem_trywait|sem_wait|sem_unlink|sem_wait|shm_open|shm_unlink|sigqueue|sigtimedwait|sigwaitinfo|timer_create|timer_delete|timer_getoverrun|timer_gettime|timer_settime
+ CSRC-$(UCLIBC_HAS_REALTIME) += clock_getres.c clock_gettime.c clock_settime.c \
+ fdatasync.c mlockall.c mlock.c munlockall.c munlock.c \
+ nanosleep.c __rt_sigtimedwait.c __rt_sigwaitinfo.c sched_getparam.c \
+ sched_get_priority_max.c sched_get_priority_min.c sched_getscheduler.c \
+ sched_rr_get_interval.c sched_setparam.c sched_setscheduler.c sigqueue.c
+ # clock_getcpuclockid|clock_nanosleep|mq_timedreceive|mq_timedsend|posix_fadvise|posix_fallocate|posix_madvise|posix_memalign|posix_mem_offset|posix_spawnattr_destroy|posix_spawnattr_init|posix_spawnattr_getflags|posix_spawnattr_setflags|posix_spawnattr_getpgroup|posix_spawnattr_setpgroup|posix_spawnattr_getschedparam|posix_spawnattr_setschedparam|posix_spawnattr_getschedpolicy|posix_spawnattr_setschedpolicy|posix_spawnattr_getsigdefault|posix_spawnattr_setsigdefault|posix_spawnattr_getsigmask|posix_spawnattr_setsigmask|posix_spawnattr_init|posix_spawnattr_setflags|posix_spawnattr_setpgroup|posix_spawnattr_setschedparam|posix_spawnattr_setschedpolicy|posix_spawnattr_setsigdefault|posix_spawnattr_setsigmask|posix_spawn_file_actions_addclose|posix_spawn_file_actions_addopen|posix_spawn_file_actions_adddup2|posix_spawn_file_actions_addopen|posix_spawn_file_actions_destroy|posix_spawn_file_actions_init|posix_spawn_file_actions_init|posix_spawn|posix_spawnp|posix_spawnp|posix_typed_mem_get_info|pthread_mutex_timedlock|sem_timedwait
+-CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise64.c posix_fadvise.c
++CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise64.c posix_fadvise.c posix_madvise.c \
++ posix_fallocate.c posix_fallocate64.c
+ CSRC-$(UCLIBC_SUSV4_LEGACY) += utime.c
+ CSRC-$(UCLIBC_HAS_EPOLL) += epoll.c
+ CSRC-$(UCLIBC_HAS_XATTR) += xattr.c
+@@ -96,11 +103,11 @@
+
+ # provided via pthreads builddir
+ CSRC-y := $(filter-out $(libc_a_CSRC) $(notdir $(libpthread_libc_OBJS:.o=.c)),$(CSRC-y))
+-SSRC := $(filter-out $(libc_a_SSRC) $(notdir $(libpthread_libc_OBJS:.o=.S)),$(SSRC))
++SSRC-y := $(filter-out $(libc_a_SSRC) $(notdir $(libpthread_libc_OBJS:.o=.S)),$(SSRC-y))
+
+ # fails for some reason
+-ifneq ($(strip $(ARCH_OBJS)),)
+-CSRC-y := $(filter-out $(notdir $(ARCH_OBJS:.o=.c)) $(ARCH_OBJ_FILTEROUT),$(CSRC-y))
++ifneq ($(strip $(ARCH_OBJS-y)),)
++CSRC-y := $(filter-out $(notdir $(ARCH_OBJS-y:.o=.c)) $(ARCH_OBJ_FILTEROUT-y),$(CSRC-y))
+ endif
+
+ CFLAGS-ssp.c := $(SSP_DISABLE_FLAGS)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mkdirat.c uClibc-git/libc/sysdeps/linux/common/mkdirat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mkdirat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mkdirat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_mkdirat
+ _syscall3(int, mkdirat, int, fd, const char *, path, mode_t, mode)
++libc_hidden_def(mkdirat)
+ #else
+ /* should add emulation with mkdir() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mkdir.c uClibc-git/libc/sysdeps/linux/common/mkdir.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mkdir.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mkdir.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,8 +10,15 @@
+ #include <sys/syscall.h>
+ #include <sys/stat.h>
+
++#if defined __NR_mkdirat && !defined __NR_mkdir
++# include <fcntl.h>
++int mkdir(const char *pathname, mode_t mode)
++{
++ return mkdirat(AT_FDCWD, pathname, mode);
++}
+
+-#define __NR___syscall_mkdir __NR_mkdir
++#else
++# define __NR___syscall_mkdir __NR_mkdir
+ static __inline__ _syscall2(int, __syscall_mkdir, const char *, pathname,
+ __kernel_mode_t, mode)
+
+@@ -19,4 +26,5 @@
+ {
+ return (__syscall_mkdir(pathname, mode));
+ }
++#endif
+ libc_hidden_def(mkdir)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mkfifo.c uClibc-git/libc/sysdeps/linux/common/mkfifo.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mkfifo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mkfifo.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stddef.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mknod.c uClibc-git/libc/sysdeps/linux/common/mknod.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mknod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mknod.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,13 @@
+ #include <sys/syscall.h>
+ #include <sys/stat.h>
+
++#if defined __NR_mknodat && !defined __NR_mknod
++# include <fcntl.h>
++int mknod(const char *path, mode_t mode, dev_t dev)
++{
++ return mknodat(AT_FDCWD, path, mode, dev);
++}
++#else
+ int mknod(const char *path, mode_t mode, dev_t dev)
+ {
+ unsigned long long int k_dev;
+@@ -19,4 +26,5 @@
+
+ return INLINE_SYSCALL(mknod, 3, path, mode, (unsigned int)k_dev);
+ }
++#endif
+ libc_hidden_def(mknod)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mmap64.c uClibc-git/libc/sysdeps/linux/common/mmap64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mmap64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mmap64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,18 +6,12 @@
+ /* Massivly hacked up for uClibc by Erik Andersen */
+
+ #include <_lfs_64.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-
+-#include <errno.h>
+ #include <stdint.h>
+-#include <unistd.h>
+-#include <sys/mman.h>
+ #include <sys/syscall.h>
+-#include <bits/uClibc_page.h>
+-
++#include <errno.h>
++#include <sys/mman.h>
+
+-# if !defined __NR_mmap2
++#ifndef __NR_mmap2
+
+ /*
+ * This version is a stub that just chops off everything at the mmap 32 bit
+@@ -27,7 +21,7 @@
+ *
+ */
+
+-__ptr_t mmap64(__ptr_t addr, size_t len, int prot, int flags, int fd, __off64_t offset)
++void *mmap64(void *addr, size_t len, int prot, int flags, int fd, __off64_t offset)
+ {
+ if (offset != (off_t) offset ||
+ (offset + len) != (off_t) (offset + len)) {
+@@ -38,17 +32,18 @@
+ return mmap(addr, len, prot, flags, fd, (off_t) offset);
+ }
+
+-# else
++#else
++# include <bits/uClibc_page.h>
+
+-/* Some architectures always use 12 as page shift for mmap2() eventhough the
++/* Some architectures always use 12 as page shift for mmap2() even though the
+ * real PAGE_SHIFT != 12. Other architectures use the same value as
+ * PAGE_SHIFT...
+ */
+-# ifndef MMAP2_PAGE_SHIFT
+-# define MMAP2_PAGE_SHIFT 12
+-# endif
++# ifndef MMAP2_PAGE_SHIFT
++# define MMAP2_PAGE_SHIFT 12
++# endif
+
+-__ptr_t mmap64(__ptr_t addr, size_t len, int prot, int flags, int fd, __off64_t offset)
++void *mmap64(void *addr, size_t len, int prot, int flags, int fd, __off64_t offset)
+ {
+ /*
+ * Some arches check the size in INLINE_SYSCALL() and barf if it's
+@@ -73,8 +68,7 @@
+ */
+ sysoff = (uint64_t)offset >> MMAP2_PAGE_SHIFT;
+
+- return (__ptr_t) INLINE_SYSCALL(mmap2, 6, addr, len, prot, flags, fd, sysoff);
++ return (void*) INLINE_SYSCALL(mmap2, 6, addr, len, prot, flags, fd, sysoff);
+ }
+
+-# endif
+-#endif /* __UCLIBC_HAS_LFS__ */
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mmap.c uClibc-git/libc/sysdeps/linux/common/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mmap.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,25 +7,57 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/mman.h>
+-#include <bits/uClibc_page.h>
++#include <sys/syscall.h>
+
+-#ifdef __NR_mmap
++#if defined __UCLIBC_MMAP_HAS_6_ARGS__ && defined __NR_mmap
+
++# ifndef _syscall6
++# error disable __UCLIBC_MMAP_HAS_6_ARGS__ for this arch
++# endif
+
+-#ifdef __UCLIBC_MMAP_HAS_6_ARGS__
++# define __NR__mmap __NR_mmap
++static _syscall6(void *, _mmap, void *, addr, size_t, len,
++ int, prot, int, flags, int, fd, __off_t, offset)
+
+-_syscall6(void *, mmap, void *, start, size_t, length,
+- int, prot, int, flags, int, fd, off_t, offset)
++#elif defined __NR_mmap2 && defined _syscall6
+
+-#else
++# include <errno.h>
++# include <bits/uClibc_page.h>
++# ifndef MMAP2_PAGE_SHIFT
++# define MMAP2_PAGE_SHIFT 12
++# endif
+
+-# define __NR__mmap __NR_mmap
+-static __inline__ _syscall1(__ptr_t, _mmap, unsigned long *, buffer)
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot,
+- int flags, int fd, __off_t offset)
++# define __NR___syscall_mmap2 __NR_mmap2
++static __inline__ _syscall6(void *, __syscall_mmap2, void *, addr, size_t, len,
++ int, prot, int, flags, int, fd, __off_t, offset)
++
++static void *_mmap(void *addr, size_t len, int prot, int flags,
++ int fd, __off_t offset)
++{
++ const int mmap2_shift = MMAP2_PAGE_SHIFT;
++ const __off_t mmap2_mask = ((__off_t) 1 << MMAP2_PAGE_SHIFT) - 1;
++ /* check if offset is page aligned */
++ if (offset & mmap2_mask) {
++ __set_errno(EINVAL);
++ return MAP_FAILED;
++ }
++# ifdef __USE_FILE_OFFSET64
++ return __syscall_mmap2(addr, len, prot, flags, fd,
++ ((__u_quad_t) offset >> mmap2_shift));
++# else
++ return __syscall_mmap2(addr, len, prot, flags, fd,
++ ((__u_long) offset >> mmap2_shift));
++# endif
++}
++
++#elif defined __NR_mmap
++
++# define __NR___syscall_mmap __NR_mmap
++static __inline__ _syscall1(void *, __syscall_mmap, unsigned long *, buffer)
++
++static void *_mmap(void *addr, size_t len, int prot, int flags,
++ int fd, __off_t offset)
+ {
+ unsigned long buffer[6];
+
+@@ -35,37 +67,14 @@
+ buffer[3] = (unsigned long) flags;
+ buffer[4] = (unsigned long) fd;
+ buffer[5] = (unsigned long) offset;
+- return (__ptr_t) _mmap(buffer);
++ return __syscall_mmap(buffer);
+ }
+
+-#endif
+-
+-libc_hidden_def(mmap)
+-
+-#elif defined(__NR_mmap2)
+-
++#else
+
+-#define __NR___syscall_mmap2 __NR_mmap2
+-static __inline__ _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
+- size_t, len, int, prot, int, flags, int, fd, off_t, offset)
++# error "Your architecture doesn't seem to provide mmap() !?"
+
+-/* Some architectures always use 12 as page shift for mmap2() eventhough the
+- * real PAGE_SHIFT != 12. Other architectures use the same value as
+- * PAGE_SHIFT...
+- */
+-# ifndef MMAP2_PAGE_SHIFT
+-# define MMAP2_PAGE_SHIFT 12
+-# endif
+-
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
+-{
+- if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) {
+- __set_errno(EINVAL);
+- return MAP_FAILED;
+- }
+- return __syscall_mmap2(addr, len, prot, flags, fd, offset >> MMAP2_PAGE_SHIFT);
+-}
++#endif
+
++strong_alias(_mmap,mmap)
+ libc_hidden_def(mmap)
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/mount.c uClibc-git/libc/sysdeps/linux/common/mount.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/mount.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/mount.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,5 +10,5 @@
+ #include <sys/syscall.h>
+ #include <sys/mount.h>
+ _syscall5(int, mount, const char *, specialfile, const char *, dir,
+- const char *, filesystemtype, unsigned long, rwflag,
+- const void *, data)
++ const char *, filesystemtype, unsigned long, rwflag,
++ const void *, data)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/msync.c uClibc-git/libc/sysdeps/linux/common/msync.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/msync.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/msync.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,38 +8,14 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <unistd.h>
+-#include <sys/mman.h>
+
+-#ifdef __NR_msync
++#if defined __NR_msync && defined __ARCH_USE_MMU__
++# include <sys/mman.h>
++# include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+-#define __NR___syscall_msync __NR_msync
+-static __always_inline _syscall3(int, __syscall_msync, void *, addr, size_t, length,
+- int, flags)
+-
+-extern __typeof(msync) __libc_msync;
+-int __libc_msync(void * addr, size_t length, int flags)
+-{
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype, result;
+-#endif
+-
+- if (SINGLE_THREAD_P)
+- return __syscall_msync(addr, length, flags);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- oldtype = LIBC_CANCEL_ASYNC ();
+- result = __syscall_msync(addr, length, flags);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-weak_alias(__libc_msync,msync)
++# define __NR___msync_nocancel __NR_msync
++static _syscall3(int, __NC(msync), void *, addr, size_t, length, int, flags)
+
++CANCELLABLE_SYSCALL(int, msync, (void *addr, size_t length, int flags),
++ (addr, length, flags))
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/munmap.c uClibc-git/libc/sysdeps/linux/common/munmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/munmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/munmap.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,9 +8,7 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/mman.h>
+
+-
+ _syscall2(int, munmap, void *, start, size_t, length)
+ libc_hidden_def(munmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/nanosleep.c uClibc-git/libc/sysdeps/linux/common/nanosleep.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/nanosleep.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/nanosleep.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,32 +9,13 @@
+
+ #include <sys/syscall.h>
+ #include <time.h>
++#include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#include <pthreadP.h>
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+-#define __NR___syscall_nanosleep __NR_nanosleep
+-static inline _syscall2(int, __syscall_nanosleep, const struct timespec *, req,
+- struct timespec *, rem);
+-
+-extern __typeof(nanosleep) __libc_nanosleep;
+-
+-int __libc_nanosleep(const struct timespec *req, struct timespec *rem)
+-{
+- if (SINGLE_THREAD_P)
+- return __syscall_nanosleep(req, rem);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __syscall_nanosleep(req, rem);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-
+-weak_alias(__libc_nanosleep,nanosleep)
+-libc_hidden_weak(nanosleep)
++#define __NR___nanosleep_nocancel __NR_nanosleep
++static _syscall2(int, __NC(nanosleep), const struct timespec *, req,
++ struct timespec *, rem);
++
++CANCELLABLE_SYSCALL(int, nanosleep,
++ (const struct timespec *req, struct timespec *rem),
++ (req, rem))
++lt_libc_hidden(nanosleep)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/nice.c uClibc-git/libc/sysdeps/linux/common/nice.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/nice.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/nice.c 2014-02-03 12:32:56.000000000 +0100
+@@ -25,15 +25,15 @@
+
+ static __inline__ int int_add_no_wrap(int a, int b)
+ {
+- int s = a + b;
+-
+ if (b < 0) {
+- if (s > a) s = INT_MIN;
++ if (a < INT_MIN - b)
++ return INT_MIN;
+ } else {
+- if (s < a) s = INT_MAX;
++ if (a > INT_MAX - b)
++ return INT_MAX;
+ }
+
+- return s;
++ return a + b;
+ }
+
+ static __inline__ int __syscall_nice(int incr)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/noophooks.c uClibc-git/libc/sysdeps/linux/common/noophooks.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/noophooks.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/noophooks.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,11 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <libc-internal.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ void
+ __cyg_profile_func_enter (attribute_unused void *this_fn, attribute_unused void *call_site);
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/not-cancel.h uClibc-git/libc/sysdeps/linux/common/not-cancel.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/not-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/not-cancel.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Uncancelable versions of cancelable interfaces. Linux version.
+- Copyright (C) 2003 Free Software Foundation, Inc.
++ Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+
+@@ -14,17 +14,50 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
++#include <sys/types.h>
+ #include <sysdep.h>
+
++#ifdef NOT_IN_libc
++
+ /* Uncancelable open. */
++#if defined __NR_openat && !defined __NR_open
++#define open_not_cancel(name, flags, mode) \
++ INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), (flags), (mode))
++#define open_not_cancel_2(name, flags) \
++ INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), (flags))
++#else
+ #define open_not_cancel(name, flags, mode) \
+ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode))
+ #define open_not_cancel_2(name, flags) \
+ INLINE_SYSCALL (open, 2, (const char *) (name), (flags))
++#endif
++
++#if 0
++/* Uncancelable openat. */
++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
++extern int __openat_nocancel (int fd, const char *fname, int oflag,
++ mode_t mode) attribute_hidden;
++extern int __openat64_nocancel (int fd, const char *fname, int oflag,
++ mode_t mode) attribute_hidden;
++#else
++# define __openat_nocancel(fd, fname, oflag, mode) \
++ openat (fd, fname, oflag, mode)
++# define __openat64_nocancel(fd, fname, oflag, mode) \
++ openat64 (fd, fname, oflag, mode)
++#endif
++
++#define openat_not_cancel(fd, fname, oflag, mode) \
++ __openat_nocancel (fd, fname, oflag, mode)
++#define openat_not_cancel_3(fd, fname, oflag) \
++ __openat_nocancel (fd, fname, oflag, 0)
++#define openat64_not_cancel(fd, fname, oflag, mode) \
++ __openat64_nocancel (fd, fname, oflag, mode)
++#define openat64_not_cancel_3(fd, fname, oflag) \
++ __openat64_nocancel (fd, fname, oflag, 0)
++#endif
+
+ /* Uncancelable close. */
+ #define close_not_cancel(fd) \
+@@ -37,10 +70,13 @@
+ #define read_not_cancel(fd, buf, n) \
+ INLINE_SYSCALL (read, 3, (fd), (buf), (n))
+
++#ifdef __LINUXTHREADS_NEW__
+ /* Uncancelable write. */
+ #define write_not_cancel(fd, buf, n) \
+ INLINE_SYSCALL (write, 3, (fd), (buf), (n))
++#endif
+
++#if 0
+ /* Uncancelable writev. */
+ #define writev_not_cancel_no_status(fd, iov, n) \
+ (void) ({ INTERNAL_SYSCALL_DECL (err); \
+@@ -49,12 +85,68 @@
+ /* Uncancelable fcntl. */
+ #define fcntl_not_cancel(fd, cmd, val) \
+ __fcntl_nocancel (fd, cmd, val)
++#endif
+
++#ifdef __LINUXTHREADS_NEW__
+ /* Uncancelable waitpid. */
+-#ifdef __NR_waitpid
++#if 0 /*def __NR_waitpid*/
+ # define waitpid_not_cancel(pid, stat_loc, options) \
+ INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options)
+ #else
+ # define waitpid_not_cancel(pid, stat_loc, options) \
+ INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
+ #endif
++#endif
++
++/* Uncancelable pause. */
++#ifdef __NR_pause
++# define pause_not_cancel() \
++ INLINE_SYSCALL (pause, 0)
++#else
++# include <unistd.h>
++extern __typeof(pause) __pause_nocancel;
++# define pause_not_cancel() \
++ __pause_nocancel ()
++#endif
++
++/* Uncancelable nanosleep. */
++#ifdef __NR_nanosleep
++# define nanosleep_not_cancel(requested_time, remaining) \
++ INLINE_SYSCALL (nanosleep, 2, requested_time, remaining)
++/*#else
++# define nanosleep_not_cancel(requested_time, remaining) \
++ __nanosleep_nocancel (requested_time, remaining)*/
++#endif
++
++#if 0
++/* Uncancelable sigsuspend. */
++#define sigsuspend_not_cancel(set) \
++ __sigsuspend_nocancel (set)
++#endif
++
++#elif !defined NOT_IN_libc
++
++#include <cancel.h>
++#include <fcntl.h>
++#include <unistd.h>
++
++#define open_not_cancel(name, flags, mode) \
++ __NC(open)(name, flags, mode)
++#define open_not_cancel_2(name, flags) \
++ __NC(open2)(name, flags)
++
++#define close_not_cancel(fd) \
++ __NC(close)(fd)
++#define close_not_cancel_no_status(fd) \
++ __close_nocancel_no_status(fd)
++
++#define read_not_cancel(fd, buf, n) \
++ __NC(read)(fd, buf, n)
++
++#define write_not_cancel(fd, buf, n) \
++ __NC(write)(fd, buf, n)
++
++#define fcntl_not_cancel(fd, cmd, val) \
++ __NC(fcntl)(fd, cmd, val)
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ntp_gettime.c uClibc-git/libc/sysdeps/linux/common/ntp_gettime.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ntp_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ntp_gettime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/timex.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/open64.c uClibc-git/libc/sysdeps/linux/common/open64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/open64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/open64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,54 +4,30 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
++#include <_lfs_64.h>
+ #include <fcntl.h>
+ #include <stdarg.h>
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <errno.h>
+-#include <sysdep-cancel.h>
+-#endif
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-
+-#ifndef O_LARGEFILE
+-# define O_LARGEFILE 0100000
+-#endif
++#include <cancel.h>
+
+ /* Open FILE with access OFLAG. If OFLAG includes O_CREAT,
+ a third argument is the file protection. */
+-int open64 (const char *file, int oflag, ...)
++int open64(const char *file, int oflag, ...)
+ {
+- mode_t mode = 0;
+-
+- if (oflag & O_CREAT)
+- {
+- va_list arg;
+- va_start (arg, oflag);
+- mode = va_arg (arg, mode_t);
+- va_end (arg);
+- }
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- if (SINGLE_THREAD_P)
+- return INLINE_SYSCALL (open, 3, file, oflag | O_LARGEFILE, mode);
++ mode_t mode = 0;
+
+- int oldtype = LIBC_CANCEL_ASYNC ();
+-
+- int result = INLINE_SYSCALL (open, 3, file, oflag | O_LARGEFILE, mode);
+-
+- LIBC_CANCEL_RESET (oldtype);
+-
+- return result;
++ if (oflag & O_CREAT) {
++ va_list arg;
++ va_start (arg, oflag);
++ mode = va_arg (arg, mode_t);
++ va_end (arg);
++ }
++#if defined __NR_openat && !defined __NR_open
++ return openat(AT_FDCWD, file, oflag | O_LARGEFILE, mode);
+ #else
+- return open(file, oflag | O_LARGEFILE, mode);
++ return open(file, oflag | O_LARGEFILE, mode);
+ #endif
+ }
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(open64)
+-#else
+-libc_hidden_weak(open64)
+-strong_alias(open64,__libc_open64)
+-#endif
+-
+-#endif /* __UCLIBC_HAS_LFS__ */
++lt_strong_alias(open64)
++lt_libc_hidden(open64)
++/* open handled cancellation, noop on uClibc */
++LIBC_CANCEL_HANDLED();
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/openat64.c uClibc-git/libc/sysdeps/linux/common/openat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/openat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/openat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,27 +6,16 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define openat64 __xx_openat
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+ #include <fcntl.h>
+-#undef openat64
+-
+-#ifdef __UCLIBC_HAS_LFS__
+
+ #ifdef __NR_openat
+-/* The openat() prototype is varargs based, but we don't care about that
+- * here, so need to provide our own dedicated signature.
+- */
+-extern int openat64(int fd, const char *file, int oflag, mode_t mode);
+-libc_hidden_proto(openat64)
+-
+-int openat64(int fd, const char *file, int oflag, mode_t mode)
++static int __openat64(int fd, const char *file, int oflag, mode_t mode)
+ {
+ return openat(fd, file, oflag | O_LARGEFILE, mode);
+ }
+-libc_hidden_def(openat64)
++strong_alias_untyped(__openat64,openat64)
+ #else
+ /* should add emulation with open() and /proc/self/fd/ ... */
+ #endif
+-
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/openat.c uClibc-git/libc/sysdeps/linux/common/openat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/openat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/openat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,19 +6,13 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define openat __xx_openat
+ #include <sys/syscall.h>
+ #include <fcntl.h>
+-#undef openat
+
+ #ifdef __NR_openat
+-/* The openat() prototype is varargs based, but we don't care about that
+- * here, so need to provide our own dedicated signature.
+- */
+-extern int openat(int fd, const char *file, int oflag, mode_t mode);
+-libc_hidden_proto(openat)
+-
+-_syscall4(int, openat, int, fd, const char *, file, int, oflag, mode_t, mode)
++# define __NR___syscall_openat __NR_openat
++static __inline__ _syscall4(int, __syscall_openat, int, fd, const char *, file, int, oflag, mode_t, mode)
++strong_alias_untyped(__syscall_openat,openat)
+ libc_hidden_def(openat)
+ #else
+ /* should add emulation with open() and /proc/self/fd/ ... */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/open.c uClibc-git/libc/sysdeps/linux/common/open.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/open.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/open.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,15 +8,22 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <stdlib.h>
+-#include <stdarg.h>
+ #include <fcntl.h>
+-#include <string.h>
+-#include <sys/param.h>
++#include <stdarg.h>
++#include <cancel.h>
++
++#if defined __NR_open
++# define __NR___syscall_open __NR_open
++static __always_inline _syscall3(int, __syscall_open, const char *, file,
++ int, flags, __kernel_mode_t, mode)
++strong_alias_untyped(__syscall_open,__NC(open))
+
+-#define __NR___syscall_open __NR_open
+-static __inline__ _syscall3(int, __syscall_open, const char *, file,
+- int, flags, __kernel_mode_t, mode)
++# define __NR___open2_nocancel __NR_open
++_syscall2(int, __NC(open2), const char *, file, int, flags)
++#else
++int __open2_nocancel(const char *, int) __nonnull ((1)) attribute_hidden;
++int __open_nocancel(const char *, int, mode_t) __nonnull ((1)) attribute_hidden;
++#endif
+
+ int open(const char *file, int oflag, ...)
+ {
+@@ -29,11 +36,27 @@
+ va_end(arg);
+ }
+
+- return __syscall_open(file, oflag, mode);
++ if (SINGLE_THREAD_P)
++#if defined(__NR_open)
++ return __NC(open)(file, oflag, mode);
++#elif defined(__NR_openat)
++ return openat(AT_FDCWD, file, oflag, mode);
++#endif
++
++#ifdef __NEW_THREADS
++ int oldtype = LIBC_CANCEL_ASYNC ();
++# if defined(__NR_open)
++ int result = __NC(open)(file, oflag, mode);
++# else
++ int result = openat(AT_FDCWD, file, oflag, mode);
++# endif
++ LIBC_CANCEL_RESET (oldtype);
++ return result;
++#endif
+ }
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(open)
+-#else
+-libc_hidden_weak(open)
+-strong_alias(open,__libc_open)
++lt_strong_alias(open)
++lt_libc_hidden(open)
++#if !defined(__NR_open)
++strong_alias_untyped(open,__open2_nocancel)
++strong_alias_untyped(open,__open_nocancel)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/pause.c uClibc-git/libc/sysdeps/linux/common/pause.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/pause.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/pause.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,35 +7,35 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define __UCLIBC_HIDE_DEPRECATED__
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#endif
+-
+-#include <signal.h>
++#ifdef __NR_pause
++/* even if it is not obvious, glibc uses the pause syscall, see syscalls.list */
++# define __NR___pause_nocancel __NR_pause
++static _syscall0(int, __NC(pause))
++CANCELLABLE_SYSCALL(int, pause, (void), ())
++#else
++# define __need_NULL
++# include <stddef.h>
++# include <signal.h>
+
+-/* Suspend the process until a signal arrives.
+- This always returns -1 and sets errno to EINTR. */
+-extern __typeof(pause) __libc_pause;
+ int
+-__libc_pause (void)
++# ifdef __LINUXTHREADS_OLD__
++weak_function
++# endif
++__NC(pause)(void)
+ {
+- sigset_t set;
+-
+- /*__sigemptyset (&set); - why? */
+- sigprocmask (SIG_BLOCK, NULL, &set);
++ sigset_t set;
+
+- /* pause is a cancellation point, but so is sigsuspend.
+- So no need for anything special here. */
++ /*__sigemptyset (&set); - why? */
++ sigprocmask (SIG_BLOCK, NULL, &set);
+
+- return sigsuspend (&set);
++ /* pause is a cancellation point, but so is sigsuspend.
++ So no need for anything special here. */
++ return sigsuspend(&set);
+ }
+-weak_alias (__libc_pause, pause)
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++CANCELLABLE_SYSCALL(int, pause, (void), ())
+ LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */
+ #endif
+-
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/pipe.c uClibc-git/libc/sysdeps/linux/common/pipe.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/pipe.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/pipe.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,5 +11,13 @@
+ #include <unistd.h>
+
+
++#if defined __NR_pipe2 && !defined __NR_pipe
++int pipe(int filedes[2])
++{
++ return pipe2(filedes, 0);
++}
++/* If both are defined then use the pipe syscall */
++#else
+ _syscall1(int, pipe, int *, filedes)
++#endif
+ libc_hidden_def(pipe)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/pivot_root.c uClibc-git/libc/sysdeps/linux/common/pivot_root.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/pivot_root.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/pivot_root.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,7 +9,7 @@
+
+ #include <sys/syscall.h>
+
+-int pivot_root(const char *new_root, const char *put_old);
+ #ifdef __NR_pivot_root
++int pivot_root(const char *new_root, const char *put_old);
+ _syscall2(int, pivot_root, const char *, new_root, const char *, put_old)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/poll.c uClibc-git/libc/sysdeps/linux/common/poll.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/poll.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/poll.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,40 +13,20 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/syscall.h>
+ #include <sys/poll.h>
+ #include <bits/kernel-features.h>
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+-libc_hidden_proto(poll)
++#include <cancel.h>
+
+ #if defined __ASSUME_POLL_SYSCALL && defined __NR_poll
+
+-#define __NR___syscall_poll __NR_poll
+-static inline _syscall3(int, __syscall_poll, struct pollfd *, fds,
+- unsigned long int, nfds, int, timeout);
+-
+-int poll(struct pollfd *fds, nfds_t nfds, int timeout)
+-{
+- if (SINGLE_THREAD_P)
+- return __syscall_poll(fds, nfds, timeout);
++#define __NR___poll_nocancel __NR_poll
++static _syscall3(int, __NC(poll), struct pollfd *, fds,
++ unsigned long int, nfds, int, timeout)
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __syscall_poll(fds, nfds, timeout);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+ #else /* !__NR_poll */
+
+ #include <alloca.h>
+@@ -56,9 +36,7 @@
+ #include <sys/time.h>
+ #include <sys/param.h>
+ #include <unistd.h>
+-
+-libc_hidden_proto(getdtablesize)
+-libc_hidden_proto(select)
++#include <sys/select.h>
+
+ /* uClinux 2.0 doesn't have poll, emulate it using select */
+
+@@ -68,7 +46,7 @@
+ Returns the number of file descriptors with events, zero if timed out,
+ or -1 for errors. */
+
+-int poll(struct pollfd *fds, nfds_t nfds, int timeout)
++int __NC(poll)(struct pollfd *fds, nfds_t nfds, int timeout)
+ {
+ static int max_fd_size;
+ struct timeval tv;
+@@ -139,7 +117,7 @@
+
+ while (1)
+ {
+- ready = select (maxfd + 1, rset, wset, xset,
++ ready = __NC(select) (maxfd + 1, rset, wset, xset,
+ timeout == -1 ? NULL : &tv);
+
+ /* It might be that one or more of the file descriptors is invalid.
+@@ -182,7 +160,7 @@
+ if (f->events & POLLPRI)
+ FD_SET (f->fd, sngl_xset);
+
+- n = select (f->fd + 1, sngl_rset, sngl_wset, sngl_xset,
++ n = __NC(select) (f->fd + 1, sngl_rset, sngl_wset, sngl_xset,
+ &sngl_tv);
+ if (n != -1)
+ {
+@@ -227,4 +205,6 @@
+ }
+
+ #endif
+-libc_hidden_def(poll)
++CANCELLABLE_SYSCALL(int, poll, (struct pollfd *fds, nfds_t nfds, int timeout),
++ (fds, nfds, timeout))
++lt_libc_hidden(poll)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fadvise64.c uClibc-git/libc/sysdeps/linux/common/posix_fadvise64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fadvise64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/posix_fadvise64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,63 +8,32 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+-#include <fcntl.h>
++#include <bits/wordsize.h>
+
+-#ifdef __UCLIBC_HAS_LFS__
+-#ifdef __NR_fadvise64_64
+-
+-/* 64 bit implementation is cake ... or more like pie ... */
+-#if __WORDSIZE == 64
+-
+-#define __NR_posix_fadvise64 __NR_fadvise64_64
+-
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advice)
+-{
+- if (len != (off_t) len)
+- return EOVERFLOW;
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (posix_fadvise64, err, 5, fd,
+- __LONG_LONG_PAIR ((long) (offset >> 32),
+- (long) offset),
+- (off_t) len, advice);
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+-}
++#ifdef __NR_arm_fadvise64_64
++# define __NR_fadvise64_64 __NR_arm_fadvise64_64
++#endif
+
+-/* 32 bit implementation is kind of a pita */
+-#elif __WORDSIZE == 32
++#if defined __NR_fadvise64_64 && __WORDSIZE == 32
++# include <fcntl.h>
++# include <endian.h>
+
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advice)
++int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice)
+ {
+ INTERNAL_SYSCALL_DECL (err);
++ /* ARM has always been funky. */
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) || defined(__arm__)
++ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, advice,
++ OFF64_HI_LO (offset), OFF64_HI_LO (len));
++# else
+ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
+- __LONG_LONG_PAIR(offset >> 32, offset & 0xffffffff),
+- __LONG_LONG_PAIR(len >> 32, len & 0xffffffff),
+- advice);
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
++ OFF64_HI_LO (offset), OFF64_HI_LO (len),
++ advice);
++# endif
++ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
+ }
+-
+-#else
+-#error your machine is neither 32 bit or 64 bit ... it must be magical
+ #endif
+-
+-#elif !defined __NR_fadvise64 && defined __UCLIBC_HAS_STUBS__
+-/* This is declared as a strong alias in posix_fadvise.c if __NR_fadvise64
+- * is defined.
+- */
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advice)
+-{
+- return ENOSYS;
+-}
+-#endif /* __NR_fadvise64_64 */
+-#endif /* __UCLIBC_HAS_LFS__ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fadvise.c uClibc-git/libc/sysdeps/linux/common/posix_fadvise.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fadvise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/posix_fadvise.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,27 +9,46 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <fcntl.h>
+
+-#ifdef __NR_fadvise64
+-#define __NR_posix_fadvise __NR_fadvise64
++#ifdef __NR_arm_fadvise64_64
++/* We handle the 64bit alignment issue which is why the arm guys renamed their
++ * syscall in the first place. So rename it back.
++ */
++# define __NR_fadvise64_64 __NR_arm_fadvise64_64
++#endif
++
++#if defined(__NR_fadvise64) || defined(__NR_fadvise64_64)
++# include <fcntl.h>
++# include <endian.h>
++# include <bits/wordsize.h>
++
++# ifdef __NR_fadvise64_64
++int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice);
++# endif
++
+ int posix_fadvise(int fd, off_t offset, off_t len, int advice)
+ {
++# ifdef __NR_fadvise64_64
++ return posix_fadvise64(fd, offset, len, advice);
++# else
++ int ret;
+ INTERNAL_SYSCALL_DECL(err);
+- int ret = (int) (INTERNAL_SYSCALL(posix_fadvise, err, 5, fd,
+- __LONG_LONG_PAIR (offset >> 31, offset), len, advice));
+- if (INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+- return 0;
++# if __WORDSIZE == 64
++ ret = INTERNAL_SYSCALL(fadvise64, err, 4, fd, offset, len, advice);
++# else
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++ ret = INTERNAL_SYSCALL(fadvise64, err, 6, fd, /*unused*/0,
++# else
++ ret = INTERNAL_SYSCALL(fadvise64, err, 5, fd,
++# endif
++ OFF_HI_LO (offset), len, advice);
++# endif
++ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
++# endif
+ }
+-
+-#if defined __UCLIBC_HAS_LFS__ && !defined __NR_fadvise64_64
++# if defined __UCLIBC_HAS_LFS__ && (!defined __NR_fadvise64_64 || __WORDSIZE == 64)
+ strong_alias(posix_fadvise,posix_fadvise64)
+-#endif
+-
+-#elif defined __UCLIBC_HAS_STUBS__
+-int posix_fadvise(int fd attribute_unused, off_t offset attribute_unused, off_t len attribute_unused, int advice attribute_unused)
+-{
+- return ENOSYS;
+-}
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fallocate64.c uClibc-git/libc/sysdeps/linux/common/posix_fallocate64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fallocate64.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/posix_fallocate64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,34 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * posix_fallocate() for uClibc
++ * http://www.opengroup.org/onlinepubs/9699919799/functions/posix_fallocate.html
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sys/syscall.h>
++#include <fcntl.h>
++#include <bits/kernel-features.h>
++#include <stdint.h>
++
++#if defined __NR_fallocate
++
++# if __WORDSIZE == 64
++/* Can use normal posix_fallocate() */
++# elif __WORDSIZE == 32
++int posix_fallocate64(int fd, __off64_t offset, __off64_t len)
++{
++ int ret;
++ INTERNAL_SYSCALL_DECL(err);
++ ret = (int) (INTERNAL_SYSCALL(fallocate, err, 6, fd, 0,
++ OFF64_HI_LO (offset), OFF64_HI_LO (len)));
++ if (unlikely(INTERNAL_SYSCALL_ERROR_P (ret, err)))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
++}
++# else
++# error your machine is neither 32 bit or 64 bit ... it must be magical
++# endif
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fallocate.c uClibc-git/libc/sysdeps/linux/common/posix_fallocate.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_fallocate.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/posix_fallocate.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,43 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * posix_fallocate() for uClibc
++ * http://www.opengroup.org/onlinepubs/9699919799/functions/posix_fallocate.html
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sys/syscall.h>
++#include <fcntl.h>
++#include <bits/kernel-features.h>
++#include <stdint.h>
++
++#if defined __NR_fallocate
++int posix_fallocate(int fd, __off_t offset, __off_t len)
++{
++ int ret;
++
++# if __WORDSIZE == 32
++ uint32_t off_low = offset;
++ uint32_t len_low = len;
++ /* may assert that these >>31 are 0 */
++ uint32_t zero = 0;
++ INTERNAL_SYSCALL_DECL(err);
++ ret = (int) (INTERNAL_SYSCALL(fallocate, err, 6, fd, 0,
++ __LONG_LONG_PAIR (zero, off_low),
++ __LONG_LONG_PAIR (zero, len_low)));
++# elif __WORDSIZE == 64
++ INTERNAL_SYSCALL_DECL(err);
++ ret = (int) (INTERNAL_SYSCALL(fallocate, err, 4, fd, 0, offset, len));
++# else
++# error your machine is neither 32 bit or 64 bit ... it must be magical
++#endif
++ if (unlikely(INTERNAL_SYSCALL_ERROR_P (ret, err)))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
++}
++# if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias(posix_fallocate,posix_fallocate64)
++# endif
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_madvise.c uClibc-git/libc/sysdeps/linux/common/posix_madvise.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/posix_madvise.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common/posix_madvise.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,25 @@
++/* vi: set sw=4 ts=4: */
++/* Licensed under the LGPL v2.1, see the file LICENSE in this tarball. */
++
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++#if defined __NR_madvise && defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
++int posix_madvise(void *addr, size_t len, int advice)
++{
++ int result;
++ /* We have one problem: the kernel's MADV_DONTNEED does not
++ * correspond to POSIX's POSIX_MADV_DONTNEED. The former simply
++ * discards changes made to the memory without writing it back to
++ * disk, if this would be necessary. The POSIX behaviour does not
++ * allow this. There is no functionality mapping for the POSIX
++ * behaviour so far so we ignore that advice for now. */
++ if (advice == POSIX_MADV_DONTNEED)
++ return 0;
++
++ /* this part might use madvise function */
++ INTERNAL_SYSCALL_DECL (err);
++ result = INTERNAL_SYSCALL (madvise, err, 3, addr, len, advice);
++ return INTERNAL_SYSCALL_ERRNO (result, err);
++}
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ppoll.c uClibc-git/libc/sysdeps/linux/common/ppoll.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ppoll.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ppoll.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,26 +13,22 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <signal.h>
+ #include <sys/syscall.h>
+-#include <sys/poll.h>
++
++#if defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU
++
+ #define __need_NULL
+ #include <stddef.h>
++#include <signal.h>
++#include <sys/poll.h>
++#include <cancel.h>
+
+-#if defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
+-# else
+-# define SINGLE_THREAD_P 1
+-# endif
+-
+-int
+-ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
+- const sigset_t *sigmask)
++static int
++__NC(ppoll)(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
++ const sigset_t *sigmask)
+ {
+ /* The Linux kernel can in some situations update the timeout value.
+ We do not want that so use a local variable. */
+@@ -41,15 +37,11 @@
+ tval = *timeout;
+ timeout = &tval;
+ }
+- if (SINGLE_THREAD_P)
+- return INLINE_SYSCALL(ppoll, 5, fds, nfds, timeout, sigmask, _NSIG / 8);
+-
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = INLINE_SYSCALL(ppoll, 5, fds, nfds, timeout, sigmask, _NSIG / 8);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-# endif
++ return INLINE_SYSCALL(ppoll, 5, fds, nfds, timeout, sigmask, __SYSCALL_SIGSET_T_SIZE);
+ }
+-libc_hidden_def(ppoll)
++
++CANCELLABLE_SYSCALL(int, ppoll, (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
++ const sigset_t *sigmask),
++ (fds, nfds, timeout, sigmask))
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/prctl.c uClibc-git/libc/sysdeps/linux/common/prctl.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/prctl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/prctl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,10 +8,10 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <stdarg.h>
+ /* psm: including sys/prctl.h would depend on kernel headers */
+
+ #ifdef __NR_prctl
+-extern int prctl (int, long, long, long, long);
+-_syscall5(int, prctl, int, option, long, _a2, long, _a3, long, _a4, long, _a5)
++int prctl (int, long, long, long, long);
++_syscall5(int, prctl, int, option, long, _prctl_a2, long, _prctl_a3,
++ long, _prctl_a4, long, _prctl_a5)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/pread_write.c uClibc-git/libc/sysdeps/linux/common/pread_write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/pread_write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/pread_write.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,173 +15,101 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
+-#include <stdint.h>
+ #include <endian.h>
++#include <bits/wordsize.h>
++#include <cancel.h>
+
+-extern __typeof(pread) __libc_pread;
+-extern __typeof(pwrite) __libc_pwrite;
+-#ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pread64) __libc_pread64;
+-extern __typeof(pwrite64) __libc_pwrite64;
++#ifdef __NR_pread64
++# undef __NR_pread
++# define __NR_pread __NR_pread64
++#endif
++#ifdef __NR_pwrite64
++# undef __NR_pwrite
++# define __NR_pwrite __NR_pwrite64
+ #endif
+
+-#include <bits/kernel_types.h>
+-
+-#ifdef __NR_pread
+-
+-# define __NR___syscall_pread __NR_pread
+-static __inline__ _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf,
+- size_t, count, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return __syscall_pread(fd, buf, count, __LONG_LONG_PAIR(offset >> 31, offset));
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return __syscall_pread(fd, buf, count, __LONG_LONG_PAIR(high, low));
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-
+-#endif /* __NR_pread */
+-
+-#ifdef __NR_pwrite
+-
+-# define __NR___syscall_pwrite __NR_pwrite
+-static __inline__ _syscall5(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
+- size_t, count, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- return __syscall_pwrite(fd, buf, count, __LONG_LONG_PAIR(offset >> 31, offset));
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return __syscall_pwrite(fd, buf, count, __LONG_LONG_PAIR(high, low));
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* __NR_pwrite */
+-
+-#if ! defined __NR_pread || ! defined __NR_pwrite
+-
+-static ssize_t __fake_pread_write(int fd, void *buf,
+- size_t count, off_t offset, int do_pwrite)
+-{
+- int save_errno;
+- ssize_t result;
+- off_t old_offset;
+-
+- /* Since we must not change the file pointer preserve the
+- * value so that we can restore it later. */
+- if ((old_offset=lseek(fd, 0, SEEK_CUR)) == (off_t) -1)
+- return -1;
+-
+- /* Set to wanted position. */
+- if (lseek(fd, offset, SEEK_SET) == (off_t) -1)
+- return -1;
+-
+- if (do_pwrite == 1) {
+- /* Write the data. */
+- result = write(fd, buf, count);
+- } else {
+- /* Read the data. */
+- result = read(fd, buf, count);
+- }
+-
+- /* Now we have to restore the position. If this fails we
+- * have to return this as an error. */
+- save_errno = errno;
+- if (lseek(fd, old_offset, SEEK_SET) == (off_t) -1)
+- {
+- if (result == -1)
+- __set_errno(save_errno);
+- return -1;
+- }
+- __set_errno(save_errno);
+- return(result);
+-}
+-
+-# ifdef __UCLIBC_HAS_LFS__
++#ifndef MY_PREAD
++# ifdef __NR_pread
++# define __NR___syscall_pread __NR_pread
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++static _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf,
++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
++# define MY_PREAD(fd, buf, count, offset) __syscall_pread(fd, buf, count, 0, OFF_HI_LO(offset))
++# define MY_PREAD64(fd, buf, count, offset) __syscall_pread(fd, buf, count, 0, OFF64_HI_LO(offset))
++# elif __WORDSIZE == 32
++static _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf,
++ size_t, count, off_t, offset_hi, off_t, offset_lo)
++# define MY_PREAD(fd, buf, count, offset) __syscall_pread(fd, buf, count, OFF_HI_LO(offset))
++# define MY_PREAD64(fd, buf, count, offset) __syscall_pread(fd, buf, count, OFF64_HI_LO(offset))
++# else
++static _syscall4(ssize_t, __syscall_pread, int, fd, void *, buf,
++ size_t, count, off_t, offset)
++# define MY_PREAD(fd, buf, count, offset) __syscall_pread(fd, buf, count, offset)
++# define MY_PREAD64(fd, buf, count, offset) __syscall_pread(fd, buf, count, offset)
++# endif
++# endif
++#endif
+
+-static ssize_t __fake_pread_write64(int fd, void *buf,
+- size_t count, off64_t offset, int do_pwrite)
+-{
+- int save_errno;
+- ssize_t result;
+- off64_t old_offset;
+-
+- /* Since we must not change the file pointer preserve the
+- * value so that we can restore it later. */
+- if ((old_offset=lseek64(fd, 0, SEEK_CUR)) == (off64_t) -1)
+- return -1;
+-
+- /* Set to wanted position. */
+- if (lseek64(fd, offset, SEEK_SET) == (off64_t) -1)
+- return -1;
+-
+- if (do_pwrite == 1) {
+- /* Write the data. */
+- result = write(fd, buf, count);
+- } else {
+- /* Read the data. */
+- result = read(fd, buf, count);
+- }
+-
+- /* Now we have to restore the position. */
+- save_errno = errno;
+- if (lseek64(fd, old_offset, SEEK_SET) == (off64_t) -1) {
+- if (result == -1)
+- __set_errno (save_errno);
+- return -1;
+- }
+- __set_errno (save_errno);
+- return result;
+-}
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! defined __NR_pread || ! defined __NR_pwrite */
++#ifndef MY_PWRITE
++# ifdef __NR_pwrite
++# define __NR___syscall_pwrite __NR_pwrite
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++static _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
++# define MY_PWRITE(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, 0, OFF_HI_LO(offset))
++# define MY_PWRITE64(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, 0, OFF64_HI_LO(offset))
++# elif __WORDSIZE == 32
++static _syscall5(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
++ size_t, count, off_t, offset_hi, off_t, offset_lo)
++# define MY_PWRITE(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, OFF_HI_LO(offset))
++# define MY_PWRITE64(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, OFF64_HI_LO(offset))
++# else
++static _syscall4(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
++ size_t, count, off_t, offset)
++# define MY_PWRITE(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, offset)
++# define MY_PWRITE64(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, offset)
++# endif
++# endif
++#endif
+
+-#ifndef __NR_pread
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
++static ssize_t __NC(pread)(int fd, void *buf, size_t count, off_t offset)
+ {
+- return __fake_pread_write(fd, buf, count, offset, 0);
++ return MY_PREAD(fd, buf, count, offset);
+ }
+-weak_alias(__libc_pread,pread)
++CANCELLABLE_SYSCALL(ssize_t, pread, (int fd, void *buf, size_t count, off_t offset),
++ (fd, buf, count, offset))
+
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
++static ssize_t __NC(pwrite)(int fd, const void *buf, size_t count, off_t offset)
+ {
+- return __fake_pread_write64(fd, buf, count, offset, 0);
++ return MY_PWRITE(fd, buf, count, offset);
+ }
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! __NR_pread */
++CANCELLABLE_SYSCALL(ssize_t, pwrite, (int fd, const void *buf, size_t count, off_t offset),
++ (fd, buf, count, offset))
+
+-#ifndef __NR_pwrite
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
++#ifdef __UCLIBC_HAS_LFS__
++# if __WORDSIZE == 32
++static ssize_t __NC(pread64)(int fd, void *buf, size_t count, off64_t offset)
+ {
+- /* we won't actually be modifying the buffer,
+- *just cast it to get rid of warnings */
+- return __fake_pread_write(fd, (void*)buf, count, offset, 1);
++ return MY_PREAD64(fd, buf, count, offset);
+ }
+-weak_alias(__libc_pwrite,pwrite)
++CANCELLABLE_SYSCALL(ssize_t, pread64, (int fd, void *buf, size_t count, off64_t offset),
++ (fd, buf, count, offset))
+
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- return __fake_pread_write64(fd, (void*)buf, count, offset, 1);
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! __NR_pwrite */
++static ssize_t __NC(pwrite64)(int fd, const void *buf, size_t count, off64_t offset)
++{
++ return MY_PWRITE64(fd, buf, count, offset);
++}
++CANCELLABLE_SYSCALL(ssize_t, pwrite64, (int fd, const void *buf, size_t count, off64_t offset),
++ (fd, buf, count, offset))
++# else
++# ifdef __LINUXTHREADS_OLD__
++weak_alias(pread,pread64)
++weak_alias(pwrite,pwrite64)
++lt_strong_alias(pread64)
++lt_strong_alias(pwrite64)
++# else
++strong_alias_untyped(pread,pread64)
++strong_alias_untyped(pwrite,pwrite64)
++# endif
++# endif
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/pselect.c uClibc-git/libc/sysdeps/linux/common/pselect.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/pselect.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/pselect.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,82 +13,53 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <errno.h>
+-#include <signal.h>
+-#include <stddef.h> /* For NULL. */
+-#include <sys/time.h>
+-#include <sys/select.h>
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#endif
++#include <features.h>
+
+-libc_hidden_proto(sigprocmask)
+-libc_hidden_proto(select)
++#ifdef __USE_XOPEN2K
+
++#include <sys/syscall.h>
++#include <sys/select.h>
++#include <sys/time.h>
++#include <signal.h>
++#include <cancel.h>
+
+-/* Check the first NFDS descriptors each in READFDS (if not NULL) for read
+- readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
+- (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out
+- after waiting the interval specified therein. Additionally set the sigmask
+- SIGMASK for this call. Returns the number of ready descriptors, or -1 for
+- errors. */
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-static int
+-__pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+-#else
+-int
+-pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+-#endif
+- const struct timespec *timeout, const sigset_t *sigmask)
++static int __NC(pselect)(int nfds, fd_set *readfds, fd_set *writefds,
++ fd_set *exceptfds, const struct timespec *timeout,
++ const sigset_t *sigmask)
+ {
+- struct timeval tval;
+- int retval;
+- sigset_t savemask;
+-
+- /* Change nanosecond number to microseconds. This might mean losing
+- precision and therefore the `pselect` should be available. But
+- for now it is hardly found. */
+- if (timeout != NULL)
+- TIMESPEC_TO_TIMEVAL (&tval, timeout);
+-
+- /* The setting and restoring of the signal mask and the select call
+- should be an atomic operation. This can't be done without kernel
+- help. */
+- if (sigmask != NULL)
+- sigprocmask (SIG_SETMASK, sigmask, &savemask);
+-
+- /* Note the pselect() is a cancellation point. But since we call
+- select() which itself is a cancellation point we do not have
+- to do anything here. */
+- retval = select (nfds, readfds, writefds, exceptfds,
+- timeout != NULL ? &tval : NULL);
++ struct timeval tval;
++ int retval;
++ sigset_t savemask;
++
++ /* Change nanosecond number to microseconds. This might mean losing
++ precision and therefore the `pselect` should be available. But
++ for now it is hardly found. */
++ if (timeout != NULL)
++ TIMESPEC_TO_TIMEVAL (&tval, timeout);
++
++ /* The setting and restoring of the signal mask and the select call
++ should be an atomic operation. This can't be done without kernel
++ help. */
++ if (sigmask != NULL)
++ sigprocmask (SIG_SETMASK, sigmask, &savemask);
++
++ /* The comment below does not apply on uClibc, since we use __select_nocancel */
++ /* Note the pselect() is a cancellation point. But since we call
++ select() which itself is a cancellation point we do not have
++ to do anything here. */
++ retval = __NC(select)(nfds, readfds, writefds, exceptfds,
++ timeout != NULL ? &tval : NULL);
+
+- if (sigmask != NULL)
+- sigprocmask (SIG_SETMASK, &savemask, NULL);
++ if (sigmask != NULL)
++ sigprocmask (SIG_SETMASK, &savemask, NULL);
+
+- return retval;
++ return retval;
+ }
++CANCELLABLE_SYSCALL(int, pselect, (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
++ const struct timespec *timeout, const sigset_t *sigmask),
++ (nfds, readfds, writefds, exceptfds, timeout, sigmask))
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-int
+-pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+- const struct timespec *timeout, const sigset_t *sigmask)
+-{
+- if (SINGLE_THREAD_P)
+- return __pselect (nfds, readfds, writefds, exceptfds,
+- timeout, sigmask);
+-
+- int oldtype = LIBC_CANCEL_ASYNC ();
+-
+- int result = __pselect (nfds, readfds, writefds, exceptfds,
+- timeout, sigmask);
+-
+- LIBC_CANCEL_RESET (oldtype);
+-
+- return result;
+-}
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/readahead.c uClibc-git/libc/sysdeps/linux/common/readahead.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/readahead.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/readahead.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,46 +13,33 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <errno.h>
+-#include <fcntl.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <bits/wordsize.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <_lfs_64.h>
++#include <sys/syscall.h>
+
+-#ifdef __NR_readahead
++#if defined __NR_readahead && defined __UCLIBC_HAS_LFS__ && defined __USE_GNU
+
+-# define __NR___readahead __NR_readahead
++# include <fcntl.h>
++# include <bits/wordsize.h>
+
+ # if __WORDSIZE == 64
+
+-static __inline__ _syscall3(ssize_t, __readahead, int, fd,
+- off_t, offset, size_t, count)
+-
+-ssize_t readahead(int fd, off_t offset, size_t count)
+-{
+- return __readahead(fd, offset, count);
+-}
++_syscall3(ssize_t, readahead, int, fd, off_t, offset, size_t, count)
+
+ # else
+
+-static __inline__ _syscall4(ssize_t, __readahead, int, fd,
+- off_t, high_offset, off_t, low_offset, size_t, count)
+-
+ ssize_t readahead(int fd, off64_t offset, size_t count)
+ {
+- return __readahead(fd, (off_t) (offset >> 32), (off_t) (offset & 0xffffffff), count);
++ return INLINE_SYSCALL(readahead,
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++ 5, fd, 0,
++# else
++ 4, fd,
++# endif
++ OFF64_HI_LO(offset), count);
+ }
+
+ # endif
+
+ #endif
+-
+-#endif /* __UCLIBC_HAS_LFS__ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/read.c uClibc-git/libc/sysdeps/linux/common/read.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/read.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/read.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,11 +9,11 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#include <cancel.h>
+
+-_syscall3(ssize_t, read, int, fd, __ptr_t, buf, size_t, count)
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(read)
+-#else
+-libc_hidden_weak(read)
+-strong_alias(read,__libc_read)
+-#endif
++#define __NR___read_nocancel __NR_read
++_syscall3(ssize_t, __NC(read), int, fd, void *, buf, size_t, count)
++
++CANCELLABLE_SYSCALL(ssize_t, read, (int fd, void *buf, size_t count),
++ (fd, buf, count))
++lt_libc_hidden(read)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/readlinkat.c uClibc-git/libc/sysdeps/linux/common/readlinkat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/readlinkat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/readlinkat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_readlinkat
+ _syscall4(ssize_t, readlinkat, int, fd, const char *, path, char *, buf, size_t, len)
++libc_hidden_def(readlinkat)
+ #else
+ /* should add emulation with readlink() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/readlink.c uClibc-git/libc/sysdeps/linux/common/readlink.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/readlink.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/readlink.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,5 +10,13 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
++#if defined(__NR_readlinkat) && !defined(__NR_readlink)
++# include <fcntl.h>
++ssize_t readlink (const char *path, char *buf, size_t len)
++{
++ return readlinkat(AT_FDCWD, path, buf, len);
++}
++#else
+ _syscall3(ssize_t, readlink, const char *, path, char *, buf, size_t, bufsiz)
++#endif
+ libc_hidden_def(readlink)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/readv.c uClibc-git/libc/sysdeps/linux/common/readv.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/readv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/readv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,41 +10,21 @@
+
+ #include <sys/syscall.h>
+ #include <sys/uio.h>
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
++#include <cancel.h>
+
+ /* We should deal with kernel which have a smaller UIO_FASTIOV as well
+ as a very big count. */
+-static ssize_t __readv (int fd, const struct iovec *vector, int count)
++static ssize_t __NC(readv)(int fd, const struct iovec *vector, int count)
+ {
+- ssize_t bytes_read;
+-
+- bytes_read = INLINE_SYSCALL (readv, 3, fd, vector, count);
+-
+- if (bytes_read >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
+- return bytes_read;
+-
+- /* glibc tries again, but we do not. */
+- //return __atomic_readv_replacement (fd, vector, count);
+-
+- return -1;
+-}
+-
+-ssize_t readv (int fd, const struct iovec *vector, int count)
+-{
+- if (SINGLE_THREAD_P)
+- return __readv (fd, vector, count);
+-
+- int oldtype = LIBC_CANCEL_ASYNC ();
++ ssize_t bytes_read = INLINE_SYSCALL(readv, 3, fd, vector, count);
+
+- int result = __readv (fd, vector, count);
++ if (bytes_read >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
++ return bytes_read;
+
+- LIBC_CANCEL_RESET (oldtype);
++ /* glibc tries again, but we do not. */
++ /* return __atomic_readv_replacement (fd, vector, count); */
+
+- return result;
++ return -1;
+ }
+-#else
+-_syscall3(ssize_t, readv, int, filedes, const struct iovec *, vector,
+- int, count)
+-#endif
++CANCELLABLE_SYSCALL(ssize_t, readv, (int fd, const struct iovec *vector, int count),
++ (fd, vector, count))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/renameat.c uClibc-git/libc/sysdeps/linux/common/renameat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/renameat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/renameat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_renameat
+ _syscall4(int, renameat, int, oldfd, const char *, old, int, newfd, const char *, new)
++libc_hidden_def(renameat)
+ #else
+ /* should add emulation with rename() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/rename.c uClibc-git/libc/sysdeps/linux/common/rename.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/rename.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/rename.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,17 +8,15 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <sys/param.h>
+ #include <stdio.h>
++#include <unistd.h>
+
+-#define __NR___syscall_rename __NR_rename
+-static __inline__ _syscall2(int, __syscall_rename, const char *, oldpath,
+- const char *, newpath)
+-
+-int rename(const char * oldpath, const char * newpath)
++#if defined __NR_renameat && !defined __NR_rename
++# include <fcntl.h>
++int rename(const char *oldpath, const char *newpath)
+ {
+- return __syscall_rename(oldpath, newpath);
++ return renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath);
+ }
+-
++#else
++_syscall2(int, rename, const char *, oldpath, const char *, newpath)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/rmdir.c uClibc-git/libc/sysdeps/linux/common/rmdir.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/rmdir.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/rmdir.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,5 +11,13 @@
+ #include <unistd.h>
+
+
++#if defined __NR_unlinkat && !defined __NR_rmdir
++# include <fcntl.h>
++int rmdir(const char *pathname)
++{
++ return unlinkat(AT_FDCWD, pathname, AT_REMOVEDIR);
++}
++#else
+ _syscall1(int, rmdir, const char *, pathname)
++#endif
+ libc_hidden_def(rmdir)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__rt_sigtimedwait.c uClibc-git/libc/sysdeps/linux/common/__rt_sigtimedwait.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__rt_sigtimedwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__rt_sigtimedwait.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,42 +9,49 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <signal.h>
+-#include <string.h>
+
+ #ifdef __NR_rt_sigtimedwait
+-
++# include <signal.h>
++# include <cancel.h>
+ # ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
+ # include <pthreadP.h> /* SIGCANCEL */
++# endif
++# ifdef SIGCANCEL
++# define __need_NULL
++# include <stddef.h>
++# include <string.h>
++# endif
+
+-static int do_sigtimedwait(const sigset_t *set, siginfo_t *info,
+- const struct timespec *timeout)
++int __NC(sigtimedwait)(const sigset_t *set, siginfo_t *info,
++ const struct timespec *timeout)
+ {
+-# ifdef SIGCANCEL
++# ifdef SIGCANCEL
+ sigset_t tmpset;
+
+- if (set != NULL && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+-# ifdef SIGSETXID
+- || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+-# endif
++ if (set != NULL && (unlikely (__sigismember (set, SIGCANCEL))
++# ifdef SIGSETXID
++ || unlikely (__sigismember (set, SIGSETXID))
++# endif
+ ))
+ {
+ /* Create a temporary mask without the bit for SIGCANCEL set. */
+ // We are not copying more than we have to.
+ memcpy (&tmpset, set, _NSIG / 8);
+ __sigdelset (&tmpset, SIGCANCEL);
+-# ifdef SIGSETXID
++# ifdef SIGSETXID
+ __sigdelset (&tmpset, SIGSETXID);
+-# endif
++# endif
+ set = &tmpset;
+ }
+-# endif
++# endif
+
++/* if this is enabled, enable the disabled section in sigwait.c */
++# if defined SI_TKILL && defined SI_USER
+ /* XXX The size argument hopefully will have to be changed to the
+ real size of the user-level sigset_t. */
+- int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info,
+- timeout, _NSIG / 8);
++ /* on uClibc we use the kernel sigset_t size */
++ int result = INLINE_SYSCALL(rt_sigtimedwait, 4, set, info,
++ timeout, __SYSCALL_SIGSET_T_SIZE);
+
+ /* The kernel generates a SI_TKILL code in si_code in case tkill is
+ used. tkill is transparently used in raise(). Since having
+@@ -54,39 +61,14 @@
+ info->si_code = SI_USER;
+
+ return result;
+-}
+-
+-/* Return any pending signal or wait for one for the given time. */
+-int attribute_hidden __sigtimedwait(const sigset_t *set, siginfo_t *info,
+- const struct timespec *timeout)
+-{
+- if(SINGLE_THREAD_P)
+- return do_sigtimedwait(set, info, timeout);
+-
+- int oldtype = LIBC_CANCEL_ASYNC();
+-
+- /* XXX The size argument hopefully will have to be changed to the
+- real size of the user-level sigset_t. */
+- int result = do_sigtimedwait(set, info, timeout);
+-
+- LIBC_CANCEL_RESET(oldtype);
+-
+- return result;
+-}
+ # else
+-# define __need_NULL
+-# include <stddef.h>
+-# define __NR___rt_sigtimedwait __NR_rt_sigtimedwait
+-static _syscall4(int, __rt_sigtimedwait, const sigset_t *, set,
+- siginfo_t *, info, const struct timespec *, timeout,
+- size_t, setsize);
+-
+-int attribute_hidden __sigtimedwait(const sigset_t * set, siginfo_t * info,
+- const struct timespec *timeout)
+-{
+- return __rt_sigtimedwait(set, info, timeout, _NSIG / 8);
++ /* on uClibc we use the kernel sigset_t size */
++ return INLINE_SYSCALL(rt_sigtimedwait, 4, set, info,
++ timeout, __SYSCALL_SIGSET_T_SIZE);
++# endif
+ }
+-# endif /* !__UCLIBC_HAS_THREADS_NATIVE__ */
+-weak_alias(__sigtimedwait,sigtimedwait)
+-libc_hidden_weak(sigtimedwait)
++CANCELLABLE_SYSCALL(int, sigtimedwait,
++ (const sigset_t *set, siginfo_t *info, const struct timespec *timeout),
++ (set, info, timeout))
++lt_libc_hidden(sigtimedwait)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__rt_sigwaitinfo.c uClibc-git/libc/sysdeps/linux/common/__rt_sigwaitinfo.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__rt_sigwaitinfo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__rt_sigwaitinfo.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,81 +9,17 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <signal.h>
+-#include <string.h>
+
+ #ifdef __NR_rt_sigtimedwait
++# define __need_NULL
++# include <stddef.h>
++# include <signal.h>
++# include <cancel.h>
+
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
+-
+-static int do_sigwaitinfo(const sigset_t *set, siginfo_t *info)
+-{
+-# ifdef SIGCANCEL
+- sigset_t tmpset;
+-
+- if (set != NULL && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+-# ifdef SIGSETXID
+- || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+-# endif
+- ))
+- {
+- /* Create a temporary mask without the bit for SIGCANCEL set. */
+- // We are not copying more than we have to.
+- memcpy (&tmpset, set, _NSIG / 8);
+- __sigdelset (&tmpset, SIGCANCEL);
+-# ifdef SIGSETXID
+- __sigdelset (&tmpset, SIGSETXID);
+-# endif
+- set = &tmpset;
+- }
+-# endif
+-
+- /* XXX The size argument hopefully will have to be changed to the
+- real size of the user-level sigset_t. */
+- int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info,
+- NULL, _NSIG / 8);
+-
+- /* The kernel generates a SI_TKILL code in si_code in case tkill is
+- used. tkill is transparently used in raise(). Since having
+- SI_TKILL as a code is useful in general we fold the results
+- here. */
+- if (result != -1 && info != NULL && info->si_code == SI_TKILL)
+- info->si_code = SI_USER;
+-
+- return result;
+-}
+-
+-/* Return any pending signal or wait for one for the given time. */
+-int __sigwaitinfo(const sigset_t *set, siginfo_t *info)
+-{
+- if(SINGLE_THREAD_P)
+- return do_sigwaitinfo(set, info);
+-
+- int oldtype = LIBC_CANCEL_ASYNC();
+-
+- /* XXX The size argument hopefully will have to be changed to the
+- real size of the user-level sigset_t. */
+- int result = do_sigwaitinfo(set, info);
+-
+- LIBC_CANCEL_RESET(oldtype);
+-
+- return result;
+-}
+-# else
+-# define __need_NULL
+-# include <stddef.h>
+-# define __NR___rt_sigwaitinfo __NR_rt_sigtimedwait
+-static _syscall4(int, __rt_sigwaitinfo, const sigset_t *, set,
+- siginfo_t *, info, const struct timespec *, timeout,
+- size_t, setsize);
+-
+-int attribute_hidden __sigwaitinfo(const sigset_t * set, siginfo_t * info)
++int sigwaitinfo(const sigset_t *set, siginfo_t *info)
+ {
+- return __rt_sigwaitinfo(set, info, NULL, _NSIG / 8);
++ return sigtimedwait(set, info, NULL);
+ }
+-# endif
+-libc_hidden_proto(sigwaitinfo)
+-weak_alias (__sigwaitinfo, sigwaitinfo)
+-libc_hidden_weak(sigwaitinfo)
++/* cancellation handled by sigtimedwait, noop on uClibc */
++LIBC_CANCEL_HANDLED();
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sched_cpucount.c uClibc-git/libc/sysdeps/linux/common/sched_cpucount.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sched_cpucount.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sched_cpucount.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <sched.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sched_getaffinity.c uClibc-git/libc/sysdeps/linux/common/sched_getaffinity.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sched_getaffinity.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sched_getaffinity.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,24 +12,19 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#ifdef __USE_GNU
+-
+-#include <sched.h>
+-#include <sys/types.h>
+ #include <sys/syscall.h>
+
+-#include <string.h>
+-#include <sys/param.h>
+-
+-#if defined __NR_sched_getaffinity
+-#define __NR___syscall_sched_getaffinity __NR_sched_getaffinity
+-static __inline__ _syscall3(int, __syscall_sched_getaffinity, __kernel_pid_t, pid,
+- size_t, cpusetsize, cpu_set_t *, cpuset)
++#if defined __NR_sched_getaffinity && defined __USE_GNU
++# include <sched.h>
++# include <string.h>
++# include <sys/types.h>
++# include <sys/param.h>
++# define __NR___syscall_sched_getaffinity __NR_sched_getaffinity
++static __always_inline _syscall3(int, __syscall_sched_getaffinity, __kernel_pid_t, pid,
++ size_t, cpusetsize, cpu_set_t *, cpuset)
+
+ int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *cpuset)
+ {
+@@ -45,4 +40,3 @@
+ return res;
+ }
+ #endif
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sched_setaffinity.c uClibc-git/libc/sysdeps/linux/common/sched_setaffinity.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sched_setaffinity.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sched_setaffinity.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,26 +12,20 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#ifdef __USE_GNU
+-
+-#include <sched.h>
+-#include <sys/types.h>
+ #include <sys/syscall.h>
+-#include <string.h>
+-#include <unistd.h>
+-#include <sys/param.h>
+-#include <alloca.h>
+-
+-#if defined __NR_sched_setaffinity
+-
+-#define __NR___syscall_sched_setaffinity __NR_sched_setaffinity
+-static __inline__ _syscall3(int, __syscall_sched_setaffinity, __kernel_pid_t, pid,
+- size_t, cpusetsize, cpu_set_t *, cpuset)
++
++#if defined __NR_sched_setaffinity && defined __USE_GNU
++# include <sched.h>
++# include <sys/types.h>
++# include <string.h>
++# include <unistd.h>
++# include <alloca.h>
++# define __NR___syscall_sched_setaffinity __NR_sched_setaffinity
++static __always_inline _syscall3(int, __syscall_sched_setaffinity, __kernel_pid_t, pid,
++ size_t, cpusetsize, const cpu_set_t *, cpuset)
+
+ static size_t __kernel_cpumask_size;
+
+@@ -68,7 +62,6 @@
+ return -1;
+ }
+
+- return INLINE_SYSCALL (sched_setaffinity, 3, pid, cpusetsize, cpuset);
++ return __syscall_sched_setaffinity(pid, cpusetsize, cpuset);
+ }
+ #endif
+-#endif /* __USE_GNU */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/select.c uClibc-git/libc/sysdeps/linux/common/select.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/select.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/select.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,27 +9,24 @@
+
+ #include <sys/syscall.h>
+ #include <sys/select.h>
+-#include <stdint.h>
++#include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#else
+-#define SINGLE_THREAD_P 1
++#ifdef __NR__newselect
++# undef __NR_select
++# define __NR_select __NR__newselect
+ #endif
+
+-#define USEC_PER_SEC 1000000L
+-
+-extern __typeof(select) __libc_select;
+-
+-#if !defined(__NR__newselect) && !defined(__NR_select) && defined __USE_XOPEN2K
+-# define __NR___libc_pselect6 __NR_pselect6
+-static _syscall6(int, __libc_pselect6, int, n, fd_set *, readfds, fd_set *, writefds,
+- fd_set *, exceptfds, const struct timespec *, timeout,
+- const sigset_t *, sigmask)
++#if !defined __NR_select && defined __NR_pselect6
++# include <stdint.h>
++# define USEC_PER_SEC 1000000L
++#endif
+
+-int __libc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+- struct timeval *timeout)
++int __NC(select)(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
++ struct timeval *timeout)
+ {
++#ifdef __NR_select
++ return INLINE_SYSCALL(select, 5, n, readfds, writefds, exceptfds, timeout);
++#elif defined __NR_pselect6
+ struct timespec _ts, *ts = 0;
+ if (timeout) {
+ uint32_t usec;
+@@ -51,44 +48,14 @@
+
+ ts = &_ts;
+ }
+-
+- if (SINGLE_THREAD_P)
+- return __libc_pselect6(n, readfds, writefds, exceptfds, ts, 0);
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __libc_pselect6(n, readfds, writefds, exceptfds, ts, 0);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-
+-}
+-
+-#else
+-
+-#ifdef __NR__newselect
+-# define __NR___syscall_select __NR__newselect
+-#else
+-# define __NR___syscall_select __NR_select
+-#endif
+-
+-static _syscall5(int, __syscall_select, int, n, fd_set *, readfds,
+- fd_set *, writefds, fd_set *, exceptfds, struct timeval *, timeout);
+-
+-int __libc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+- struct timeval *timeout)
+-{
+- if (SINGLE_THREAD_P)
+- return __syscall_select(n, readfds, writefds, exceptfds, timeout);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = __syscall_select(n, readfds, writefds, exceptfds, timeout);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
++ return INLINE_SYSCALL(pselect6, 6, n, readfds, writefds, exceptfds, ts, 0);
+ #endif
+ }
+-
++/* we should guard it, but we need it in other files, so let it fail
++ * if we miss any of the syscalls */
++#if 1 /*defined __NR_select || defined __NR_pselect6*/
++CANCELLABLE_SYSCALL(int, select, (int n, fd_set *readfds, fd_set *writefds,
++ fd_set *exceptfds, struct timeval *timeout),
++ (n, readfds, writefds, exceptfds, timeout))
++lt_libc_hidden(select)
+ #endif
+-
+-weak_alias(__libc_select,select)
+-libc_hidden_weak(select)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sendfile64.c uClibc-git/libc/sysdeps/linux/common/sendfile64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sendfile64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sendfile64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,15 +10,12 @@
+ * just the macro we need to order things, __LONG_LONG_PAIR.
+ */
+
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/sendfile.h>
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+ #include <bits/wordsize.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_sendfile64
++#if defined __NR_sendfile64 && __WORDSIZE != 64
++# include <sys/sendfile.h>
+ _syscall4(ssize_t,sendfile64, int, out_fd, int, in_fd, __off64_t *, offset, size_t, count)
++libc_hidden_def(sendfile64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sendfile.c uClibc-git/libc/sysdeps/linux/common/sendfile.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sendfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sendfile.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,16 +8,57 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <unistd.h>
+-#include <sys/sendfile.h>
+
+-#ifdef __NR_sendfile
++# include <sys/sendfile.h>
++# include <bits/wordsize.h>
+
++#if defined __NR_sendfile
+ _syscall4(ssize_t, sendfile, int, out_fd, int, in_fd, __off_t *, offset,
+- size_t, count)
++ size_t, count)
++# if defined __UCLIBC_HAS_LFS__ && (!defined __NR_sendfile64 || __WORDSIZE == 64)
++libc_hidden_def(sendfile64)
++strong_alias_untyped(sendfile,sendfile64)
++# endif
+
+-#if ! defined __NR_sendfile64 && defined __UCLIBC_HAS_LFS__
+-strong_alias(sendfile,sendfile64)
+-#endif
++#elif defined __NR_sendfile64 && !defined __NR_sendfile
++# include <unistd.h>
++# include <stddef.h>
++
++ssize_t sendfile(int out_fd, int in_fd, __off_t *offset, size_t count)
++{
++ __off64_t off64, *off;
++ ssize_t res;
++
++ /*
++ * Check if valid fds and valid pointers were passed
++ * This does not prevent the user from passing
++ * an arbitrary pointer causing a segfault or
++ * other security issues
++ */
++
++ if (in_fd < 0 || out_fd < 0) {
++ __set_errno(EBADF);
++ return -1;
++ }
++
++ if (offset == NULL || (int)offset < 0) {
++ __set_errno(EFAULT);
++ return -1;
++ }
+
+-#endif /* __NR_sendfile */
++ if (offset) {
++ off = &off64;
++ off64 = *offset;
++ } else {
++ off = NULL;
++ }
++
++ res = INLINE_SYSCALL(sendfile64, 4, out_fd, in_fd, off, count);
++
++ if (res >= 0)
++ *offset = off64;
++
++ return res;
++}
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/setgroups.c uClibc-git/libc/sysdeps/linux/common/setgroups.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/setgroups.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/setgroups.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,12 +8,9 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+-#include <grp.h>
+
+ #ifdef __USE_BSD
+-
++#include <grp.h>
+
+ #if defined(__NR_setgroups32)
+ # undef __NR_setgroups
+@@ -24,11 +21,14 @@
+ _syscall2(int, setgroups, size_t, size, const gid_t *, list)
+
+ #else
+-
+-
+-#define __NR___syscall_setgroups __NR_setgroups
+-static __inline__ _syscall2(int, __syscall_setgroups,
+- size_t, size, const __kernel_gid_t *, list)
++# include <errno.h>
++# include <stdlib.h>
++# include <unistd.h>
++# include <sys/types.h>
++
++# define __NR___syscall_setgroups __NR_setgroups
++static __always_inline _syscall2(int, __syscall_setgroups,
++ size_t, size, const __kernel_gid_t *, list)
+
+ int setgroups(size_t size, const gid_t *groups)
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/setpgrp.c uClibc-git/libc/sysdeps/linux/common/setpgrp.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/setpgrp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/setpgrp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,10 +4,8 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <syscall.h>
+ #include <unistd.h>
+
+-
+ int setpgrp(void)
+ {
+ return setpgid(0,0);
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/setrlimit64.c uClibc-git/libc/sysdeps/linux/common/setrlimit64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/setrlimit64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/setrlimit64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,20 +12,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <_lfs_64.h>
+-
+-#include <sys/types.h>
+-#include <sys/resource.h>
+ #include <bits/wordsize.h>
+
+ /* the regular setrlimit will work just fine for 64bit users */
++#if __WORDSIZE == 32
+
+-#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 32
+-
++# include <sys/resource.h>
+
+ /* Set the soft and hard limits for RESOURCE to *RLIMITS.
+ Only the super-user can increase hard limits.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/setrlimit.c uClibc-git/libc/sysdeps/linux/common/setrlimit.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/setrlimit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/setrlimit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,12 +7,9 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define setrlimit64 __hide_setrlimit64
+ #include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/resource.h>
+-#undef setrlimit64
+-
++#include <bits/wordsize.h>
+
+ /* Only wrap setrlimit if the new usetrlimit is not present and setrlimit sucks */
+
+@@ -25,7 +22,7 @@
+ const struct rlimit *, rlim)
+ int setrlimit(__rlimit_resource_t resource, struct rlimit *rlimits)
+ {
+- return (__syscall_usetrlimit(resource, rlimits));
++ return __syscall_usetrlimit(resource, rlimits);
+ }
+
+ #elif !defined(__UCLIBC_HANDLE_OLDER_RLIMIT__)
+@@ -36,6 +33,11 @@
+
+ #else
+
++# define __need_NULL
++# include <stddef.h>
++# include <errno.h>
++# include <sys/param.h>
++
+ /* we have to handle old style setrlimit() */
+ # define __NR___syscall_setrlimit __NR_setrlimit
+ static __always_inline
+@@ -52,18 +54,15 @@
+
+ /* We might have to correct the limits values. Since the old values
+ * were signed the new values might be too large. */
+-# define RMIN(x, y) ((x) < (y) ? (x) : (y))
+- rlimits_small.rlim_cur = RMIN((unsigned long int) rlimits->rlim_cur,
++ rlimits_small.rlim_cur = MIN((unsigned long int) rlimits->rlim_cur,
+ RLIM_INFINITY >> 1);
+- rlimits_small.rlim_max = RMIN((unsigned long int) rlimits->rlim_max,
++ rlimits_small.rlim_max = MIN((unsigned long int) rlimits->rlim_max,
+ RLIM_INFINITY >> 1);
+-#undef RMIN
+- return (__syscall_setrlimit(resource, &rlimits_small));
++ return __syscall_setrlimit(resource, &rlimits_small);
+ }
+ #endif
+-
+ libc_hidden_def(setrlimit)
+
+ #if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
+-strong_alias(setrlimit, setrlimit64)
++strong_alias_untyped(setrlimit, setrlimit64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/setsid.c uClibc-git/libc/sysdeps/linux/common/setsid.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/setsid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/setsid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,5 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
+-
+ _syscall0(pid_t, setsid)
+ libc_hidden_def(setsid)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/settimeofday.c uClibc-git/libc/sysdeps/linux/common/settimeofday.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/settimeofday.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/settimeofday.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,12 +8,36 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <sys/time.h>
+
+ #ifdef __USE_BSD
++# include <sys/time.h>
++# ifdef __NR_settimeofday
++_syscall2(int, settimeofday, const struct timeval *, tv,
++ const struct timezone *, tz)
++# elif defined __USE_SVID && defined __NR_stime
++# define __need_NULL
++# include <stddef.h>
++# include <errno.h>
++# include <time.h>
++int settimeofday(const struct timeval *tv, const struct timezone *tz)
++{
++ time_t when;
+
++ if (tv == NULL) {
++ __set_errno(EINVAL);
++ return -1;
++ }
+
+-_syscall2(int, settimeofday, const struct timeval *, tv,
+- const struct timezone *, tz)
++ if (tz != NULL || tv->tv_usec % 1000000 != 0) {
++ __set_errno(ENOSYS);
++ return -1;
++ }
++
++ when = tv->tv_sec + (tv->tv_usec / 1000000);
++ return stime(&when);
++}
++# endif
++# if defined __NR_settimeofday || (defined __USE_SVID && defined __NR_stime)
+ libc_hidden_def(settimeofday)
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/setuid.c uClibc-git/libc/sysdeps/linux/common/setuid.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/setuid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/setuid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -22,7 +22,7 @@
+ #else
+
+ # define __NR___syscall_setuid __NR_setuid
+-static __inline__ _syscall1(int, __syscall_setuid, __kernel_uid_t, uid)
++static __always_inline _syscall1(int, __syscall_setuid, __kernel_uid_t, uid)
+
+ int setuid(uid_t uid)
+ {
+@@ -30,6 +30,6 @@
+ __set_errno(EINVAL);
+ return -1;
+ }
+- return (__syscall_setuid(uid));
++ return __syscall_setuid(uid);
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/signalfd.c uClibc-git/libc/sysdeps/linux/common/signalfd.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/signalfd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/signalfd.c 2014-02-03 12:32:56.000000000 +0100
+@@ -25,13 +25,13 @@
+ int signalfd (int fd, const sigset_t *mask, int flags)
+ {
+ #if defined __NR___syscall_signalfd4
+- return __syscall_signalfd4(fd, mask, _NSIG / 8, flags);
++ return __syscall_signalfd4(fd, mask, __SYSCALL_SIGSET_T_SIZE, flags);
+ #elif defined __NR___syscall_signalfd
+ if (flags != 0) {
+ __set_errno(EINVAL);
+ return -1;
+ }
+- return __syscall_signalfd(fd, mask, _NSIG / 8);
++ return __syscall_signalfd(fd, mask, __SYSCALL_SIGSET_T_SIZE);
+ #endif
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sigpending.c uClibc-git/libc/sysdeps/linux/common/sigpending.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sigpending.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sigpending.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,7 +19,7 @@
+
+ int sigpending(sigset_t * set)
+ {
+- return __rt_sigpending(set, _NSIG / 8);
++ return __rt_sigpending(set, __SYSCALL_SIGSET_T_SIZE);
+ }
+ #else
+ _syscall1(int, sigpending, sigset_t *, set)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sigprocmask.c uClibc-git/libc/sysdeps/linux/common/sigprocmask.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sigprocmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sigprocmask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -35,9 +35,9 @@
+ * The only thing we have to make sure here is that SIGCANCEL and
+ * SIGSETXID are not blocked.
+ */
+- if (set != NULL && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
++ if (set != NULL && (unlikely (__sigismember (set, SIGCANCEL))
+ # ifdef SIGSETXID
+- || __builtin_expect (__sigismember (set, SIGSETXID), 0)
++ || unlikely (__sigismember (set, SIGSETXID))
+ # endif
+ ))
+ {
+@@ -50,7 +50,7 @@
+ }
+ #endif
+
+- return __rt_sigprocmask(how, set, oldset, _NSIG / 8);
++ return __rt_sigprocmask(how, set, oldset, __SYSCALL_SIGSET_T_SIZE);
+ }
+
+
+@@ -70,9 +70,9 @@
+ * The only thing we have to make sure here is that SIGCANCEL and
+ * SIGSETXID are not blocked.
+ */
+- if (set != NULL && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
++ if (set != NULL && (unlikely (__sigismember (set, SIGCANCEL))
+ # ifdef SIGSETXID
+- || __builtin_expect (__sigismember (set, SIGSETXID), 0)
++ || unlikely (__sigismember (set, SIGSETXID))
+ # endif
+ ))
+ {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sigqueue.c uClibc-git/libc/sysdeps/linux/common/sigqueue.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sigqueue.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sigqueue.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,41 +12,35 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <errno.h>
+-#include <signal.h>
+-#include <unistd.h>
+-#include <string.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/syscall.h>
+-#if defined __USE_POSIX199309
+
++#if defined __NR_rt_sigqueueinfo && defined __USE_POSIX199309
++# include <signal.h>
++# include <unistd.h>
++# include <string.h>
+
+-#ifdef __NR_rt_sigqueueinfo
+-
+-# define __NR___libc_rt_sigqueueinfo __NR_rt_sigqueueinfo
+-static __inline__ _syscall3(int, __libc_rt_sigqueueinfo, pid_t, pid, int, sig, void*, value)
++# define __NR___syscall_rt_sigqueueinfo __NR_rt_sigqueueinfo
++static __always_inline _syscall3(int, __syscall_rt_sigqueueinfo, pid_t, pid, int, sig, void*, value)
+
+ /* Return any pending signal or wait for one for the given time. */
+ int sigqueue (pid_t pid, int sig, const union sigval val)
+ {
+- siginfo_t info;
++ siginfo_t info;
+
+- /* First, clear the siginfo_t structure, so that we don't pass our
+- stack content to other tasks. */
+- memset (&info, 0, sizeof (siginfo_t));
+- /* We must pass the information about the data in a siginfo_t value. */
+- info.si_signo = sig;
+- info.si_code = SI_QUEUE;
+- info.si_pid = getpid ();
+- info.si_uid = getuid ();
+- info.si_value = val;
++ /* First, clear the siginfo_t structure, so that we don't pass our
++ stack content to other tasks. */
++ memset(&info, 0, sizeof(info));
++ /* We must pass the information about the data in a siginfo_t value. */
++ info.si_signo = sig;
++ info.si_code = SI_QUEUE;
++ info.si_pid = getpid ();
++ info.si_uid = getuid ();
++ info.si_value = val;
+
+- return __libc_rt_sigqueueinfo(pid, sig, &info);
++ return __syscall_rt_sigqueueinfo(pid, sig, &info);
+ }
+
+ #endif
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sigsuspend.c uClibc-git/libc/sysdeps/linux/common/sigsuspend.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sigsuspend.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sigsuspend.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,51 +9,18 @@
+
+ #include <sys/syscall.h>
+
+-#if defined __USE_POSIX
++#ifdef __USE_POSIX
+ #include <signal.h>
+-#undef sigsuspend
++#include <cancel.h>
+
+-libc_hidden_proto(sigsuspend)
+-
+-#ifdef __NR_rt_sigsuspend
+-# define __NR___rt_sigsuspend __NR_rt_sigsuspend
+-
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <errno.h>
+-# include <sysdep-cancel.h>
+-
+-/* Change the set of blocked signals to SET,
+- wait until a signal arrives, and restore the set of blocked signals. */
+-int sigsuspend (const sigset_t *set)
++int __NC(sigsuspend)(const sigset_t *set)
+ {
+- if (SINGLE_THREAD_P)
+- return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
+-
+- int oldtype = LIBC_CANCEL_ASYNC ();
+-
+- int result = INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
+-
+- LIBC_CANCEL_RESET (oldtype);
+-
+- return result;
+-}
+-# else
+-static inline _syscall2(int, __rt_sigsuspend, const sigset_t *, mask, size_t, size)
+-
+-int sigsuspend(const sigset_t * mask)
+-{
+- return __rt_sigsuspend(mask, _NSIG / 8);
+-}
+-# endif
++#ifdef __NR_rt_sigsuspend
++ return INLINE_SYSCALL(rt_sigsuspend, 2, set, __SYSCALL_SIGSET_T_SIZE);
+ #else
+-# define __NR___syscall_sigsuspend __NR_sigsuspend
+-static __inline__ _syscall3(int, __syscall_sigsuspend, int, a, unsigned long int, b,
+- unsigned long int, c)
+-
+-int sigsuspend(const sigset_t * set)
+-{
+- return __syscall_sigsuspend(0, 0, set->__val[0]);
+-}
++ return INLINE_SYSCALL(sigsuspend, 3, 0, 0, set->__val[0]);
+ #endif
+-libc_hidden_def(sigsuspend)
++}
++CANCELLABLE_SYSCALL(int, sigsuspend, (const sigset_t *set), (set))
++lt_libc_hidden(sigsuspend)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__socketcall.c uClibc-git/libc/sysdeps/linux/common/__socketcall.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__socketcall.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__socketcall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,8 +8,18 @@
+ */
+
+ #include <sys/syscall.h>
++
++/* At the time of this writing,
++ * several arches provide the individual calls and do _not_ go through
++ * this demuxer.
++ *
++ * Verify all arches supported by your kernel before you remove the
++ * guard below!
++ */
+ #ifdef __NR_socketcall
++#include <sys/socket.h>
++
+ #define __NR___socketcall __NR_socketcall
+-int __socketcall(int __call, unsigned long *__args) attribute_hidden;
+ _syscall2(int, __socketcall, int, call, unsigned long *, args)
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/splice.c uClibc-git/libc/sysdeps/linux/common/splice.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/splice.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/splice.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,9 +8,10 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <fcntl.h>
+
+-#ifdef __NR_splice
+-_syscall6(ssize_t, splice, int, __fdin, __off64_t *, __offin, int, __fdout,
+- __off64_t *, __offout, size_t, __len, unsigned int, __flags)
++#if defined __NR_splice && defined __UCLIBC_HAS_LFS__ && defined __USE_GNU
++# include <fcntl.h>
++
++_syscall6(ssize_t, splice, int, __fdin, off64_t *, __offin, int, __fdout,
++ off64_t *, __offout, size_t, __len, unsigned int, __flags)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ssp.c uClibc-git/libc/sysdeps/linux/common/ssp.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ssp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ssp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -20,103 +20,113 @@
+ #error "file must not be compiled with stack protection enabled on it. Use -fno-stack-protector"
+ #endif
+
++#include <string.h>
++#include <unistd.h>
++#include <signal.h>
++#ifdef __UCLIBC_HAS_SYSLOG__
++#include <sys/syslog.h>
++#endif
++
+ #ifdef __PROPOLICE_BLOCK_SEGV__
+ # define SSP_SIGTYPE SIGSEGV
+ #else
+ # define SSP_SIGTYPE SIGABRT
+ #endif
+
+-#include <string.h>
+-#include <unistd.h>
+-#include <signal.h>
+-#if defined __UCLIBC_HAS_SYSLOG__
+-#include <sys/syslog.h>
++static void do_write(const char *msg)
++{
++ /* could use inlined syscall here to be sure ... */
++ return (void) write(STDERR_FILENO, msg, strlen(msg));
++}
+
++static void __cold do_msg(const char *msg1, const char *msg2, const char *msg3)
++{
++ do_write(msg1);
++ do_write(msg2);
++ do_write(msg3);
++ do_write("\n");
++#ifdef __UCLIBC_HAS_SYSLOG__
++ syslog(LOG_INFO, "%s%s%s()", msg1, msg2, msg3);
+ #endif
++}
+
+-
+-static void block_signals(void)
++static void __cold attribute_noreturn
++#ifdef __UCLIBC_HAS_SSP_COMPAT__
++ssp_handler(char func[])
++#else
++ssp_handler(void)
++#endif
+ {
++ pid_t pid;
++ static const char msg_ssd[] = "*** stack smashing detected ***: ";
++ static const char msg_terminated[] = " terminated";
++#ifdef __UCLIBC_HAS_SSP_COMPAT__
++ static const char msg_ssa[] = ": stack smashing attack in function ";
++#endif
++
++#ifdef __DODEBUG__
+ struct sigaction sa;
+ sigset_t mask;
+
+ __sigfillset(&mask);
+ __sigdelset(&mask, SSP_SIGTYPE); /* Block all signal handlers */
+ sigprocmask(SIG_BLOCK, &mask, NULL); /* except SSP_SIGTYPE */
++#endif
++
++#ifdef __UCLIBC_HAS_SSP_COMPAT__
++ if (func != NULL)
++ do_msg(__uclibc_progname, msg_ssa, func);
++ else
++#endif
++ do_msg(msg_ssd, __uclibc_progname, msg_terminated);
+
++ pid = getpid();
++#ifdef __DODEBUG__
+ /* Make the default handler associated with the signal handler */
+ memset(&sa, 0, sizeof(sa));
+ __sigfillset(&sa.sa_mask); /* Block all signals */
+ if (SIG_DFL) /* if it's constant zero, it's already done */
+ sa.sa_handler = SIG_DFL;
+- sigaction(SSP_SIGTYPE, &sa, NULL);
+-}
+-
+-static void __cold ssp_write(int fd, const char *msg1, const char *msg2, const char *msg3)
+-{
+- write(fd, msg1, strlen(msg1));
+- write(fd, msg2, strlen(msg2));
+- write(fd, msg3, strlen(msg3));
+- write(fd, "()\n", 3);
+-#if defined __UCLIBC_HAS_SYSLOG__
+- openlog("ssp", LOG_CONS | LOG_PID, LOG_USER);
+- syslog(LOG_INFO, "%s%s%s()", msg1, msg2, msg3);
+- closelog();
++ if (sigaction(SSP_SIGTYPE, &sa, NULL) == 0)
++ (void)kill(pid, SSP_SIGTYPE);
+ #endif
+-}
+-
+-static attribute_noreturn void terminate(void)
+-{
+- (void) kill(getpid(), SSP_SIGTYPE);
+- _exit(127);
++ (void)kill(pid, SIGKILL);
++ /* The loop is added only to keep gcc happy. */
++ while(1)
++ _exit(127);
+ }
+
+ #ifdef __UCLIBC_HAS_SSP_COMPAT__
+-void __stack_smash_handler(char func[], int damaged __attribute__ ((unused))) attribute_noreturn __cold;
+-void __stack_smash_handler(char func[], int damaged)
++void __stack_smash_handler(char func[], int damaged) attribute_noreturn __cold;
++void __stack_smash_handler(char func[], int damaged attribute_unused)
+ {
+- static const char message[] = ": stack smashing attack in function ";
+-
+- block_signals();
+-
+- ssp_write(STDERR_FILENO, __uclibc_progname, message, func);
+-
+- /* The loop is added only to keep gcc happy. */
+- while(1)
+- terminate();
++ ssp_handler(func);
+ }
+-#endif
+
+-#ifdef __UCLIBC_HAS_SSP__
+-void __stack_chk_fail(void) attribute_noreturn __cold;
+ void __stack_chk_fail(void)
+ {
+- static const char msg1[] = "stack smashing detected: ";
+- static const char msg3[] = " terminated";
+-
+- block_signals();
+-
+- ssp_write(STDERR_FILENO, msg1, __uclibc_progname, msg3);
+-
+- /* The loop is added only to keep gcc happy. */
+- while(1)
+- terminate();
++ ssp_handler(NULL);
+ }
++#else
++strong_alias(ssp_handler,__stack_chk_fail)
+ #endif
+
+ #ifdef __UCLIBC_HAS_FORTIFY__
++/* should be redone when activated to use common code above.
++ * for now, it works without debugging support */
+ void __chk_fail(void)
+ {
+- static const char msg1[] = "buffer overflow detected: ";
+- static const char msg3[] = " terminated";
+-
+- block_signals();
++ static const char msg_fail[] = "*** buffer overflow detected ***: ";
++ static const char msg_terminated[] = " terminated";
++ pid_t pid;
+
+- ssp_write(STDERR_FILENO, msg1, __uclibc_progname, msg3);
++ do_msg(msg_fail, __uclibc_progname, msg_terminated);
+
++ pid = getpid();
++ (void)kill(pid, SIGKILL);
+ /* The loop is added only to keep gcc happy. */
+ while(1)
+- terminate();
++ _exit(127);
+ }
+ libc_hidden_def(__chk_fail)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ssp-local.c uClibc-git/libc/sysdeps/linux/common/ssp-local.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ssp-local.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ssp-local.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,18 +12,19 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Peter S. Mazinger ps.m[@]gmx.net
+ * copied stack_chk_fail_local.c from glibc and adapted for uClibc
+ */
+
+-#include <features.h>
++#if defined __SSP__ || defined __SSP_ALL__
++# error "file must not be compiled with stack protection enabled on it. Use -fno-stack-protector"
++#endif
+
+-extern void __stack_chk_fail (void) attribute_noreturn;
++#include <features.h>
+
+ /* On some architectures, this helps needless PIC pointer setup
+ that would be needed just for the __stack_chk_fail call. */
+@@ -31,5 +32,5 @@
+ void __stack_chk_fail_local (void) attribute_noreturn attribute_hidden;
+ void __stack_chk_fail_local (void)
+ {
+- __stack_chk_fail ();
++ __stack_chk_fail ();
+ }
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/stat64.c uClibc-git/libc/sysdeps/linux/common/stat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/stat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/stat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,17 +7,28 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+ #include <sys/stat.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_stat64
++#if defined __UCLIBC_HAS_LFS__
+
+-# define __NR___syscall_stat64 __NR_stat64
++# if defined __NR_fstatat64 && !defined __NR_stat64
++# include <fcntl.h>
+ # include <unistd.h>
+-# include "xstatconv.h"
+
+-static __inline__ _syscall2(int, __syscall_stat64,
+- const char *, file_name, struct kernel_stat64 *, buf)
++int stat64(const char *file_name, struct stat64 *buf)
++{
++ return fstatat64(AT_FDCWD, file_name, buf, 0);
++}
++libc_hidden_def(stat64)
++
++/* For systems which have both, prefer the old one */
++# elif defined __NR_stat64
++# define __NR___syscall_stat64 __NR_stat64
++# include "xstatconv.h"
++static __always_inline _syscall2(int, __syscall_stat64,
++ const char *, file_name, struct kernel_stat64 *, buf)
+
+ int stat64(const char *file_name, struct stat64 *buf)
+ {
+@@ -31,4 +42,6 @@
+ return result;
+ }
+ libc_hidden_def(stat64)
+-#endif
++# endif
++
++#endif /* __UCLIBC_HAS_LFS__ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/stat.c uClibc-git/libc/sysdeps/linux/common/stat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/stat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/stat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,14 +10,24 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+-#include "xstatconv.h"
+
+ #undef stat
+
++#if defined __NR_fstatat64 && !defined __NR_stat
++# include <fcntl.h>
++
++int stat(const char *file_name, struct stat *buf)
++{
++ return fstatat(AT_FDCWD, file_name, buf, 0);
++}
++
++#else
++# include "xstatconv.h"
++
+ int stat(const char *file_name, struct stat *buf)
+ {
+ int result;
+-#ifdef __NR_stat64
++# ifdef __NR_stat64
+ /* normal stat call has limited values for various stat elements
+ * e.g. uid device major/minor etc.
+ * so we use 64 variant if available
+@@ -28,19 +38,21 @@
+ if (result == 0) {
+ __xstat32_conv(&kbuf, buf);
+ }
+-#else
++# else
+ struct kernel_stat kbuf;
+
+ result = INLINE_SYSCALL(stat, 2, file_name, &kbuf);
+ if (result == 0) {
+ __xstat_conv(&kbuf, buf);
+ }
+-#endif
++# endif /* __NR_stat64 */
+ return result;
+ }
++#endif /* __NR_fstat64 */
+ libc_hidden_def(stat)
+
+-#if ! defined __NR_stat64 && defined __UCLIBC_HAS_LFS__
++#if ! defined __NR_stat64 && ! defined __NR_fstatat64 && \
++ defined __UCLIBC_HAS_LFS__
+ strong_alias_untyped(stat,stat64)
+ libc_hidden_def(stat64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/statfs.c uClibc-git/libc/sysdeps/linux/common/statfs.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/statfs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/statfs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,10 +13,39 @@
+ #include <sys/vfs.h>
+
+ extern __typeof(statfs) __libc_statfs attribute_hidden;
+-#define __NR___libc_statfs __NR_statfs
++
++#if defined __NR_statfs64 && !defined __NR_statfs
++
++int __libc_statfs(const char *path, struct statfs *buf)
++{
++ int err = INLINE_SYSCALL(statfs64, 3, path, sizeof(*buf), buf);
++
++ if (err == 0) {
++ /* Did we overflow? */
++ if (buf->__pad1 || buf->__pad2 || buf->__pad3 ||
++ buf->__pad4 || buf->__pad5) {
++ __set_errno(EOVERFLOW);
++ return -1;
++ }
++ }
++
++ return err;
++}
++# if defined __UCLIBC_LINUX_SPECIFIC__ || defined __UCLIBC_HAS_THREADS_NATIVE__
++/* statfs is used by NPTL, so it must exported in case */
++weak_alias(__libc_statfs, statfs)
++# endif
++
++/* For systems which have both, prefer the old one */
++#else
++
++# define __NR___libc_statfs __NR_statfs
+ _syscall2(int, __libc_statfs, const char *, path, struct statfs *, buf)
+
+-#if defined __UCLIBC_LINUX_SPECIFIC__ || defined __UCLIBC_HAS_THREADS_NATIVE__
++# if defined __UCLIBC_LINUX_SPECIFIC__ || defined __UCLIBC_HAS_THREADS_NATIVE__
+ /* statfs is used by NPTL, so it must exported in case */
+-weak_alias(__libc_statfs,statfs)
++weak_alias(__libc_statfs, statfs)
++# endif
++
+ #endif
++libc_hidden_def(statfs)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/stime.c uClibc-git/libc/sysdeps/linux/common/stime.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/stime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/stime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,15 +8,17 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <time.h>
+-#include <sys/time.h>
+
+ #ifdef __USE_SVID
+-#ifdef __NR_stime
++# include <time.h>
++# ifdef __NR_stime
+ _syscall1(int, stime, const time_t *, t)
+-#else
+-
+-int stime(const time_t * when)
++# elif defined __USE_BSD && defined __NR_settimeofday
++# define __need_NULL
++# include <stddef.h>
++# include <errno.h>
++# include <sys/time.h>
++int stime(const time_t *when)
+ {
+ struct timeval tv;
+
+@@ -28,5 +30,8 @@
+ tv.tv_usec = 0;
+ return settimeofday(&tv, (struct timezone *) 0);
+ }
+-#endif
++# endif
++# if defined __NR_stime || (defined __USE_BSD && defined __NR_settimeofday)
++libc_hidden_def(stime)
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/stubs.c uClibc-git/libc/sysdeps/linux/common/stubs.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/stubs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/stubs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,31 +6,52 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++/* Please keep the list sorted alphabetically, in ascending order
++ * of the stub name! */
++
+ #include <errno.h>
+ #include <bits/wordsize.h>
+ #include <sys/syscall.h>
+
+ #ifdef __UCLIBC_HAS_STUBS__
+
+-static int enosys_stub(void) __attribute_used__;
+-static int enosys_stub(void)
++__attribute_used__ static int enosys_stub(void)
+ {
+ __set_errno(ENOSYS);
+ return -1;
+ }
+
++__attribute_used__ static int ret_enosys_stub(void)
++{
++ return ENOSYS;
++}
++
+ #define make_stub(stub) \
+ link_warning(stub, #stub ": this function is not implemented") \
+ strong_alias(enosys_stub, stub)
+
++#define make_ret_stub(stub) \
++ link_warning(stub, #stub ": this function is not implemented") \
++ strong_alias(ret_enosys_stub, stub)
++
+ #ifndef __ARCH_USE_MMU__
+ # undef __NR_fork
+ #endif
+
+-#ifndef __UCLIBC_HAS_LFS__
+-# undef __NR_fadvise64
+-# undef __NR_fadvise64_64
+-# undef __NR_sync_file_range
++#ifdef __arm__
++# define __NR_fadvise64_64 __NR_arm_fadvise64_64
++# define __NR_fadvise64 __NR_arm_fadvise64_64
++/* ARM always provides funcs w/out syscalls; disable the stubs */
++# define __NR_ioperm 0
++# define __NR_iopl 0
++#endif
++
++#ifdef __mips__
++# define __NR_fadvise64_64 __NR_fadvise64
++#endif
++
++#ifdef __xtensa__
++# define __NR_fadvise64 __NR_fadvise64_64
+ #endif
+
+ #if !defined __NR_accept && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
+@@ -45,14 +66,6 @@
+ make_stub(arch_prctl)
+ #endif
+
+-#if !defined __NR_capget && defined __UCLIBC_LINUX_SPECIFIC__
+-make_stub(capget)
+-#endif
+-
+-#if !defined __NR_capset && defined __UCLIBC_LINUX_SPECIFIC__
+-make_stub(capset)
+-#endif
+-
+ #if !defined __NR_bdflush && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(bdflush)
+ #endif
+@@ -61,11 +74,11 @@
+ make_stub(bind)
+ #endif
+
+-#ifndef __NR_capget
++#if !defined __NR_capget && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(capget)
+ #endif
+
+-#ifndef __NR_capset
++#if !defined __NR_capset && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(capset)
+ #endif
+
+@@ -81,38 +94,44 @@
+ make_stub(delete_module)
+ #endif
+
+-#ifndef __NR_epoll_create
++#if !defined __NR_epoll_create && defined __UCLIBC_HAS_EPOLL__ \
++ && !defined __NR_epoll_create1
+ make_stub(epoll_create)
+ #endif
+
+-#ifndef __NR_epoll_ctl
++#if !defined __NR_epoll_ctl && defined __UCLIBC_HAS_EPOLL__
+ make_stub(epoll_ctl)
+ #endif
+
+-#ifndef __NR_epoll_wait
++#if !defined __NR_epoll_pwait && defined __UCLIBC_HAS_EPOLL__
++make_stub(epoll_pwait)
++#endif
++
++#if !defined __NR_epoll_wait && defined __UCLIBC_HAS_EPOLL__ \
++ && !defined __NR_epoll_pwait
+ make_stub(epoll_wait)
+ #endif
+
+-#if !defined __NR_eventfd && defined __UCLIBC_LINUX_SPECIFIC__
++#if !defined __NR_eventfd && !defined __NR_eventfd2 && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(eventfd)
+ #endif
+
+-#ifndef __NR_fdatasync
++#if !defined __NR_fdatasync && !defined __NR_osf_fdatasync
+ make_stub(fdatasync)
+ #endif
+
++#ifndef __NR_fgetxattr
++make_stub(fgetxattr)
++#endif
++
+ #ifndef __NR_flistxattr
+ make_stub(flistxattr)
+ #endif
+
+-#ifndef __NR_fork
++#if !defined __NR_fork && !defined __NR_clone
+ make_stub(fork)
+ #endif
+
+-#ifndef __NR_fgetxattr
+-make_stub(fgetxattr)
+-#endif
+-
+ #ifndef __NR_fremovexattr
+ make_stub(fremovexattr)
+ #endif
+@@ -121,7 +140,8 @@
+ make_stub(fsetxattr)
+ #endif
+
+-#if !defined __NR_fstatfs && defined __UCLIBC_LINUX_SPECIFIC__
++#if !defined __NR_fstatfs && !defined __NR_fstatfs64 \
++ && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(fstatfs)
+ #endif
+
+@@ -129,10 +149,6 @@
+ make_stub(get_kernel_syms)
+ #endif
+
+-#if !defined __NR_getcpu && defined __UCLIBC_LINUX_SPECIFIC__ && ((defined __x86_64__ && !defined __UCLIBC_HAS_TLS__) || !defined __x86_64__)
+-make_stub(sched_getcpu)
+-#endif
+-
+ #if !defined __NR_getpeername && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
+ make_stub(getpeername)
+ #endif
+@@ -157,7 +173,12 @@
+ make_stub(init_module)
+ #endif
+
+-#if !defined __NR_inotify_init && defined __UCLIBC_LINUX_SPECIFIC__
++#if !defined __NR_inotify_add_watch && defined __UCLIBC_LINUX_SPECIFIC__
++make_stub(inotify_add_watch)
++#endif
++
++#if !defined __NR_inotify_init && defined __UCLIBC_LINUX_SPECIFIC__ \
++ && !defined __NR_inotify_init1
+ make_stub(inotify_init)
+ #endif
+
+@@ -165,19 +186,15 @@
+ make_stub(inotify_init1)
+ #endif
+
+-#if !defined __NR_inotify_add_watch && defined __UCLIBC_LINUX_SPECIFIC__
+-make_stub(inotify_add_watch)
+-#endif
+-
+ #if !defined __NR_inotify_rm_watch && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(inotify_rm_watch)
+ #endif
+
+-#if !defined __NR_ioperm && defined __UCLIBC_LINUX_SPECIFIC__ && !defined __arm__
++#if !defined __NR_ioperm && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(ioperm)
+ #endif
+
+-#if !defined __NR_iopl && defined __UCLIBC_LINUX_SPECIFIC__ && !defined __arm__
++#if !defined __NR_iopl && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(iopl)
+ #endif
+
+@@ -213,6 +230,13 @@
+ make_stub(modify_ldt)
+ #endif
+
++#ifndef __NR_openat
++make_stub(openat)
++# ifdef __UCLIBC_HAS_LFS__
++make_stub(openat64)
++# endif
++#endif
++
+ #if !defined __NR_personality && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(personality)
+ #endif
+@@ -225,6 +249,18 @@
+ make_stub(pivot_root)
+ #endif
+
++#if !defined __NR_fadvise64 && defined __UCLIBC_HAS_LFS__
++make_ret_stub(posix_fadvise)
++#endif
++
++#if !defined __NR_fadvise64_64 && defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 32
++make_ret_stub(posix_fadvise64)
++#endif
++
++#ifndef __NR_madvise
++make_ret_stub(posix_madvise)
++#endif
++
+ #if !defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(ppoll)
+ #endif
+@@ -233,6 +269,10 @@
+ make_stub(prctl)
+ #endif
+
++#if !defined __NR_query_module && defined __UCLIBC_LINUX_MODULE_24__
++make_stub(query_module)
++#endif
++
+ #if !defined __NR_readahead && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(readahead)
+ #endif
+@@ -241,10 +281,6 @@
+ make_stub(reboot)
+ #endif
+
+-#if !defined __NR_query_module && defined __UCLIBC_LINUX_MODULE_24__
+-make_stub(query_module)
+-#endif
+-
+ #if !defined __NR_recv && !defined __NR_socketcall && !defined __NR_recvfrom && defined __UCLIBC_HAS_SOCKET__
+ make_stub(recv)
+ #endif
+@@ -265,10 +301,18 @@
+ make_stub(removexattr)
+ #endif
+
++#ifndef __NR_renameat
++make_stub(renameat)
++#endif
++
+ #if !defined __NR_sched_getaffinity && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(sched_getaffinity)
+ #endif
+
++#if !defined __NR_getcpu && defined __UCLIBC_LINUX_SPECIFIC__ && ((defined __x86_64__ && !defined __UCLIBC_HAS_TLS__) || !defined __x86_64__)
++make_stub(sched_getcpu)
++#endif
++
+ #if !defined __NR_sched_setaffinity && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(sched_setaffinity)
+ #endif
+@@ -277,7 +321,8 @@
+ make_stub(send)
+ #endif
+
+-#if !defined __NR_sendfile && defined __UCLIBC_LINUX_SPECIFIC__
++#if !defined __NR_sendfile && !defined __NR_sendfile64 \
++ && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(sendfile)
+ #endif
+
+@@ -325,6 +370,15 @@
+ make_stub(signalfd)
+ #endif
+
++#ifndef __NR_rt_sigtimedwait
++make_stub(sigtimedwait)
++make_stub(sigwaitinfo)
++#endif
++
++#ifndef __NR_rt_sigqueueinfo
++make_stub(sigqueue)
++#endif
++
+ #if !defined __NR_socket && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
+ make_stub(socket)
+ #endif
+@@ -337,9 +391,9 @@
+ make_stub(socketpair)
+ #endif
+
+-#ifndef __NR_rt_sigtimedwait
+-make_stub(sigtimedwait)
+-make_stub(sigwaitinfo)
++#if !defined __NR_stime && !defined __NR_settimeofday
++make_stub(stime)
++make_stub(settimeofday)
+ #endif
+
+ #if !defined __NR_splice && defined __UCLIBC_LINUX_SPECIFIC__
+@@ -354,6 +408,10 @@
+ make_stub(swapon)
+ #endif
+
++#if !defined __NR_symlink && !defined __NR_symlinkat
++make_stub(symlink)
++#endif
++
+ #if !defined __NR_sync_file_range && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(sync_file_range)
+ #endif
+@@ -382,6 +440,21 @@
+ make_stub(timerfd_gettime)
+ #endif
+
++#ifndef __NR_utimensat
++make_stub(futimens)
++make_stub(utimensat)
++# ifndef __NR_lutimes
++make_stub(lutimes)
++# endif
++#endif
++
++#ifndef __NR_utimensat
++#if !defined __NR_utime && !defined __NR_utimes
++/*make_stub(utime) obsoleted */
++make_stub(utimes)
++#endif
++#endif
++
+ #if !defined __NR_umount && !defined __NR_umount2 && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(umount)
+ #endif
+@@ -394,19 +467,15 @@
+ make_stub(unshare)
+ #endif
+
+-#ifndef __NR_utimensat
+-make_stub(futimens)
+-make_stub(utimensat)
+-# ifndef __NR_lutimes
+-make_stub(lutimes)
+-# endif
++#if defined __UCLIBC_SV4_DEPRECATED__ && !defined __NR_ustat
++make_stub(ustat)
+ #endif
+
+ #if !defined __NR_vhangup && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(vhangup)
+ #endif
+
+-#ifndef __NR_vmsplice
++#if !defined __NR_vmsplice && defined __UCLIBC_LINUX_SPECIFIC__
+ make_stub(vmsplice)
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/symlinkat.c uClibc-git/libc/sysdeps/linux/common/symlinkat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/symlinkat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/symlinkat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_symlinkat
+ _syscall3(int, symlinkat, const char *, from, int, tofd, const char *, to)
++libc_hidden_def(symlinkat)
+ #else
+ /* should add emulation with symlink() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/symlink.c uClibc-git/libc/sysdeps/linux/common/symlink.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/symlink.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/symlink.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,6 +9,19 @@
+
+ #include <sys/syscall.h>
+ #if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K
+-#include <unistd.h>
++# include <unistd.h>
++
++# if defined __NR_symlinkat && !defined __NR_symlink
++# include <fcntl.h>
++int symlink(const char *oldpath, const char *newpath)
++{
++ return symlinkat(oldpath, AT_FDCWD, newpath);
++}
++
++# elif defined(__NR_symlink)
++
+ _syscall2(int, symlink, const char *, oldpath, const char *, newpath)
++
++# endif
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sync.c uClibc-git/libc/sysdeps/linux/common/sync.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sync.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sync.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,12 +8,8 @@
+ */
+
+ #include <sys/syscall.h>
+-# if defined __USE_BSD || defined __USE_UNIX98
+-#include <sys/types.h>
+-#include <unistd.h>
+
+-void sync(void)
+-{
+- INLINE_SYSCALL(sync, 0);
+-}
++#if defined __USE_BSD || defined __USE_UNIX98
++# include <unistd.h>
++_syscall0(void, sync)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sync_file_range.c uClibc-git/libc/sysdeps/linux/common/sync_file_range.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sync_file_range.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sync_file_range.c 2014-02-15 14:18:15.000000000 +0100
+@@ -4,24 +4,34 @@
+ *
+ * Copyright (C) 2008 Bernhard Reutner-Fischer <uclibc@uclibc.org>
+ *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
+ */
+
+ #include <sys/syscall.h>
+-#if defined __USE_GNU
+-#include <fcntl.h>
++#if defined __UCLIBC_HAS_LFS__ && defined __USE_GNU
++# include <bits/wordsize.h>
++# include <endian.h>
++# include <fcntl.h>
++# include <cancel.h>
+
+-#if defined __NR_sync_file_range && defined __UCLIBC_HAS_LFS__
+-#define __NR___syscall_sync_file_range __NR_sync_file_range
+-static __inline__ _syscall6(int, __syscall_sync_file_range, int, fd,
+- off_t, offset_hi, off_t, offset_lo,
+- off_t, nbytes_hi, off_t, nbytes_lo, unsigned int, flags)
+-int sync_file_range(int fd, off64_t offset, off64_t nbytes, unsigned int flags)
++# ifdef __NR_sync_file_range2
++# undef __NR_sync_file_range
++# define __NR_sync_file_range __NR_sync_file_range2
++# endif
++
++# ifdef __NR_sync_file_range
++static int __NC(sync_file_range)(int fd, off64_t offset, off64_t nbytes, unsigned int flags)
+ {
+- return __syscall_sync_file_range(fd,
+- __LONG_LONG_PAIR((long)(offset >> 32), (long)(offset & 0xffffffff)),
+- __LONG_LONG_PAIR((long)(nbytes >> 32), (long)(nbytes & 0xffffffff)),
+- flags);
++# if defined __powerpc__ && __WORDSIZE == 64
++ return INLINE_SYSCALL(sync_file_range, 4, fd, offset, nbytes, flags);
++# elif defined __mips__ && _MIPS_SIM == _ABIO32
++ return INLINE_SYSCALL(sync_file_range, 7, fd, 0,
++ OFF64_HI_LO(offset), OFF64_HI_LO(nbytes), flags);
++# else
++ return INLINE_SYSCALL(sync_file_range, 6, fd,
++ OFF64_HI_LO(offset), OFF64_HI_LO(nbytes), flags);
++# endif
+ }
+-#endif
++CANCELLABLE_SYSCALL(int, sync_file_range, (int fd, off64_t offset, off64_t nbytes, unsigned int flags), (fd, offset, nbytes, flags))
++# endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/acct.h uClibc-git/libc/sysdeps/linux/common/sys/acct.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/acct.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sys/acct.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
++/* Copyright (C) 1996, 1997, 1998, 1999, 2007 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,15 +12,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ACCT_H
+ #define _SYS_ACCT_H 1
+
+ #include <features.h>
+
++#include <endian.h>
+ #define __need_time_t
+ #include <time.h>
+ #include <sys/types.h>
+@@ -38,25 +38,51 @@
+ typedef u_int16_t comp_t;
+
+ struct acct
+- {
+- char ac_flag; /* Accounting flags. */
+- u_int16_t ac_uid; /* Accounting user ID. */
+- u_int16_t ac_gid; /* Accounting group ID. */
+- u_int16_t ac_tty; /* Controlling tty. */
+- u_int32_t ac_btime; /* Beginning time. */
+- comp_t ac_utime; /* Accounting user time. */
+- comp_t ac_stime; /* Accounting system time. */
+- comp_t ac_etime; /* Accounting elapsed time. */
+- comp_t ac_mem; /* Accounting average memory usage. */
+- comp_t ac_io; /* Accounting chars transferred. */
+- comp_t ac_rw; /* Accounting blocks read or written. */
+- comp_t ac_minflt; /* Accounting minor pagefaults. */
+- comp_t ac_majflt; /* Accounting major pagefaults. */
+- comp_t ac_swaps; /* Accounting number of swaps. */
+- u_int32_t ac_exitcode; /* Accounting process exitcode. */
+- char ac_comm[ACCT_COMM+1]; /* Accounting command name. */
+- char ac_pad[10]; /* Accounting padding bytes. */
+- };
++{
++ char ac_flag; /* Flags. */
++ u_int16_t ac_uid; /* Real user ID. */
++ u_int16_t ac_gid; /* Real group ID. */
++ u_int16_t ac_tty; /* Controlling terminal. */
++ u_int32_t ac_btime; /* Beginning time. */
++ comp_t ac_utime; /* User time. */
++ comp_t ac_stime; /* System time. */
++ comp_t ac_etime; /* Elapsed time. */
++ comp_t ac_mem; /* Average memory usage. */
++ comp_t ac_io; /* Chars transferred. */
++ comp_t ac_rw; /* Blocks read or written. */
++ comp_t ac_minflt; /* Minor pagefaults. */
++ comp_t ac_majflt; /* Major pagefaults. */
++ comp_t ac_swaps; /* Number of swaps. */
++ u_int32_t ac_exitcode; /* Process exitcode. */
++ char ac_comm[ACCT_COMM+1]; /* Command name. */
++ char ac_pad[10]; /* Padding bytes. */
++};
++
++#if 0
++struct acct_v3
++{
++ char ac_flag; /* Flags */
++ char ac_version; /* Always set to ACCT_VERSION */
++ u_int16_t ac_tty; /* Control Terminal */
++ u_int32_t ac_exitcode; /* Exitcode */
++ u_int32_t ac_uid; /* Real User ID */
++ u_int32_t ac_gid; /* Real Group ID */
++ u_int32_t ac_pid; /* Process ID */
++ u_int32_t ac_ppid; /* Parent Process ID */
++ u_int32_t ac_btime; /* Process Creation Time */
++ float ac_etime; /* Elapsed Time */
++ comp_t ac_utime; /* User Time */
++ comp_t ac_stime; /* System Time */
++ comp_t ac_mem; /* Average Memory Usage */
++ comp_t ac_io; /* Chars Transferred */
++ comp_t ac_rw; /* Blocks Read or Written */
++ comp_t ac_minflt; /* Minor Pagefaults */
++ comp_t ac_majflt; /* Major Pagefaults */
++ comp_t ac_swaps; /* Number of Swaps */
++ char ac_comm[ACCT_COMM]; /* Command Name */
++};
++#endif
++
+
+ enum
+ {
+@@ -66,11 +92,17 @@
+ AXSIG = 0x10 /* Killed by a signal. */
+ };
+
++#if __BYTE_ORDER == __BIG_ENDIAN
++# define ACCT_BYTEORDER 0x80 /* Accounting file is big endian. */
++#else
++# define ACCT_BYTEORDER 0x00 /* Accounting file is little endian. */
++#endif
++
+ #define AHZ 100
+
+
+ /* Switch process accounting on and off. */
+-extern int acct (__const char *__filename) __THROW;
++extern int acct (const char *__filename) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/epoll.h uClibc-git/libc/sysdeps/linux/common/sys/epoll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/epoll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sys/epoll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -36,7 +36,6 @@
+ # define __EPOLL_PACKED
+ #endif
+
+-
+ enum EPOLL_EVENTS
+ {
+ EPOLLIN = 0x001,
+@@ -97,7 +96,7 @@
+ returned by epoll_create() should be closed with close(). */
+ extern int epoll_create (int __size) __THROW;
+
+-/* Same as epoll_create but with an FLAGS parameter. The unused SIZE
++/* Same as epoll_create but with a FLAGS parameter. The unused SIZE
+ parameter has been dropped. */
+ extern int epoll_create1 (int __flags) __THROW;
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/eventfd.h uClibc-git/libc/sysdeps/linux/common/sys/eventfd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/eventfd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sys/eventfd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
++/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,30 +12,20 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_EVENTFD_H
+ #define _SYS_EVENTFD_H 1
+
+ #include <stdint.h>
+
++/* Get the platform-dependent flags. */
++#include <bits/eventfd.h>
+
+ /* Type for event counter. */
+ typedef uint64_t eventfd_t;
+
+-/* Flags for signalfd. */
+-enum
+- {
+- EFD_SEMAPHORE = 1,
+-#define EFD_SEMAPHORE EFD_SEMAPHORE
+- EFD_CLOEXEC = 02000000,
+-#define EFD_CLOEXEC EFD_CLOEXEC
+- EFD_NONBLOCK = 04000
+-#define EFD_NONBLOCK EFD_NONBLOCK
+- };
+-
+
+ __BEGIN_DECLS
+
+@@ -43,6 +33,16 @@
+ value to COUNT. */
+ extern int eventfd (int __count, int __flags) __THROW;
+
++#if 0 /* not (yet) implemented in uClibc */
++
++/* Read event counter and possibly wait for events. */
++extern int eventfd_read (int __fd, eventfd_t *__value);
++
++/* Increment event counter. */
++extern int eventfd_write (int __fd, eventfd_t __value);
++
++#endif
++
+ __END_DECLS
+
+ #endif /* sys/eventfd.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/prctl.h uClibc-git/libc/sysdeps/linux/common/sys/prctl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/prctl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sys/prctl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PRCTL_H
+ #define _SYS_PRCTL_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/ptrace.h uClibc-git/libc/sysdeps/linux/common/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* `ptrace' debugger support interface. Linux version.
+- Copyright (C) 1996-1999,2000,2006,2007 Free Software Foundation, Inc.
++ Copyright (C) 1996-2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+@@ -125,13 +124,40 @@
+ #define PT_GETSIGINFO PTRACE_GETSIGINFO
+
+ /* Set new siginfo for process. */
+- PTRACE_SETSIGINFO = 0x4203
++ PTRACE_SETSIGINFO = 0x4203,
+ #define PT_SETSIGINFO PTRACE_SETSIGINFO
++
++ /* Get register content. */
++ PTRACE_GETREGSET = 0x4204,
++#define PTRACE_GETREGSET PTRACE_GETREGSET
++
++ /* Set register content. */
++ PTRACE_SETREGSET = 0x4205,
++#define PTRACE_SETREGSET PTRACE_SETREGSET
++
++ /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect
++ signal or group stop state. */
++ PTRACE_SEIZE = 0x4206,
++#define PTRACE_SEIZE PTRACE_SEIZE
++
++ /* Trap seized tracee. */
++ PTRACE_INTERRUPT = 0x4207,
++#define PTRACE_INTERRUPT PTRACE_INTERRUPT
++
++ /* Wait for next group event. */
++ PTRACE_LISTEN = 0x4208
+ };
+
+
++/* Flag for PTRACE_LISTEN. */
++enum __ptrace_flags
++{
++ PTRACE_SEIZE_DEVEL = 0x80000000
++};
++
+ /* Options set using PTRACE_SETOPTIONS. */
+-enum __ptrace_setoptions {
++enum __ptrace_setoptions
++{
+ PTRACE_O_TRACESYSGOOD = 0x00000001,
+ PTRACE_O_TRACEFORK = 0x00000002,
+ PTRACE_O_TRACEVFORK = 0x00000004,
+@@ -139,17 +165,20 @@
+ PTRACE_O_TRACEEXEC = 0x00000010,
+ PTRACE_O_TRACEVFORKDONE = 0x00000020,
+ PTRACE_O_TRACEEXIT = 0x00000040,
+- PTRACE_O_MASK = 0x0000007f
++ PTRACE_O_TRACESECCOMP = 0x00000080,
++ PTRACE_O_MASK = 0x000000ff
+ };
+
+ /* Wait extended result codes for the above trace options. */
+-enum __ptrace_eventcodes {
++enum __ptrace_eventcodes
++{
+ PTRACE_EVENT_FORK = 1,
+ PTRACE_EVENT_VFORK = 2,
+ PTRACE_EVENT_CLONE = 3,
+ PTRACE_EVENT_EXEC = 4,
+ PTRACE_EVENT_VFORK_DONE = 5,
+- PTRACE_EVENT_EXIT = 6
++ PTRACE_EVENT_EXIT = 6,
++ PTRAVE_EVENT_SECCOMP = 7
+ };
+
+ /* Perform process tracing functions. REQUEST is one of the values
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_fcntl64.c uClibc-git/libc/sysdeps/linux/common/__syscall_fcntl64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_fcntl64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__syscall_fcntl64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,14 +7,18 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+-#include <stdarg.h>
+-#include <fcntl.h>
++#include <bits/wordsize.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
++#if defined __NR_fcntl64 && __WORDSIZE == 32
++# include <stdarg.h>
++# include <cancel.h>
++# include <fcntl.h>
++
++# define __NR___fcntl64_nocancel __NR_fcntl64
++_syscall3(int, __NC(fcntl64), int, fd, int, cmd, long, arg)
+
+-#define __NR___syscall_fcntl64 __NR_fcntl64
+-static __inline__ _syscall3(int, __syscall_fcntl64, int, fd, int, cmd, long, arg)
+ int fcntl64(int fd, int cmd, ...)
+ {
+ long arg;
+@@ -24,7 +28,15 @@
+ arg = va_arg(list, long);
+ va_end(list);
+
+- return (__syscall_fcntl64(fd, cmd, arg));
++ if (SINGLE_THREAD_P || (cmd != F_SETLKW64))
++ return __NC(fcntl64)(fd, cmd, arg);
++# ifdef __NEW_THREADS
++ int oldtype = LIBC_CANCEL_ASYNC();
++ int result = __NC(fcntl64)(fd, cmd, arg);
++ LIBC_CANCEL_RESET(oldtype);
++ return result;
++# endif
+ }
+-libc_hidden_def(fcntl64)
++lt_strong_alias(fcntl64)
++lt_libc_hidden(fcntl64)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_fcntl.c uClibc-git/libc/sysdeps/linux/common/__syscall_fcntl.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_fcntl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__syscall_fcntl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,82 +10,61 @@
+
+ #include <sys/syscall.h>
+ #include <stdarg.h>
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
+-#endif
++#include <cancel.h> /* Must come before <fcntl.h>. */
+ #include <fcntl.h>
+ #include <bits/wordsize.h>
+
+-extern __typeof(fcntl) __libc_fcntl;
+-libc_hidden_proto(__libc_fcntl)
+-
+-int __fcntl_nocancel (int fd, int cmd, ...)
++int __NC(fcntl)(int fd, int cmd, long arg)
+ {
+- va_list ap;
+- void *arg;
+-
+- va_start (ap, cmd);
+- arg = va_arg (ap, void *);
+- va_end (ap);
+-
+-# if __WORDSIZE == 32
++#if __WORDSIZE == 32
+ if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) {
+-# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+- return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
+-# else
++# if (defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64) || !defined __NR_fcntl
++ return INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
++# else
+ __set_errno(ENOSYS);
+ return -1;
+-# endif
+- }
+ # endif
+- return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
++ }
++#endif
++
++#if defined __NR_fcntl
++ return INLINE_SYSCALL(fcntl, 3, fd, cmd, arg);
++#else
++ __set_errno(ENOSYS);
++ return -1;
++#endif
+ }
+-libc_hidden_def(__fcntl_nocancel)
+
+-int __libc_fcntl (int fd, int cmd, ...)
++int fcntl(int fd, int cmd, ...)
+ {
+ va_list ap;
+- void *arg;
++ long arg;
+
+ va_start (ap, cmd);
+- arg = va_arg (ap, void *);
++ arg = va_arg (ap, long);
+ va_end (ap);
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+ if (SINGLE_THREAD_P || (cmd != F_SETLKW && cmd != F_SETLKW64))
+-# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+- return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
+-# else
+- return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
+-# endif
+-
++#if defined __NR_fcntl
++ return __NC(fcntl)(fd, cmd, arg);
++#else
++ return INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
++#endif
++#ifdef __NEW_THREADS
+ int oldtype = LIBC_CANCEL_ASYNC ();
+-
+-# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+- int result = INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
+-# else
+- int result = INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
+-# endif
+-
++#if defined __NR_fcntl
++ int result = __NC(fcntl)(fd, cmd, arg);
++#else
++ int result = INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
++#endif
+ LIBC_CANCEL_RESET (oldtype);
+-
+ return result;
+-#else
+-# if __WORDSIZE == 32
+- if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) {
+-# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+- return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
+-# else
+- __set_errno(ENOSYS);
+- return -1;
+-# endif
+- }
+-# endif
+- return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
+ #endif
+ }
+-libc_hidden_def(__libc_fcntl)
+-
+-libc_hidden_proto(fcntl)
+-weak_alias(__libc_fcntl,fcntl)
+-libc_hidden_weak(fcntl)
++lt_strong_alias(fcntl)
++lt_libc_hidden(fcntl)
++#if defined __UCLIBC_HAS_LFS__ && !defined __NR_fcntl64 && __WORDSIZE == 32
++strong_alias_untyped(fcntl,fcntl64)
++lt_strong_alias(fcntl64)
++lt_libc_hidden(fcntl64)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_rt_sigaction.c uClibc-git/libc/sysdeps/linux/common/__syscall_rt_sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_rt_sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__syscall_rt_sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,11 +12,8 @@
+ #ifdef __NR_rt_sigaction
+ #include <signal.h>
+
+-int __syscall_rt_sigaction (int __signum, const struct sigaction *__act,
+- struct sigaction *__oldact, size_t __size);
+-
+ #define __NR___syscall_rt_sigaction __NR_rt_sigaction
+ _syscall4(int, __syscall_rt_sigaction, int, signum,
+- const struct sigaction *, act, struct sigaction *, oldact,
+- size_t, size)
++ const struct sigaction *, act, struct sigaction *, oldact,
++ size_t, size)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/syscalls.h uClibc-git/libc/sysdeps/linux/common/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/syscalls.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,24 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * Common header file for uClibc syscalls
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#define _LARGEFILE64_SOURCE
+-#include <features.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <endian.h>
+-
+-#undef __OPTIMIZE__
+-/* We absolutely do _NOT_ want interfaces silently
+- * being renamed under us or very bad things will happen... */
+-#ifdef __USE_FILE_OFFSET64
+-# undef __USE_FILE_OFFSET64
+-#endif
+-
+-#include <bits/kernel_types.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_sigaction.c uClibc-git/libc/sysdeps/linux/common/__syscall_sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/__syscall_sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/__syscall_sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ #ifndef __NR_rt_sigaction
+ #define __NR___syscall_sigaction __NR_sigaction
+ #include <signal.h>
+-int __syscall_sigaction (int __signum, const struct sigaction *__act, struct sigaction *__oldact) attribute_hidden;
+ _syscall3(int, __syscall_sigaction, int, signum, const struct sigaction *,
+- act, struct sigaction *, oldact)
++ act, struct sigaction *, oldact)
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sysdep.h uClibc-git/libc/sysdeps/linux/common/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/syscall.h>
+
+@@ -49,6 +48,8 @@
+ #define JUMPTARGET(sym) sym
+ #endif
+
++#define ret_ERRVAL ret
++
+ /* Macros to generate eh_frame unwind information. */
+ # ifdef HAVE_ASM_CFI_DIRECTIVES
+ # define cfi_sections(sect...) .cfi_sections sect
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/sysinfo.c uClibc-git/libc/sysdeps/linux/common/sysinfo.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/sysinfo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/sysinfo.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,5 +8,8 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <sys/sysinfo.h>
++
++#ifdef __NR_sysinfo
++# include <sys/sysinfo.h>
+ _syscall1(int, sysinfo, struct sysinfo *, info)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/tee.c uClibc-git/libc/sysdeps/linux/common/tee.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/tee.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/tee.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,9 +8,10 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <fcntl.h>
+
+-#ifdef __NR_tee
++#if defined __NR_tee && defined __USE_GNU
++# include <fcntl.h>
++
+ _syscall4(ssize_t, tee, int, __fdin, int, __fdout, size_t, __len,
+- unsigned int, __flags)
++ unsigned int, __flags)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/time.c uClibc-git/libc/sysdeps/linux/common/time.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/time.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/time.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,12 +9,11 @@
+
+ #include <sys/syscall.h>
+ #include <time.h>
+-#include <sys/time.h>
+-
+
+ #ifdef __NR_time
+ _syscall_noerr1(time_t, time, time_t *, t)
+ #else
++# include <sys/time.h>
+ time_t time(time_t * t)
+ {
+ time_t result;
+@@ -25,9 +24,8 @@
+ */
+ gettimeofday(&tv, NULL);
+ result = (time_t) tv.tv_sec;
+- if (t != NULL) {
++ if (t != NULL)
+ *t = result;
+- }
+ return result;
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/times.c uClibc-git/libc/sysdeps/linux/common/times.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/times.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/times.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,5 @@
+ #include <sys/syscall.h>
+ #include <sys/times.h>
+
+-
+ _syscall_noerr1(clock_t, times, struct tms *, buf)
+ libc_hidden_def(times)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/truncate64.c uClibc-git/libc/sysdeps/linux/common/truncate64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/truncate64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/truncate64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,49 +7,35 @@
+ * and on 32 bit machines this sends things into the kernel as
+ * two 32-bit arguments (high and low 32 bits of length) that
+ * are ordered based on endianess. It turns out endian.h has
+- * just the macro we need to order things, __LONG_LONG_PAIR.
++ * just the macro we need to order things, OFF64_HI_LO.
+ */
+
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
++#include <unistd.h>
+
+-#if defined __UCLIBC_HAS_LFS__
+-
+-#if defined __NR_truncate64
+-
+-#if __WORDSIZE == 64
++#ifdef __NR_truncate64
++# include <bits/wordsize.h>
+
+-/* For a 64 bit machine, life is simple... */
++# if __WORDSIZE == 64
+ _syscall2(int, truncate64, const char *, path, __off64_t, length)
+-
+-#elif __WORDSIZE == 32
+-
+-/* The exported truncate64 function. */
++# elif __WORDSIZE == 32
++# include <endian.h>
++# include <stdint.h>
+ int truncate64(const char * path, __off64_t length)
+ {
+- uint32_t low = length & 0xffffffff;
+- uint32_t high = length >> 32;
+-#if defined(__UCLIBC_TRUNCATE64_HAS_4_ARGS__)
+- return INLINE_SYSCALL(truncate64, 4, path, 0,
+- __LONG_LONG_PAIR(high, low));
+-#else
+- return INLINE_SYSCALL(truncate64, 3, path,
+- __LONG_LONG_PAIR(high, low));
+-#endif
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++ return INLINE_SYSCALL(truncate64, 4, path, 0, OFF64_HI_LO(length));
++# else
++ return INLINE_SYSCALL(truncate64, 3, path, OFF64_HI_LO(length));
++# endif
+ }
++# else
++# error Your machine is not 64 bit nor 32 bit, I am dazed and confused.
++# endif
+
+-#else /* __WORDSIZE */
+-#error Your machine is not 64 bit nor 32 bit, I am dazed and confused.
+-#endif /* __WORDSIZE */
+-
+-#else /* __NR_truncate64 */
+-
+-
++#else
++# include <errno.h>
+ int truncate64(const char * path, __off64_t length)
+ {
+ __off_t x = (__off_t) length;
+@@ -64,5 +50,4 @@
+ }
+
+ #endif /* __NR_truncate64 */
+-
+-#endif /* __UCLIBC_HAS_LFS__ */
++libc_hidden_def(truncate64)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/truncate.c uClibc-git/libc/sysdeps/linux/common/truncate.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/truncate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/truncate.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,25 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
++#if defined(__NR_truncate64) && !defined(__NR_truncate)
++# include <endian.h>
++# include <stdint.h>
+
++int truncate(const char *path, __off_t length)
++{
++# if defined __UCLIBC_HAS_LFS
++ return truncate64(path, length);
++# elif __WORDSIZE == 32
++# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__)
++ return INLINE_SYSCALL(truncate64, 4, path, 0, OFF_HI_LO(length));
++# else
++ return INLINE_SYSCALL(truncate64, 3, path, OFF_HI_LO(length));
++# endif
++# endif
++}
++libc_hidden_def(truncate);
++
++#else
+ _syscall2(int, truncate, const char *, path, __off_t, length)
+ libc_hidden_def(truncate)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/umask.c uClibc-git/libc/sysdeps/linux/common/umask.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/umask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/umask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,10 +10,4 @@
+ #include <sys/syscall.h>
+ #include <sys/stat.h>
+
+-#define __NR___syscall_umask __NR_umask
+-static __inline__ _syscall1(__kernel_mode_t, __syscall_umask, __kernel_mode_t, mode)
+-
+-mode_t umask(mode_t mode)
+-{
+- return __syscall_umask(mode);
+-}
++_syscall_noerr1(mode_t, umask, mode_t, mode)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/umount2.c uClibc-git/libc/sysdeps/linux/common/umount2.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/umount2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/umount2.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,9 +9,8 @@
+
+ #include <sys/syscall.h>
+
+-#if defined __USE_GNU
+-#include <sys/mount.h>
+-#ifdef __NR_umount2 /* Old kernels don't have umount2 */
++#if defined __UCLIBC_LINUX_SPECIFIC__ && defined __NR_umount2
++# include <sys/mount.h>
+ _syscall2(int, umount2, const char *, special_file, int, flags)
+-#endif
++libc_hidden_def(umount2)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/umount.c uClibc-git/libc/sysdeps/linux/common/umount.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/umount.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/umount.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,24 +9,15 @@
+
+ #include <sys/syscall.h>
+
+-#if defined __USE_GNU
+ #include <sys/mount.h>
+-
+-/* arch provides umount() syscall */
+ #ifdef __NR_umount
+-
+ _syscall1(int, umount, const char *, specialfile)
+-
+-/* arch provides umount2() syscall */
+ #elif defined __NR_umount2
+-
+-# define __NR___syscall_umount2 __NR_umount2
+-static __inline__ _syscall2(int, __syscall_umount2, const char *, special_file, int, flags)
+-
++# ifndef __UCLIBC_LINUX_SPECIFIC__
++static __always_inline _syscall2(int, umount2, const char *, special_file, int, flags)
++# endif
+ int umount(const char *special_file)
+ {
+- return (__syscall_umount2(special_file, 0));
++ return umount2(special_file, 0);
+ }
+-
+-#endif
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/uname.c uClibc-git/libc/sysdeps/linux/common/uname.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/uname.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/uname.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,5 @@
+ #include <sys/syscall.h>
+ #include <sys/utsname.h>
+
+-
+ _syscall1(int, uname, struct utsname *, buf)
+ libc_hidden_def(uname)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/unlinkat.c uClibc-git/libc/sysdeps/linux/common/unlinkat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/unlinkat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/unlinkat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #ifdef __NR_unlinkat
+ _syscall3(int, unlinkat, int, fd, const char *, file, int, flag)
++libc_hidden_def(unlinkat)
+ #else
+ /* should add emulation with unlink() and /proc/self/fd/ ... */
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/unlink.c uClibc-git/libc/sysdeps/linux/common/unlink.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/unlink.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/unlink.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,6 +10,13 @@
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
+-
++#if defined __NR_unlinkat && !defined __NR_unlink
++# include <fcntl.h>
++int unlink(const char *pathname)
++{
++ return unlinkat(AT_FDCWD, pathname, 0);
++}
++#else
+ _syscall1(int, unlink, const char *, pathname)
++#endif
+ libc_hidden_def(unlink)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/unwind.h uClibc-git/libc/sysdeps/linux/common/unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This is derived from the C++ ABI for IA-64. Where we diverge
+ for cross-architecture compatibility are noted with "@@@". */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/ustat.c uClibc-git/libc/sysdeps/linux/common/ustat.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/ustat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/ustat.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,16 +11,18 @@
+ #include <sys/ustat.h>
+ #include <sys/sysmacros.h>
+
+-#define __NR___syscall_ustat __NR_ustat
++#ifdef __NR_ustat
++# define __NR___syscall_ustat __NR_ustat
+ /* Kernel's fs/super.c defines this:
+ * long sys_ustat(unsigned dev, struct ustat __user * ubuf),
+ * thus we use unsigned, not __kernel_dev_t.
+ */
+-static __inline__ _syscall2(int, __syscall_ustat,
+- unsigned, kdev_t,
+- struct ustat *, ubuf)
++static __always_inline _syscall2(int, __syscall_ustat,
++ unsigned, kdev_t,
++ struct ustat *, ubuf)
+
+ int ustat(dev_t dev, struct ustat *ubuf)
+ {
+ return __syscall_ustat(dev, ubuf);
+ }
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/utime.c uClibc-git/libc/sysdeps/linux/common/utime.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/utime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/utime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -10,13 +10,33 @@
+ #include <sys/syscall.h>
+ #include <utime.h>
+
++#if defined __NR_utimensat && !defined __NR_utime
++# include <fcntl.h>
++# include <stddef.h>
+
+-#ifdef __NR_utime
+-_syscall2(int, utime, const char *, file, const struct utimbuf *, times)
+-#else
+-#include <stdlib.h>
+-#include <sys/time.h>
++int utime(const char *file, const struct utimbuf *times)
++{
++ struct timespec tspecs[2], *ts;
++
++ if (times) {
++ ts = tspecs;
++ ts[0].tv_sec = times->actime;
++ ts[0].tv_nsec = 0;
++ ts[1].tv_sec = times->modtime;
++ ts[1].tv_nsec = 0;
++ } else {
++ ts = NULL;
++ }
+
++ return utimensat(AT_FDCWD, file, ts, 0);
++}
++
++#elif defined(__NR_utime)
++_syscall2(int, utime, const char *, file, const struct utimbuf *, times)
++#elif defined __NR_utimes /* alpha || ia64 */
++# define __need_NULL
++# include <stddef.h>
++# include <sys/time.h>
+
+ int utime(const char *file, const struct utimbuf *times)
+ {
+@@ -25,11 +45,15 @@
+ if (times != NULL) {
+ timevals[0].tv_usec = 0L;
+ timevals[1].tv_usec = 0L;
+- timevals[0].tv_sec = (long int) times->actime;
+- timevals[1].tv_sec = (long int) times->modtime;
++ timevals[0].tv_sec = (time_t) times->actime;
++ timevals[1].tv_sec = (time_t) times->modtime;
+ }
+ return utimes(file, times ? timevals : NULL);
+ }
+ #endif
++
++#if (defined __NR_utimensat && !defined __NR_utime) || \
++ defined __NR_utime || defined __NR_utimes
+ link_warning(utime, "the use of OBSOLESCENT `utime' is discouraged, use `utimes'")
+ libc_hidden_def(utime)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/utimes.c uClibc-git/libc/sysdeps/linux/common/utimes.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/utimes.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/utimes.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,15 +8,33 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <utime.h>
+ #include <sys/time.h>
+
++#if defined __NR_utimensat && !defined __NR_utimes
++# include <fcntl.h>
++# include <stddef.h>
++int utimes(const char *file, const struct timeval tvp[2])
++{
++ struct timespec ts[2], *times;
++ if (tvp) {
++ times = ts;
++ times[0].tv_sec = tvp[0].tv_sec;
++ times[0].tv_nsec = tvp[0].tv_usec * 1000;
++ times[1].tv_sec = tvp[1].tv_sec;
++ times[1].tv_nsec = tvp[1].tv_usec * 1000;
++ } else {
++ times = NULL;
++ }
+
+-#ifdef __NR_utimes
+-_syscall2(int, utimes, const char *, file, const struct timeval *, tvp)
+-#else
+-#include <stdlib.h>
++ return utimensat(AT_FDCWD, file, times, 0);
++}
+
++#elif defined __NR_utimes
++_syscall2(int, utimes, const char *, file, const struct timeval *, tvp)
++#elif defined __NR_utime
++# define __need_NULL
++# include <stddef.h>
++# include <utime.h>
+
+ int utimes(const char *file, const struct timeval tvp[2])
+ {
+@@ -32,4 +50,7 @@
+ return utime(file, times);
+ }
+ #endif
++
++#if defined __NR_utimensat || defined __NR_utimes || defined __NR_utime
+ libc_hidden_def(utimes)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/vfork.c uClibc-git/libc/sysdeps/linux/common/vfork.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/vfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/vfork.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,30 +4,37 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <unistd.h>
+-#include <sys/types.h>
+ #include <sys/syscall.h>
+
++#if (defined __NR_vfork || defined __NR_clone || (defined __ARCH_USE_MMU__ && defined __NR_fork)) && (defined __USE_BSD || defined __USE_XOPEN_EXTENDED)
++# include <unistd.h>
+ extern __typeof(vfork) __vfork attribute_hidden;
+
+-#ifdef __NR_vfork
++# if defined __NR_clone && !defined __NR_vfork
++# include <signal.h>
++# include <sys/types.h>
+
+-# define __NR___vfork __NR_vfork
+-_syscall0(pid_t, __vfork)
++pid_t __vfork(void)
++{
++ pid_t pid = INLINE_SYSCALL(clone, 4, SIGCHLD,
++ NULL, NULL, NULL);
+
+-weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++ if (pid < 0)
++ return -1;
+
+-#elif defined __ARCH_USE_MMU__ && defined __NR_fork
++ return pid;
++}
+
++# elif defined __NR_vfork
++# define __NR___vfork __NR_vfork
++_syscall0(pid_t, __vfork)
++# else
+ /* Trivial implementation for arches that lack vfork */
+-
+ pid_t __vfork(void)
+ {
+ return fork();
+ }
+-
+-weak_alias(__vfork,vfork)
++# endif
++strong_alias(__vfork,vfork)
+ libc_hidden_weak(vfork)
+-
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/vmsplice.c uClibc-git/libc/sysdeps/linux/common/vmsplice.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/vmsplice.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/vmsplice.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,9 +8,10 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <fcntl.h>
+
+-#ifdef __NR_vmsplice
++#if defined __NR_vmsplice && defined __USE_GNU
++# include <fcntl.h>
++
+ _syscall4(ssize_t, vmsplice, int, __fdout, const struct iovec *, __iov,
+- size_t, __count, unsigned int, __flags)
++ size_t, __count, unsigned int, __flags)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/wait3.c uClibc-git/libc/sysdeps/linux/common/wait3.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/wait3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/wait3.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,20 +5,12 @@
+ */
+
+ #include <sys/syscall.h>
+-#include <sys/types.h>
+-#include <sys/wait.h>
+-#include <sys/resource.h>
+
+-#if defined __USE_BSD
++#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
++# include <sys/wait.h>
+
+-
+-/* Wait for a child to exit. When one does, put its status in *STAT_LOC and
+- * return its process ID. For errors return (pid_t) -1. If USAGE is not nil,
+- * store information about the child's resource usage (as a `struct rusage')
+- * there. If the WUNTRACED bit is set in OPTIONS, return status for stopped
+- * children; otherwise don't. */
+-pid_t wait3 (__WAIT_STATUS stat_loc, int options, struct rusage * usage)
++pid_t wait3(__WAIT_STATUS stat_loc, int options, struct rusage *usage)
+ {
+- return wait4 (WAIT_ANY, stat_loc, options, usage);
++ return __wait4_nocancel(WAIT_ANY, stat_loc, options, usage);
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/wait4.c uClibc-git/libc/sysdeps/linux/common/wait4.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/wait4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/wait4.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,18 +8,16 @@
+ */
+
+ #include <sys/syscall.h>
+-#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+ #include <sys/wait.h>
+-#include <sys/resource.h>
+
++# define __NR___syscall_wait4 __NR_wait4
++static __always_inline _syscall4(int, __syscall_wait4, __kernel_pid_t, pid,
++ int *, status, int, opts, struct rusage *, rusage)
+
+-#define __NR___syscall_wait4 __NR_wait4
+-static __inline__ _syscall4(int, __syscall_wait4, __kernel_pid_t, pid,
+- int *, status, int, opts, struct rusage *, rusage)
+-
+-pid_t wait4(pid_t pid, int *status, int opts, struct rusage *rusage)
++pid_t __wait4_nocancel(pid_t pid, int *status, int opts, struct rusage *rusage)
+ {
+- return (__syscall_wait4(pid, status, opts, rusage));
++ return __syscall_wait4(pid, status, opts, rusage);
+ }
+-libc_hidden_def(wait4)
++#ifdef __USE_BSD
++strong_alias(__wait4_nocancel,wait4)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/wait.c uClibc-git/libc/sysdeps/linux/common/wait.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/wait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/wait.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,41 +4,11 @@
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+-#include <stdlib.h>
+-#include <syscall.h>
+-#include <sys/types.h>
+ #include <sys/wait.h>
+-#include <sys/resource.h>
++#include <cancel.h>
+
+-extern __typeof(wait) __libc_wait;
+-/* Wait for a child to die. When one does, put its status in *STAT_LOC
+- * and return its process ID. For errors, return (pid_t) -1. */
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <errno.h>
+-#include <sysdep-cancel.h>
+-
+-pid_t attribute_hidden
+-__libc_wait (__WAIT_STATUS_DEFN stat_loc)
+-{
+- if (SINGLE_THREAD_P)
+- return INLINE_SYSCALL (wait4, 4, WAIT_ANY, stat_loc, 0,
+- (struct rusage *) NULL);
+-
+- int oldtype = LIBC_CANCEL_ASYNC ();
+-
+- pid_t result = INLINE_SYSCALL (wait4, 4, WAIT_ANY, stat_loc, 0,
+- (struct rusage *) NULL);
+-
+- LIBC_CANCEL_RESET (oldtype);
+-
+- return result;
+-}
+-#else
+-/* Wait for a child to die. When one does, put its status in *STAT_LOC
+- * and return its process ID. For errors, return (pid_t) -1. */
+-__pid_t __libc_wait (__WAIT_STATUS_DEFN stat_loc)
++static pid_t __NC(wait)(__WAIT_STATUS_DEFN stat_loc)
+ {
+- return wait4 (WAIT_ANY, stat_loc, 0, (struct rusage *) NULL);
++ return __wait4_nocancel(WAIT_ANY, stat_loc, 0, (struct rusage *)NULL);
+ }
+-#endif
+-weak_alias(__libc_wait,wait)
++CANCELLABLE_SYSCALL(pid_t, wait, (__WAIT_STATUS_DEFN stat_loc), (stat_loc))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/waitid.c uClibc-git/libc/sysdeps/linux/common/waitid.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/waitid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/waitid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,43 +8,19 @@
+ #include <features.h>
+
+ #if defined __USE_SVID || defined __USE_XOPEN
+-# include <string.h>
+-# include <sys/types.h>
+-# include <sys/wait.h>
+-# include <sys/syscall.h>
+-
+-# ifdef __NR_waitid
+-
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-# include <sysdep-cancel.h>
+-# else
+-# define SINGLE_THREAD_P 1
+-# endif
+
+-/* The waitid() POSIX interface takes 4 arguments, but the kernel function
+- * actually takes 5. The fifth is a pointer to struct rusage. Make sure
+- * we pass NULL rather than letting whatever was in the register bleed up.
+- */
+-#define __NR_waitid5 __NR_waitid
+-static __always_inline
+-_syscall5(int, waitid5, idtype_t, idtype, id_t, id, siginfo_t*, infop,
+- int, options, struct rusage*, ru)
+-# endif
++#include <sys/syscall.h>
++#include <sys/wait.h>
++#include <cancel.h>
++#ifndef __NR_waitid
++# include <string.h>
++#endif
+
+-int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options)
++static int __NC(waitid)(idtype_t idtype, id_t id, siginfo_t *infop, int options)
+ {
+-# ifdef __NR_waitid
+- if (SINGLE_THREAD_P)
+- return waitid5(idtype, id, infop, options, NULL);
+-
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = waitid5(idtype, id, infop, options, NULL);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-# endif
+-
+-# elif defined __NR_waitpid
++#ifdef __NR_waitid
++ return INLINE_SYSCALL(waitid, 5, idtype, id, infop, options, NULL);
++#else
+ switch (idtype) {
+ case P_PID:
+ if (id <= 0)
+@@ -65,17 +41,17 @@
+ }
+
+ memset(infop, 0, sizeof *infop);
+- infop->si_pid = waitpid(id, &infop->si_status, options
+-# ifdef WEXITED
++ infop->si_pid = __NC(waitpid)(id, &infop->si_status, options
++# ifdef WEXITED
+ &~ WEXITED
+-# endif
++# endif
+ );
+ if (infop->si_pid < 0)
+ return infop->si_pid;
+ return 0;
+-# else
+- __set_errno(ENOSYS);
+- return -1;
+-# endif
++#endif
+ }
++CANCELLABLE_SYSCALL(int, waitid, (idtype_t idtype, id_t id, siginfo_t *infop, int options),
++ (idtype, id, infop, options))
++
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/waitpid.c uClibc-git/libc/sysdeps/linux/common/waitpid.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/waitpid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/waitpid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,32 +6,16 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <stdlib.h>
+-#include <sys/types.h>
+ #include <sys/wait.h>
+-#include <sys/resource.h>
++#include <cancel.h>
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include "sysdep-cancel.h"
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+-libc_hidden_proto(wait4)
+-
+-extern __typeof(waitpid) __libc_waitpid;
+-__pid_t __libc_waitpid(__pid_t pid, int *wait_stat, int options)
++pid_t __NC(waitpid)(pid_t pid, int *wait_stat, int options)
+ {
+- if (SINGLE_THREAD_P)
+- return wait4(pid, wait_stat, options, NULL);
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- int result = wait4(pid, wait_stat, options, NULL);
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
++#if 1 /* kernel/exit.c says to avoid waitpid syscall */
++ return __wait4_nocancel(pid, wait_stat, options, NULL);
++#else
++ return INLINE_SYSCALL(waitpid, 3, pid, wait_stat, options);
+ #endif
+ }
+-libc_hidden_proto(waitpid)
+-weak_alias(__libc_waitpid,waitpid)
+-libc_hidden_weak(waitpid)
++CANCELLABLE_SYSCALL(pid_t, waitpid, (pid_t pid, int *wait_stat, int options), (pid, wait_stat, options))
++lt_libc_hidden(waitpid)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/write.c uClibc-git/libc/sysdeps/linux/common/write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/write.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,17 +9,11 @@
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
++#include <cancel.h>
+
+-_syscall3(ssize_t, write, int, fd, const __ptr_t, buf, size_t, count)
+-#ifndef __LINUXTHREADS_OLD__
+-libc_hidden_def(write)
+-#else
+-libc_hidden_weak(write)
+-strong_alias(write,__libc_write)
+-#endif
++#define __NR___write_nocancel __NR_write
++_syscall3(ssize_t, __NC(write), int, fd, const void *, buf, size_t, count)
+
+-#if 0
+-/* Stupid libgcc.a from gcc 2.95.x uses __write in pure.o
+- * which is a blatant GNU libc-ism... */
+-strong_alias(write,__write)
+-#endif
++CANCELLABLE_SYSCALL(ssize_t, write, (int fd, const void *buf, size_t count),
++ (fd, buf, count))
++lt_libc_hidden(write)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/writev.c uClibc-git/libc/sysdeps/linux/common/writev.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/writev.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/writev.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,42 +9,20 @@
+
+ #include <sys/syscall.h>
+ #include <sys/uio.h>
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <errno.h>
+-#include <sysdep-cancel.h>
++#include <cancel.h>
+
+ /* We should deal with kernel which have a smaller UIO_FASTIOV as well
+ as a very big count. */
+-static ssize_t __writev (int fd, const struct iovec *vector, int count)
++static ssize_t __NC(writev)(int fd, const struct iovec *vector, int count)
+ {
+- ssize_t bytes_written;
+-
+- bytes_written = INLINE_SYSCALL (writev, 3, fd, vector, count);
+-
+- if (bytes_written >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
+- return bytes_written;
+-
+- /* glibc tries again, but we do not. */
+- /* return __atomic_writev_replacement (fd, vector, count); */
+-
+- return -1;
+-}
+-
+-ssize_t writev (int fd, const struct iovec *vector, int count)
+-{
+- if (SINGLE_THREAD_P)
+- return __writev (fd, vector, count);
+-
+- int oldtype = LIBC_CANCEL_ASYNC ();
++ ssize_t bytes_written = INLINE_SYSCALL(writev, 3, fd, vector, count);
+
+- ssize_t result = __writev (fd, vector, count);
++ if (bytes_written >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
++ return bytes_written;
+
+- LIBC_CANCEL_RESET (oldtype);
++ /* glibc tries again, but we do not. */
++ /* return __atomic_writev_replacement (fd, vector, count); */
+
+- return result;
++ return -1;
+ }
+-#else
+-_syscall3(ssize_t, writev, int, filedes, const struct iovec *, vector,
+- int, count)
+-#endif
++CANCELLABLE_SYSCALL(ssize_t, writev, (int fd, const struct iovec *vector, int count), (fd, vector, count))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/xstatconv.c uClibc-git/libc/sysdeps/linux/common/xstatconv.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/xstatconv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/xstatconv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
+
+ Modified for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+
+-#include <sys/syscall.h>
+ #include <sys/stat.h>
+ #include <string.h>
+ #include "xstatconv.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/xstatconv.h uClibc-git/libc/sysdeps/linux/common/xstatconv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common/xstatconv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/common/xstatconv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
+
+ Modified for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+@@ -23,11 +22,14 @@
+ /* Pull in whatever this particular arch's kernel thinks the kernel version of
+ * struct stat should look like. It turns out that each arch has a different
+ * opinion on the subject, and different kernel revs use different names... */
++#include <features.h>
+ #include <bits/kernel_stat.h>
+
++#ifdef __ARCH_HAS_DEPRECATED_SYSCALLS__
+ extern void __xstat_conv(struct kernel_stat *kbuf, struct stat *buf) attribute_hidden;
+ extern void __xstat32_conv(struct kernel_stat64 *kbuf, struct stat *buf) attribute_hidden;
+ #if defined __UCLIBC_HAS_LFS__
+ extern void __xstat64_conv(struct kernel_stat64 *kbuf, struct stat64 *buf) attribute_hidden;
+ #endif
++#endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/align64bit.h uClibc-git/libc/sysdeps/linux/common-generic/bits/align64bit.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/align64bit.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common-generic/bits/align64bit.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,17 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _ALIGN_64_BIT_H
++#define _ALIGN_64_BIT_H
++
++/* Simple macro for getting the 64-bit struct arch alignment */
++
++struct __longlong_aligned { long long x; };
++
++#define __ARCH_64BIT_ALIGNMENT__ \
++ __attribute__((aligned(__alignof__(struct __longlong_aligned))))
++
++#endif /* bits/align64bit.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/dirent.h uClibc-git/libc/sysdeps/linux/common-generic/bits/dirent.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/dirent.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common-generic/bits/dirent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,53 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _DIRENT_H
++# error "Never use <bits/dirent.h> directly; include <dirent.h> instead."
++#endif
++
++#include <bits/align64bit.h>
++#include <endian.h>
++
++struct dirent
++ {
++#ifndef __USE_FILE_OFFSET64
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++ __U32_TYPE d_ino;
++ __U32_TYPE __pad1;
++ __S32_TYPE d_off;
++ __S32_TYPE __pad2;
++# else
++ __U32_TYPE __pad1;
++ __U32_TYPE d_ino;
++ __S32_TYPE __pad2;
++ __S32_TYPE d_off;
++# endif /* __LITTLE_ENDIAN */
++#else
++ __U64_TYPE d_ino;
++ __S64_TYPE d_off;
++#endif
++ unsigned short int d_reclen;
++ unsigned char d_type;
++ char d_name[256]; /* We must not include limits.h! */
++ } __ARCH_64BIT_ALIGNMENT__;
++
++#ifdef __USE_LARGEFILE64
++struct dirent64
++ {
++ __U64_TYPE d_ino;
++ __S64_TYPE d_off;
++ unsigned short int d_reclen;
++ unsigned char d_type;
++ char d_name[256]; /* We must not include limits.h! */
++ };
++#endif
++
++#define d_fileno d_ino /* Backwards compatibility. */
++
++#undef _DIRENT_HAVE_D_NAMLEN
++#define _DIRENT_HAVE_D_RECLEN
++#define _DIRENT_HAVE_D_OFF
++#define _DIRENT_HAVE_D_TYPE
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/kernel_stat.h uClibc-git/libc/sysdeps/linux/common-generic/bits/kernel_stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/kernel_stat.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common-generic/bits/kernel_stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _BITS_STAT_STRUCT_H
++#define _BITS_STAT_STRUCT_H
++
++#include <sys/stat.h>
++
++/*
++ * The stat structure defined in
++ * libc/sysdeps/linux/common-generic/bits/stat.h
++ * is the same as the kernel one for new architectures
++ *
++ * For the common-generic ABI we really don't need this file at all
++ * However that requires more #ifndef in relevant wrappers,
++ * further uglifying them
++ */
++#if defined __UCLIBC_HAS_LFS__
++#define kernel_stat64 stat64
++#else
++#define kernel_stat64 stat
++#endif
++
++#endif /* _BITS_STAT_STRUCT_H */
++
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/statfs.h uClibc-git/libc/sysdeps/linux/common-generic/bits/statfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/statfs.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common-generic/bits/statfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,78 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _SYS_STATFS_H
++# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
++#endif
++
++#include <endian.h>
++#include <bits/align64bit.h>
++#include <bits/types.h>
++
++
++struct statfs
++ {
++ __U32_TYPE f_type;
++ __U32_TYPE f_bsize;
++#ifndef __USE_FILE_OFFSET64
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++ __U32_TYPE f_blocks;
++ __U32_TYPE __pad1;
++ __U32_TYPE f_bfree;
++ __U32_TYPE __pad2;
++ __U32_TYPE f_bavail;
++ __U32_TYPE __pad3;
++ __U32_TYPE f_files;
++ __U32_TYPE __pad4;
++ __U32_TYPE f_ffree;
++ __U32_TYPE __pad5;
++# else
++ __U32_TYPE __pad1;
++ __U32_TYPE f_blocks;
++ __U32_TYPE __pad2;
++ __U32_TYPE f_bfree;
++ __U32_TYPE __pad3;
++ __U32_TYPE f_bavail;
++ __U32_TYPE __pad4;
++ __U32_TYPE f_files;
++ __U32_TYPE __pad5;
++ __U32_TYPE f_ffree;
++# endif /* __LITTLE_ENDIAN */
++#else
++ __U64_TYPE f_blocks;
++ __U64_TYPE f_bfree;
++ __U64_TYPE f_bavail;
++ __U64_TYPE f_files;
++ __U64_TYPE f_ffree;
++#endif /* __USE_FILE_OFFSET64 */
++ __fsid_t f_fsid;
++ __U32_TYPE f_namelen;
++ __U32_TYPE f_frsize;
++ __U32_TYPE f_flags;
++ __U32_TYPE f_spare[4];
++ } __ARCH_64BIT_ALIGNMENT__;
++
++#ifdef __USE_LARGEFILE64
++struct statfs64
++ {
++ __U32_TYPE f_type;
++ __U32_TYPE f_bsize;
++ __U64_TYPE f_blocks;
++ __U64_TYPE f_bfree;
++ __U64_TYPE f_bavail;
++ __U64_TYPE f_files;
++ __U64_TYPE f_ffree;
++ __fsid_t f_fsid;
++ __U32_TYPE f_namelen;
++ __U32_TYPE f_frsize;
++ __U32_TYPE f_flags;
++ __U32_TYPE f_spare[4];
++ };
++#endif
++
++/* Tell code we have these members. */
++#define _STATFS_F_NAMELEN
++#define _STATFS_F_FRSIZE
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/stat.h uClibc-git/libc/sysdeps/linux/common-generic/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/common-generic/bits/stat.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/common-generic/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,195 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _SYS_STAT_H
++# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
++#endif
++
++#include <bits/align64bit.h>
++#include <endian.h>
++
++/* Versions of the `struct stat' data structure. */
++#define _STAT_VER_LINUX_OLD 1
++#define _STAT_VER_KERNEL 1
++#define _STAT_VER_SVR4 2
++#define _STAT_VER_LINUX 3
++#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
++
++/* Versions of the `xmknod' interface. */
++#define _MKNOD_VER_LINUX 1
++#define _MKNOD_VER_SVR4 2
++#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
++
++/*
++ * For 32-bit architectures, this struct is similar to the stat64 but it
++ * uses 32-bit members along with 32-bit padding. For 64-bit architectures
++ * this struct is exactly the same with the stat64 one
++ */
++struct stat
++ {
++#ifndef __USE_FILE_OFFSET64
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++ unsigned long st_dev; /* Device. */
++ unsigned long __pad1;
++ unsigned long st_ino; /* 32bit file serial number. */
++ unsigned long __pad2;
++ unsigned int st_mode; /* File mode. */
++ unsigned int st_nlink; /* Link count. */
++ unsigned int st_uid; /* User ID of the file's owner. */
++ unsigned int st_gid; /* Group ID of the file's group.*/
++ unsigned long st_rdev; /* Device number, if device. */
++ unsigned long __pad3;
++ unsigned long long __pad4;
++ long st_size; /* SIze of file, in bytes. */
++ long __pad5;
++ int st_blksize; /* Optimal block size for I/O. */
++ int __pad6;
++ long st_blocks; /* Number 512-byte blocks allocated */
++ long __pad7;
++# else
++ unsigned long __pad1;
++ unsigned long st_dev; /* Device. */
++ unsigned long __pad2;
++ unsigned long st_ino; /* 32bit file serial number. */
++ unsigned int st_mode; /* File mode. */
++ unsigned int st_nlink; /* Link count. */
++ unsigned int st_uid; /* User ID of the file's owner. */
++ unsigned int st_gid; /* Group ID of the file's group.*/
++ unsigned long __pad3;
++ unsigned long st_rdev; /* Device number, if device. */
++ unsigned long long __pad4;
++ long __pad5;
++ long st_size; /* Size of file, in bytes. */
++ int st_blksize; /* Optimal block size for I/O. */
++ int __pad6;
++ long __pad7;
++ long st_blocks; /* Number 512-byte blocks allocated */
++# endif /* __LITTLE_ENDIAN */
++#else
++ unsigned long long st_dev; /* Device. */
++ unsigned long long st_ino; /* 32bit file serial number. */
++ unsigned int st_mode; /* File mode. */
++ unsigned int st_nlink; /* Link count. */
++ unsigned int st_uid; /* User ID of the file's owner. */
++ unsigned int st_gid; /* Group ID of the file's group.*/
++ unsigned long long st_rdev; /* Device number, if device. */
++ unsigned long long _pad1;
++ long long st_size; /* SIze of file, in bytes. */
++ int st_blksize; /* Optimal block size for I/O. */
++ int __pad2;
++ long long st_blocks; /* Number 512-byte blocks allocated */
++#endif
++#ifdef __USE_MISC
++ /* Nanosecond resolution timestamps are stored in a format
++ equivalent to 'struct timespec'. This is the type used
++ whenever possible but the Unix namespace rules do not allow the
++ identifier 'timespec' to appear in the <sys/stat.h> header.
++ Therefore we have to handle the use of this header in strictly
++ standard-compliant sources special. */
++ struct timespec st_atim; /* Time of last access. */
++ struct timespec st_mtim; /* Time of last modification. */
++ struct timespec st_ctim; /* Time of last status change. */
++# define st_atime st_atim.tv_sec /* Backward compatibility. */
++# define st_mtime st_mtim.tv_sec
++# define st_ctime st_ctim.tv_sec
++#else
++# ifndef __USE_FILE_OFFSET64
++ long st_atime; /* Time of last access. */
++ unsigned long st_atime_nsec;
++ long st_mtime; /* Time of last modification. */
++ unsigned long st_mtime_nsec;
++ long st_ctime; /* Time of last status change. */
++ unsigned long st_ctime_nsec;
++# else
++ int st_atime; /* Time of last access. */
++ unsigned int st_atime_nsec;
++ int st_mtime; /* Time of last modification. */
++ unsigned int st_mtime_nsec;
++ int st_ctime; /* Time of last status change. */
++ unsigned int st_ctime_nsec;
++# endif
++#endif
++ unsigned int __unused4;
++ unsigned int __unused5;
++ } __ARCH_64BIT_ALIGNMENT__;
++
++
++#ifdef __USE_LARGEFILE64
++struct stat64
++ {
++ unsigned long long st_dev; /* Device. */
++ unsigned long long st_ino; /* 32bit file serial number. */
++ unsigned int st_mode; /* File mode. */
++ unsigned int st_nlink; /* Link count. */
++ unsigned int st_uid; /* User ID of the file's owner. */
++ unsigned int st_gid; /* Group ID of the file's group.*/
++ unsigned long long st_rdev; /* Device number, if device. */
++ unsigned long long __pad3;
++ long long st_size; /* Size of file, in bytes. */
++ int st_blksize; /* Optimal block size for I/O. */
++ int __pad4;
++ long long st_blocks; /* Number 512-byte blocks allocated */
++# ifdef __USE_MISC
++ /* Nanosecond resolution timestamps are stored in a format
++ equivalent to 'struct timespec'. This is the type used
++ whenever possible but the Unix namespace rules do not allow the
++ identifier 'timespec' to appear in the <sys/stat.h> header.
++ Therefore we have to handle the use of this header in strictly
++ standard-compliant sources special. */
++ struct timespec st_atim; /* Time of last access. */
++ struct timespec st_mtim; /* Time of last modification. */
++ struct timespec st_ctim; /* Time of last status change. */
++# else
++ int st_atime; /* Time of last access. */
++ unsigned int st_atime_nsec;
++ int st_mtime; /* Time of last modification. */
++ unsigned int st_mtime_nsec;
++ int st_ctime; /* Time of last status change. */
++ unsigned int st_ctime_nsec;
++# endif
++ unsigned int __unused4;
++ unsigned int __unused5;
++};
++#endif
++
++/* Tell code we have these members. */
++#define _STATBUF_ST_BLKSIZE
++#define _STATBUF_ST_RDEV
++/* Nanosecond resolution time values are supported. */
++#define _STATBUF_ST_NSEC
++
++/* Encoding of the file mode. */
++
++#define __S_IFMT 0170000 /* These bits determine file type. */
++
++/* File types. */
++#define __S_IFDIR 0040000 /* Directory. */
++#define __S_IFCHR 0020000 /* Character device. */
++#define __S_IFBLK 0060000 /* Block device. */
++#define __S_IFREG 0100000 /* Regular file. */
++#define __S_IFIFO 0010000 /* FIFO. */
++#define __S_IFLNK 0120000 /* Symbolic link. */
++#define __S_IFSOCK 0140000 /* Socket. */
++
++/* POSIX.1b objects. Note that these macros always evaluate to zero. But
++ they do it by enforcing the correct use of the macros. */
++#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
++#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
++#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
++
++/* Protection bits. */
++
++#define __S_ISUID 04000 /* Set user ID on execution. */
++#define __S_ISGID 02000 /* Set group ID on execution. */
++#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */
++#define __S_IREAD 0400 /* Read by owner. */
++#define __S_IWRITE 0200 /* Write by owner. */
++#define __S_IEXEC 0100 /* Execute by owner. */
++
++#ifdef __USE_ATFILE
++# define UTIME_NOW ((1l << 30) - 1l)
++# define UTIME_OMIT ((1l << 30) - 2l)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/fcntl.h uClibc-git/libc/sysdeps/linux/cris/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/cris/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -28,6 +28,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ #ifdef __GNUC__
+ typedef long long __kernel_loff_t;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/setjmp.h uClibc-git/libc/sysdeps/linux/cris/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
++/* Copyright (C) 1997, 1998, 2005 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,11 +12,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-/* Define the machine-dependent type `jmp_buf'. CRIS version. */
++/* Define the machine-dependent type `jmp_buf', CRIS version. */
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+
+@@ -24,10 +23,8 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-/*
+- Note that we save and restore CCR to be able to
+- correctly handle DI/EI. Note also that the "move x,ccr" does NOT affect
+- the DMA enable bits (E and D).
++/* Note that saving and restoring CCR has no meaning in user mode, so we
++ don't actually do it; the slot is now reserved.
+
+ jmp_buf[0] - PC
+ jmp_buf[1] - SP (R14)
+@@ -46,21 +43,8 @@
+ jmp_buf[14] - R1
+ jmp_buf[15] - R0
+ jmp_buf[16] - SRP
+- jmp_buf[17] - CCR
+- */
++ jmp_buf[17] - CCR */
+
+-#define _JBLEN 18
+-#if defined (__USE_MISC) || defined (_ASM)
+-#define JB_SP 1
+-#endif
+-
+-#ifndef _ASM
+-typedef int __jmp_buf[_JBLEN];
+-#endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[JB_SP])
++typedef int __jmp_buf[18];
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/cris/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/termios.h uClibc-git/libc/sysdeps/linux/cris/bits/termios.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TERMIOS_H
+ # error "Never include <bits/termios.h> directly; use <termios.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #define __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/cris/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/wordsize.h uClibc-git/libc/sysdeps/linux/cris/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,7 +13,6 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/clone.S uClibc-git/libc/sysdeps/linux/cris/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/fork.c uClibc-git/libc/sysdeps/linux/cris/fork.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/fork.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,18 +0,0 @@
+-/*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include "sysdep.h"
+-
+-#define __NR___libc_fork __NR_fork
+-SYSCALL__ (__libc_fork, 0)
+- /* R1 is now 0 for the parent and 1 for the child. Decrement it to
+- make it -1 (all bits set) for the parent, and 0 (no bits set)
+- for the child. Then AND it with R0, so the parent gets
+- R0&-1==R0, and the child gets R0&0==0. */
+- /* i dunno what the blurb above is useful for. we just return. */
+-__asm__("ret\n\tnop");
+-weak_alias(__libc_fork,fork)
+-libc_hidden_weak(fork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/cris/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/cris/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,8 @@
++/* Private macros for accessing __jmp_buf contents. BFIN version. */
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#define JB_SP 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/cris/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/cris/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_SP])
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/__longjmp.S uClibc-git/libc/sysdeps/linux/cris/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,14 +14,9 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+ #include "sysdep.h"
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+
+ .syntax no_register_prefix
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/Makefile.arch uClibc-git/libc/sysdeps/linux/cris/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,9 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __init_brk.c brk.c sbrk.c
++CSRC-y := __init_brk.c brk.c sbrk.c
+
+-SSRC := setjmp.S __longjmp.S clone.S sysdep.S syscall.S vfork.S
+-ifeq ($(UNIFIED_SYSCALL),y)
+-SSRC += __uClibc_syscall.S
+-endif
++SSRC-y := setjmp.S __longjmp.S clone.S sysdep.S syscall.S vfork.S
++SSRC-$(UNIFIED_SYSCALL) += __uClibc_syscall.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/setjmp.S uClibc-git/libc/sysdeps/linux/cris/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,9 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+
+ .syntax no_register_prefix
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/sys/procfs.h uClibc-git/libc/sysdeps/linux/cris/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/sys/ucontext.h uClibc-git/libc/sysdeps/linux/cris/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* System V/cris ABI compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/syscall.S uClibc-git/libc/sysdeps/linux/cris/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/sysdep.h uClibc-git/libc/sysdeps/linux/cris/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,12 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYSDEP_H_
+ #define _SYSDEP_H_
+
+-#include <sys/syscall.h>
++#include <common/sysdep.h>
+
+ #ifndef C_LABEL
+
+@@ -126,6 +125,14 @@
+ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME (name), function) @ \
+ .align ALIGNARG (2) @ \
+ C_LABEL(name)
++
++#define HIDDEN_ENTRY(name) \
++ .text @ \
++ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (name) @ \
++ .hidden C_SYMBOL_NAME (name) @ \
++ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME (name), function) @ \
++ .align ALIGNARG (2) @ \
++ C_LABEL(name)
+
+ #undef END
+ #define END(name) \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/sysdep.S uClibc-git/libc/sysdeps/linux/cris/sysdep.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/sysdep.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/sysdep.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include "sysdep.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/cris/vfork.S uClibc-git/libc/sysdeps/linux/cris/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/cris/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/cris/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,7 +16,7 @@
+ * enclosing function
+ */
+
+-ENTRY(__vfork)
++HIDDEN_ENTRY(__vfork)
+ movu.w __NR_vfork,$r9
+ break 13
+ cmps.w -4096,$r10
+@@ -27,4 +27,4 @@
+ PSEUDO_END(__vfork)
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/fcntl.h uClibc-git/libc/sysdeps/linux/e1/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/fenv.h uClibc-git/libc/sysdeps/linux/e1/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/fenvinline.h uClibc-git/libc/sysdeps/linux/e1/bits/fenvinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/fenvinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/fenvinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_MATH_INLINES
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/e1/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -31,6 +31,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ /*
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/unistd.h uClibc-git/libc/sysdeps/linux/e1/bits/unistd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/unistd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/unistd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -378,13 +378,6 @@
+ return (type)(par1); \
+ }
+
+-#include <sys/types.h>
+-/* Taken from <bits/errno.h> */
+-#ifndef _LIBC
+-/* We don't support pthreads for the moment*/
+-#define __set_errno(val) ((errno) = (val))
+-#endif
+-
+ #if 0
+ #define _syscall3(type, name,atype, a , btype, b, ctype, c) \
+ type name(atype a, btype b, ctype c,) \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/wordsize.h uClibc-git/libc/sysdeps/linux/e1/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/crt1.c uClibc-git/libc/sysdeps/linux/e1/crt1.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/crt1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/crt1.c 2014-02-03 12:32:56.000000000 +0100
+@@ -18,8 +18,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Stick in a dummy reference to main(), so that if an application
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/Makefile uClibc-git/libc/sysdeps/linux/e1/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -17,7 +17,7 @@
+ CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
+
+ # why is crt1.c listed in CSRC ?
+-CSRC := crt1.c syscalls.c longjmp.c setjmp.c vfork.c
++CSRC := crt1.c syscalls.c longjmp.c setjmp.c
+ OBJS := $(patsubst %.c,%.o, $(CSRC))
+
+ OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/sys/procfs.h uClibc-git/libc/sysdeps/linux/e1/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/sys/reg.h uClibc-git/libc/sysdeps/linux/e1/sys/reg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/sys/reg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/sys/reg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_REG_H
+ #define _SYS_REG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/sys/ucontext.h uClibc-git/libc/sysdeps/linux/e1/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* System V/m68k ABI compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/e1/vfork.c uClibc-git/libc/sysdeps/linux/e1/vfork.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/e1/vfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/e1/vfork.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,14 +0,0 @@
+-/*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <errno.h>
+-
+-#define __NR___vfork __NR_vfork
+-attribute_hidden _syscall0(pid_t, __vfork)
+-weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/elf-fdpic.h uClibc-git/libc/sysdeps/linux/frv/bits/elf-fdpic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/elf-fdpic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/elf-fdpic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -22,8 +22,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_ELF_FDPIC_H
+ #define _BITS_ELF_FDPIC_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/fcntl.h uClibc-git/libc/sysdeps/linux/frv/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/setjmp.h uClibc-git/libc/sysdeps/linux/frv/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. FRV version. */
+
+@@ -35,7 +34,6 @@
+ #define __SETJMP_FP (__SETJMP_SP+1)
+
+
+-#ifndef _ASM
+ typedef struct
+ /* Demand 64-bit alignment such that we can use std/ldd in
+ setjmp/longjmp. */
+@@ -48,11 +46,5 @@
+ unsigned long __sp; /* stack pointer */
+ unsigned long __fp; /* frame pointer */
+ } __jmp_buf[1];
+-#endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)->__sp)
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/frv/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/stat.h uClibc-git/libc/sysdeps/linux/frv/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/syscalls.h uClibc-git/libc/sysdeps/linux/frv/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+ # define __syscall_return(type, res) \
+ do { \
+ unsigned long __sr2 = (res); \
+- if (__builtin_expect ((unsigned long)(__sr2) \
+- >= (unsigned long)(-4095), 0)) { \
++ if (unlikely ((unsigned long)(__sr2) >= (unsigned long)(-4095))) { \
+ extern int __syscall_error (int); \
+ return (type) __syscall_error (__sr2); \
+ } \
+@@ -26,8 +25,7 @@
+ # define __syscall_return(type, res) \
+ do { \
+ unsigned long __sr2 = (res); \
+- if (__builtin_expect ((unsigned long)(__sr2) \
+- >= (unsigned long)(-4095), 0)) { \
++ if (unlikely ((unsigned long)(__sr2) >= (unsigned long)(-4095))) { \
+ __set_errno (-__sr2); \
+ __sr2 = -1; \
+ } \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/frv/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/wordsize.h uClibc-git/libc/sysdeps/linux/frv/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/clone.S uClibc-git/libc/sysdeps/linux/frv/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/crt0.S uClibc-git/libc/sysdeps/linux/frv/crt0.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/crt0.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/crt0.S 2014-02-03 12:32:56.000000000 +0100
+@@ -22,8 +22,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+
+ /* Based on ../i386/crt0.S and newlib's libgloss/frv/crt0.S */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/crti.S uClibc-git/libc/sysdeps/linux/frv/crti.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/crti.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/crti.S 2014-02-03 12:32:56.000000000 +0100
+@@ -22,8 +22,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ .section .init,"x"
+ .p2align 2
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/crtn.S uClibc-git/libc/sysdeps/linux/frv/crtn.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/crtn.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/crtn.S 2014-02-03 12:32:56.000000000 +0100
+@@ -22,8 +22,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ .section .init,"x"
+ .globl _init
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/crtreloc.c uClibc-git/libc/sysdeps/linux/frv/crtreloc.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/crtreloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/crtreloc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <link.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/dl-iterate-phdr.c uClibc-git/libc/sysdeps/linux/frv/dl-iterate-phdr.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/dl-iterate-phdr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/dl-iterate-phdr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #include <link.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/fstat64.c uClibc-git/libc/sysdeps/linux/frv/fstat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/fstat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/fstat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,11 +9,9 @@
+ * Adapted to FR-V by Alexandre Oliva <aoliva@redhat.com>
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/stat.h>
+
+-#ifdef __UCLIBC_HAS_LFS__
+ _syscall2(int, fstat64, int, fd, struct stat64 *, buf)
+ libc_hidden_def(fstat64)
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/frv/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/frv/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,14 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->__sp)
++
++#endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/__longjmp.S uClibc-git/libc/sysdeps/linux/frv/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -4,10 +4,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+-
+ # setjmp/longjmp for Frv. The jmpbuf looks like this:
+ #
+ # Register jmpbuf offset
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/lstat64.c uClibc-git/libc/sysdeps/linux/frv/lstat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/lstat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/lstat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,11 +9,9 @@
+ * Adapted to FR-V by Alexandre Oliva <aoliva@redhat.com>
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/stat.h>
+
+-#ifdef __UCLIBC_HAS_LFS__
+ _syscall2(int, lstat64, const char *, file_name, struct stat64 *, buf)
+ libc_hidden_def(lstat64)
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/Makefile uClibc-git/libc/sysdeps/linux/frv/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -17,7 +17,7 @@
+ SSRC := __longjmp.S setjmp.S clone.S vfork.S
+ SOBJ := $(patsubst %.S,%.o, $(SSRC))
+
+-CSRC = mmap.c sysdep.c syscall.c brk.c sbrk.c __init_brk.c dl-iterate-phdr.c
++CSRC = sysdep.c syscall.c brk.c sbrk.c __init_brk.c dl-iterate-phdr.c
+ CSRC += xstatconv.c stat.c stat64.c fstat.c fstat64.c lstat.c lstat64.c
+ COBJ := $(patsubst %.c,%.o, $(CSRC))
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/mmap.c uClibc-git/libc/sysdeps/linux/frv/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,50 +0,0 @@
+-/* Copyright (C) 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Daniel Jacobowitz <dan@debian.org>, 1999.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-/* Massivly hacked up for uClibc by Erik Andersen */
+-
+-/* Extracted from ../common/mmap64.c by Alexandre Oliva <aoliva@redhat.com>
+-
+- We don't want to use the old mmap interface. */
+-
+-#include <features.h>
+-#include <errno.h>
+-#include <unistd.h>
+-#include <sys/syscall.h>
+-#include <sys/mman.h>
+-
+-
+-#define __NR___syscall_mmap2 __NR_mmap2
+-static __inline__ _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
+- size_t, len, int, prot, int, flags, int, fd, off_t, offset)
+-
+-/* This is always 12, even on architectures where PAGE_SHIFT != 12. */
+-# ifndef MMAP2_PAGE_SHIFT
+-# define MMAP2_PAGE_SHIFT 12
+-# endif
+-
+-__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
+-{
+- if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) {
+- __set_errno (EINVAL);
+- return MAP_FAILED;
+- }
+- return(__syscall_mmap2(addr, len, prot, flags, fd, (off_t) (offset >> MMAP2_PAGE_SHIFT)));
+-}
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/stat64.c uClibc-git/libc/sysdeps/linux/frv/stat64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/stat64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/stat64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -9,11 +9,9 @@
+ * Adapted to FR-V by Alexandre Oliva <aoliva@redhat.com>
+ */
+
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+-#include <unistd.h>
+ #include <sys/stat.h>
+
+-#ifdef __UCLIBC_HAS_LFS__
+ _syscall2(int, stat64, const char *, file_name, struct stat64 *, buf)
+ libc_hidden_def(stat64)
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/sys/procfs.h uClibc-git/libc/sysdeps/linux/frv/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/sys/ptrace.h uClibc-git/libc/sysdeps/linux/frv/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/sys/ucontext.h uClibc-git/libc/sysdeps/linux/frv/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/syscall.c uClibc-git/libc/sysdeps/linux/frv/syscall.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/syscall.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/syscall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/sysdep.c uClibc-git/libc/sysdeps/linux/frv/sysdep.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/sysdep.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/sysdep.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/frv/vfork.S uClibc-git/libc/sysdeps/linux/frv/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/frv/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/frv/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,15 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <features.h>
+-
+-#include <asm/unistd.h>
+-#define _ERRNO_H 1
+-#include <bits/errno.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sys/syscall.h>
+
+ .text
+ .globl __vfork
+@@ -44,4 +39,4 @@
+ .size __vfork,.-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/byteswap.h uClibc-git/libc/sysdeps/linux/h8300/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ASM_BITS_BYTESWAP_H
+ #define _ASM_BITS_BYTESWAP_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/fcntl.h uClibc-git/libc/sysdeps/linux/h8300/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/h8300/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef unsigned short __kernel_old_gid_t;
+ typedef long long __kernel_loff_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ #ifdef __USE_ALL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/setjmp.h uClibc-git/libc/sysdeps/linux/h8300/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -9,24 +9,10 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+-
+ typedef struct
+ {
+ unsigned long __regs[4]; /* save er4 - er7(sp) */
+ unsigned long __pc; /* the return address */
+ } __jmp_buf[1];
+
+-#endif /* _ASM */
+-
+-#define JB_REGS 0
+-#define JB_PC 16
+-#define JB_SIZE 20
+-
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)->__regs[3])
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/h8300/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT int _code, struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS _code,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/h8300/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/h8300/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -1,8 +1,6 @@
+ /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. H8/300 version. */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ #ifdef __H8300S__
+ .h8300s
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/h8300/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -1,8 +1,6 @@
+ /* BSD `_setjmp' entry point to `sigsetjmp (..., 1)'. H8/300 version. */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ #ifdef __H8300S__
+ .h8300s
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/crt0.S uClibc-git/libc/sysdeps/linux/h8300/crt0.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/crt0.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/crt0.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/h8300/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/h8300/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,9 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#define JB_REGS 0
++#define JB_PC 16
++#define JB_SIZE 20
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/h8300/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/h8300/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->__regs[3])
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/__longjmp.S uClibc-git/libc/sysdeps/linux/h8300/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -20,3 +20,5 @@
+ mov.l @er0+,er3 ; return PC
+ adds #4,sp ; adjust return stack
+ jmp @er3
++
++libc_hidden_def(__longjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/setjmp.S uClibc-git/libc/sysdeps/linux/h8300/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -1,6 +1,4 @@
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ #ifdef __H8300S__
+ .h8300s
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/sys/procfs.h uClibc-git/libc/sysdeps/linux/h8300/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/sys/ucontext.h uClibc-git/libc/sysdeps/linux/h8300/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* H8/300 compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/h8300/vfork.S uClibc-git/libc/sysdeps/linux/h8300/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/h8300/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/h8300/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+
+-#include <asm/unistd.h>
++#include <sys/syscall.h>
+
+ #ifndef __NR_vfork
+ #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
+@@ -12,7 +12,6 @@
+ #endif
+ .text
+ .align 2
+- .globl _errno
+ .globl ___vfork
+ .hidden ___vfork
+ .type ___vfork,@function
+@@ -38,4 +37,4 @@
+ jmp @er1 /* don't return, just jmp directly */
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/add_n.s uClibc-git/libc/sysdeps/linux/hppa/add_n.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/add_n.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/add_n.s 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ ;! License for more details.
+
+ ;! You should have received a copy of the GNU Lesser General Public License
+-;! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
+-;! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-;! MA 02111-1307, USA.
++;! along with the GNU MP Library; see the file COPYING.LIB. If not, see
++;! <http://www.gnu.org/licenses/>.
+
+
+ ;! INPUT PARAMETERS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/atomic.h uClibc-git/libc/sysdeps/linux/hppa/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,11 +13,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdint.h>
++#include <errno.h>
+ #include <bits/kernel-features.h>
+
+ #define ABORT_INSTRUCTION __asm__(__UCLIBC_ABORT_INSTRUCTION__)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/eventfd.h uClibc-git/libc/sysdeps/linux/hppa/bits/eventfd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/eventfd.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/eventfd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,32 @@
++/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_EVENTFD_H
++# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
++#endif
++
++/* Flags for signalfd. */
++enum
++ {
++ EFD_SEMAPHORE = 000000001,
++#define EFD_SEMAPHORE EFD_SEMAPHORE
++ EFD_CLOEXEC = 010000000,
++#define EFD_CLOEXEC EFD_CLOEXEC
++/* the below value looks suspicious, should be 000200004 for consistency */
++ EFD_NONBLOCK = 00200004 /* HPUX has separate NDELAY & NONBLOCK */
++#define EFD_NONBLOCK EFD_NONBLOCK
++ };
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/fcntl.h uClibc-git/libc/sysdeps/linux/hppa/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/fenv.h uClibc-git/libc/sysdeps/linux/hppa/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/ipc.h uClibc-git/libc/sysdeps/linux/hppa/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/kernel_sigaction.h uClibc-git/libc/sysdeps/linux/hppa/bits/kernel_sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/kernel_sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/kernel_sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,12 +12,4 @@
+ unsigned long sa_flags;
+ };
+
+-/* In uclibc, userspace struct sigaction is identical to
+- * "new" struct kernel_sigaction (one from the Linux 2.1.68 kernel).
+- * See sigaction.h
+- */
+-
+-extern int __syscall_rt_sigaction (int, const struct sigaction *,
+- struct sigaction *, size_t) attribute_hidden;
+-
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/hppa/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -45,6 +45,8 @@
+ typedef unsigned long long __kernel_ino64_t;
+
+ typedef unsigned int __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ #ifdef __USE_ALL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/mman.h uClibc-git/libc/sysdeps/linux/hppa/bits/mman.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+@@ -45,7 +44,7 @@
+ #define MAP_GROWSDOWN 0x8000 /* stack-like segment */
+ #define MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
+ #define MAP_NONBLOCK 0x20000 /* do not block on IO */
+-#define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++#define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+
+ #define MS_SYNC 1 /* synchronous memory sync */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/setjmp.h uClibc-git/libc/sysdeps/linux/hppa/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2000 Free Software Foundation, Inc.
++/* Copyright (C) 2000, 2005, 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. HPPA version. */
+ #ifndef _BITS_SETJMP_H
+@@ -29,17 +28,6 @@
+ easier, and to ensure proper alignment. Naturally, user code should
+ not depend on either representation. */
+
+-#if defined __USE_MISC || defined _ASM
+-#define JB_SP (76/4)
+-#endif
+-
+-#ifndef _ASM
+ typedef double __jmp_buf[21];
+-#endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame containing a local
+- variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
+- ((void *)(_address) > (void *)(((unsigned long *) _jmpbuf)[JB_SP]))
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/sigaction.h uClibc-git/libc/sysdeps/linux/hppa/bits/sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/signum.h uClibc-git/libc/sysdeps/linux/hppa/bits/signum.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/signum.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/signum.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef _SIGNAL_H
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/socket_type.h uClibc-git/libc/sysdeps/linux/hppa/bits/socket_type.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/socket_type.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/socket_type.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,54 @@
++/* Define enum __socket_type for Linux/HP-PARISC.
++ Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets. */
++enum __socket_type
++{
++ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
++ byte streams. */
++#define SOCK_STREAM SOCK_STREAM
++ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
++ of fixed maximum length. */
++#define SOCK_DGRAM SOCK_DGRAM
++ SOCK_RAW = 3, /* Raw protocol interface. */
++#define SOCK_RAW SOCK_RAW
++ SOCK_RDM = 4, /* Reliably-delivered messages. */
++#define SOCK_RDM SOCK_RDM
++ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
++ datagrams of fixed maximum length. */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
++#define SOCK_DCCP SOCK_DCCP
++ SOCK_PACKET = 10, /* Linux specific way of getting packets
++ at the dev level. For writing rarp and
++ other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++ /* Flags to be ORed into the type parameter of socket and socketpair. */
++
++ SOCK_CLOEXEC = 010000000, /* Atomically set close-on-exec flag for the
++ new descriptor(s). */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++ SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as
++ non-blocking. */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/hppa/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -9,10 +9,10 @@
+ #define __UCLIBC_ABORT_INSTRUCTION__ "iitlbp %r0,(%sr0,%r0)"
+
+ /* can your target use syscall6() for mmap ? */
+-#undef __UCLIBC_MMAP_HAS_6_ARGS__
++#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/brk.c uClibc-git/libc/sysdeps/linux/hppa/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/hppa/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/hppa/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/clone.S uClibc-git/libc/sysdeps/linux/hppa/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/crt1.S uClibc-git/libc/sysdeps/linux/hppa/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .import main, code
+ .import $global$, data
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/hppa/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/hppa/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,19 @@
++/* Private macros for accessing __jmp_buf contents. HPPA version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#define JB_SP (76/4)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/hppa/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/hppa/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
++ ((void *)(_address) > (void *)(((unsigned long *) _jmpbuf)[JB_SP]))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/__longjmp.S uClibc-git/libc/sysdeps/linux/hppa/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <features.h>
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* __longjmp(jmpbuf, val) */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/lshift.s uClibc-git/libc/sysdeps/linux/hppa/lshift.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/lshift.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/lshift.s 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ ;! License for more details.
+
+ ;! You should have received a copy of the GNU Lesser General Public License
+-;! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
+-;! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-;! MA 02111-1307, USA.
++;! along with the GNU MP Library; see the file COPYING.LIB. If not, see
++;! <http://www.gnu.org/licenses/>.
+
+
+ ;! INPUT PARAMETERS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/Makefile.arch uClibc-git/libc/sysdeps/linux/hppa/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __syscall_error.c brk.c mmap.c syscall.c
++CSRC-y := __syscall_error.c brk.c syscall.c
+
+-SSRC := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S \
++SSRC-y := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S \
+ add_n.s lshift.s rshift.s sub_n.s udiv_qrnnd.s
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/mmap.c uClibc-git/libc/sysdeps/linux/hppa/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,19 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * mmap() for uClibc/x86_64
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- * Copyright (C) 2005 by Mike Frysinger <vapier@gentoo.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <errno.h>
+-#include <unistd.h>
+-#include <sys/mman.h>
+-#include <sys/syscall.h>
+-
+-
+-_syscall6(void *, mmap, void *, start, size_t, length, int, prot,
+- int, flags, int, fd, off_t, offset)
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/rshift.s uClibc-git/libc/sysdeps/linux/hppa/rshift.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/rshift.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/rshift.s 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ ;! License for more details.
+
+ ;! You should have received a copy of the GNU Lesser General Public License
+-;! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
+-;! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-;! MA 02111-1307, USA.
++;! along with the GNU MP Library; see the file COPYING.LIB. If not, see
++;! <http://www.gnu.org/licenses/>.
+
+
+ ;! INPUT PARAMETERS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/setjmp.S uClibc-git/libc/sysdeps/linux/hppa/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .text
+ .align 4
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/sub_n.s uClibc-git/libc/sysdeps/linux/hppa/sub_n.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/sub_n.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/sub_n.s 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ ;! License for more details.
+
+ ;! You should have received a copy of the GNU Lesser General Public License
+-;! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
+-;! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-;! MA 02111-1307, USA.
++;! along with the GNU MP Library; see the file COPYING.LIB. If not, see
++;! <http://www.gnu.org/licenses/>.
+
+
+ ;! INPUT PARAMETERS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/sys/procfs.h uClibc-git/libc/sysdeps/linux/hppa/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/sys/ucontext.h uClibc-git/libc/sysdeps/linux/hppa/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Don't rely on this, the interface is currently messed up and may need to
+ be broken to be fixed. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/syscall.c uClibc-git/libc/sysdeps/linux/hppa/syscall.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/syscall.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/syscall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdarg.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/hppa/udiv_qrnnd.s uClibc-git/libc/sysdeps/linux/hppa/udiv_qrnnd.s
+--- uClibc-0.9.33.2/libc/sysdeps/linux/hppa/udiv_qrnnd.s 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/hppa/udiv_qrnnd.s 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ ;! License for more details.
+
+ ;! You should have received a copy of the GNU Lesser General Public License
+-;! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
+-;! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-;! MA 02111-1307, USA.
++;! along with the GNU MP Library; see the file COPYING.LIB. If not, see
++;! <http://www.gnu.org/licenses/>.
+
+
+ ;! INPUT PARAMETERS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/atomic.h uClibc-git/libc/sysdeps/linux/i386/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdint.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/byteswap.h uClibc-git/libc/sysdeps/linux/i386/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ASM_BITS_BYTESWAP_H
+ #define _ASM_BITS_BYTESWAP_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/fcntl.h uClibc-git/libc/sysdeps/linux/i386/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/fenv.h uClibc-git/libc/sysdeps/linux/i386/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -82,9 +81,9 @@
+ fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) -1)
++#define FE_DFL_ENV ((const fenv_t *) -1)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where none of the exception is masked. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) -2)
++# define FE_NOMASK_ENV ((const fenv_t *) -2)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/huge_vall.h uClibc-git/libc/sysdeps/linux/i386/bits/huge_vall.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/huge_vall.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/bits/huge_vall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,42 @@
++/* `HUGE_VALL' constant for ix86 (where it is infinity).
++ Used by <stdlib.h> and <math.h> functions for overflow.
++ Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000, 2004
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _MATH_H
++# error "Never use <bits/huge_vall.h> directly; include <math.h> instead."
++#endif
++
++#if __GNUC_PREREQ(3,3)
++# define HUGE_VALL (__builtin_huge_vall())
++#elif __GNUC_PREREQ(2,96)
++# define HUGE_VALL (__extension__ 0x1.0p32767L)
++#else
++
++# define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 }
++
++# define __huge_vall_t union { unsigned char __c[12]; long double __ld; }
++# ifdef __GNUC__
++# define HUGE_VALL (__extension__ \
++ ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
++# else /* Not GCC. */
++static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
++# define HUGE_VALL (__huge_vall.__ld)
++# endif /* GCC. */
++
++#endif /* GCC 2.95 */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/i386/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -40,6 +40,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ typedef struct {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/mathdef.h uClibc-git/libc/sysdeps/linux/i386/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/mathinline.h uClibc-git/libc/sysdeps/linux/i386/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/mathinline.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/select.h uClibc-git/libc/sysdeps/linux/i386/bits/select.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/select.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/select.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SELECT_H
+ # error "Never use <bits/select.h> directly; include <sys/select.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/setjmp.h uClibc-git/libc/sysdeps/linux/i386/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
++/* Copyright (C) 1997,1998,2000,2001,2003,2005,2006
++ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. Intel 386 version. */
+ #ifndef _BITS_SETJMP_H
+@@ -24,23 +24,6 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#if defined __USE_MISC || defined _ASM
+-# define JB_BX 0
+-# define JB_SI 1
+-# define JB_DI 2
+-# define JB_BP 3
+-# define JB_SP 4
+-# define JB_PC 5
+-# define JB_SIZE 24
+-#endif
+-
+-#ifndef _ASM
+ typedef int __jmp_buf[6];
+-#endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[JB_SP])
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/i386/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT struct sigcontext
+ #define SIGCONTEXT_EXTRA_ARGS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/i386/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/syscalls.h uClibc-git/libc/sysdeps/linux/i386/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -136,7 +136,7 @@
+ #define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \
+ , "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5)
+ #define ASMFMT_6(arg1, arg2, arg3, arg4, arg5, arg6) \
+- , "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5), "m" (arg6)
++ , "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5), "g" (arg6)
+
+ #else /* !PIC */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #define __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/wchar.h uClibc-git/libc/sysdeps/linux/i386/bits/wchar.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/wchar.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/wchar.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_WCHAR_H
+ #define _BITS_WCHAR_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/wordsize.h uClibc-git/libc/sysdeps/linux/i386/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/brk.c uClibc-git/libc/sysdeps/linux/i386/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/i386/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,17 +13,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+ in setjmp doesn't clobber the state restored by longjmp. */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ .global _setjmp
+ .type _setjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/i386/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,13 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .global setjmp
+ .type setjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/clone.S uClibc-git/libc/sysdeps/linux/i386/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/crt1.S uClibc-git/libc/sysdeps/linux/i386/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -31,9 +31,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This is the canonical entry point, usually the first thing in the text
+ segment. The SVR4/i386 ABI (pages 3-31, 3-32) says that when the entry
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/fpu_control.h uClibc-git/libc/sysdeps/linux/i386/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/getcontext.S uClibc-git/libc/sysdeps/linux/i386/getcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/getcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/getcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,84 @@
++/* Save current context.
++ Copyright (C) 2001-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++ENTRY(__getcontext)
++ /* Load address of the context data structure. */
++ movl 4(%esp), %eax
++
++ /* Return value of getcontext. EAX is the only register whose
++ value is not preserved. */
++ movl $0, oEAX(%eax)
++
++ /* Save the 32-bit register values and the return address. */
++ movl %ecx, oECX(%eax)
++ movl %edx, oEDX(%eax)
++ movl %edi, oEDI(%eax)
++ movl %esi, oESI(%eax)
++ movl %ebp, oEBP(%eax)
++ movl (%esp), %ecx
++ movl %ecx, oEIP(%eax)
++ leal 4(%esp), %ecx /* Exclude the return address. */
++ movl %ecx, oESP(%eax)
++ movl %ebx, oEBX(%eax)
++
++ /* Save the FS segment register. We don't touch the GS register
++ since it is used for threads. */
++ xorl %edx, %edx
++ movw %fs, %dx
++ movl %edx, oFS(%eax)
++
++ /* We have separate floating-point register content memory on the
++ stack. We use the __fpregs_mem block in the context. Set the
++ links up correctly. */
++ leal oFPREGSMEM(%eax), %ecx
++ movl %ecx, oFPREGS(%eax)
++ /* Save the floating-point context. */
++ fnstenv (%ecx)
++ /* And load it right back since the processor changes the mask.
++ Intel thought this opcode to be used in interrupt handlers which
++ would block all exceptions. */
++ fldenv (%ecx)
++
++ /* Save the current signal mask. */
++ pushl %ebx
++ cfi_adjust_cfa_offset (4)
++ cfi_rel_offset (ebx, 0)
++ leal oSIGMASK(%eax), %edx
++ xorl %ecx, %ecx
++ movl $SIG_BLOCK, %ebx
++ movl $__NR_sigprocmask, %eax
++ ENTER_KERNEL
++ popl %ebx
++ cfi_adjust_cfa_offset (-4)
++ cfi_restore (ebx)
++ cmpl $-4095, %eax /* Check %eax for error. */
++ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
++
++ /* All done, return 0 for success. */
++ xorl %eax, %eax
++L(pseudo_end):
++ ret
++PSEUDO_END(__getcontext)
++
++weak_alias (__getcontext, getcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/i386/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,25 @@
++/* Private macros for accessing __jmp_buf contents. i386 version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#define JB_BX 0
++#define JB_SI 1
++#define JB_DI 2
++#define JB_BP 3
++#define JB_SP 4
++#define JB_PC 5
++#define JB_SIZE 24
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/i386/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_SP])
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/__longjmp.S uClibc-git/libc/sysdeps/linux/i386/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,9 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ .global __longjmp
+ .type __longjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/makecontext.S uClibc-git/libc/sysdeps/linux/i386/makecontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/makecontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/makecontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,123 @@
++/* Create new context.
++ Copyright (C) 2001,2002,2005,2007,2008,2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++ENTRY(__makecontext)
++ movl 4(%esp), %eax
++
++ /* Load the address of the function we are supposed to run. */
++ movl 8(%esp), %ecx
++
++ /* Compute the address of the stack. The information comes from
++ to us_stack element. */
++ movl oSS_SP(%eax), %edx
++ movl %ecx, oEIP(%eax)
++ addl oSS_SIZE(%eax), %edx
++
++ /* Remember the number of parameters for the exit handler since
++ it has to remove them. We store the number in the EBX register
++ which the function we will call must preserve. */
++ movl 12(%esp), %ecx
++ movl %ecx, oEBX(%eax)
++
++ /* Make room on the new stack for the parameters.
++ Room for the arguments, return address (== L(exitcode)) and
++ oLINK pointer is needed. One of the pointer sizes is subtracted
++ after aligning the stack. */
++ negl %ecx
++ leal -4(%edx,%ecx,4), %edx
++ negl %ecx
++
++ /* Align the stack. */
++ andl $0xfffffff0, %edx
++ subl $4, %edx
++
++ /* Store the future stack pointer. */
++ movl %edx, oESP(%eax)
++
++ /* Put the next context on the new stack (from the uc_link
++ element). */
++ movl oLINK(%eax), %eax
++ movl %eax, 4(%edx,%ecx,4)
++
++ /* Copy all the parameters. */
++ jecxz 2f
++1: movl 12(%esp,%ecx,4), %eax
++ movl %eax, (%edx,%ecx,4)
++ decl %ecx
++ jnz 1b
++2:
++
++ /* If the function we call returns we must continue with the
++ context which is given in the uc_link element. To do this
++ set the return address for the function the user provides
++ to a little bit of helper code which does the magic (see
++ below). */
++#ifdef __PIC__
++ call 1f
++ cfi_adjust_cfa_offset (4)
++1: popl %ecx
++ cfi_adjust_cfa_offset (-4)
++ addl $L(exitcode)-1b, %ecx
++ movl %ecx, (%edx)
++#else
++ movl $L(exitcode), (%edx)
++#endif
++ /* 'makecontext' returns no value. */
++L(pseudo_end):
++ ret
++
++ /* This is the helper code which gets called if a function which
++ is registered with 'makecontext' returns. In this case we
++ have to install the context listed in the uc_link element of
++ the context 'makecontext' manipulated at the time of the
++ 'makecontext' call. If the pointer is NULL the process must
++ terminate. */
++ cfi_endproc
++L(exitcode):
++ /* This removes the parameters passed to the function given to
++ 'makecontext' from the stack. EBX contains the number of
++ parameters (see above). */
++ leal (%esp,%ebx,4), %esp
++
++#ifdef __PIC__
++ call 1f
++1: popl %ebx
++ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
++#endif
++ cmpl $0, (%esp) /* Check the next context. */
++ je 2f /* If it is zero exit. */
++
++ call JUMPTARGET(__setcontext)
++ /* If this returns (which can happen if the syscall fails) we'll
++ exit the program with the return error value (-1). */
++
++ movl %eax, (%esp)
++2: call HIDDEN_JUMPTARGET(exit)
++ /* The 'exit' call should never return. In case it does cause
++ the process to terminate. */
++ hlt
++ cfi_startproc
++END(__makecontext)
++
++weak_alias (__makecontext, makecontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/Makefile.arch uClibc-git/libc/sysdeps/linux/i386/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,13 +5,13 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c sigaction.c
++CSRC-y := brk.c __syscall_error.c sigaction.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
+- sync_file_range.S syscall.S mmap.S mmap64.S posix_fadvise64.S
++ sync_file_range.S syscall.S mmap.S
+
+-
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-SSRC += vfork.S clone.S
+-endif
++SSRC-$(UCLIBC_HAS_LFS) += mmap64.S
++SSRC-$(if $(findstring yy,$(UCLIBC_HAS_ADVANCED_REALTIME)$(UCLIBC_HAS_LFS)),y) += posix_fadvise64.S
++SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += vfork.S clone.S
++SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.S setcontext.S getcontext.S swapcontext.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/mmap64.S uClibc-git/libc/sysdeps/linux/i386/mmap64.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/mmap64.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/mmap64.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,18 +12,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
++#include <_lfs_64.h>
+ #define _ERRNO_H 1
+-#include <features.h>
+ #include <bits/errno.h>
+ #include <sys/syscall.h>
+
+-#if defined __UCLIBC_HAS_LFS__ && defined __NR_mmap2
+-
++#ifdef __NR_mmap2
+
+ #define LINKAGE 4
+ #define PTR_SIZE 4
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/mmap.S uClibc-git/libc/sysdeps/linux/i386/mmap.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/mmap.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/mmap.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _ERRNO_H 1
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/posix_fadvise64.S uClibc-git/libc/sysdeps/linux/i386/posix_fadvise64.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/posix_fadvise64.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/posix_fadvise64.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,29 +13,18 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define _ERRNO_H 1
+-#include <features.h>
+-#include <bits/errno.h>
+-#include <sys/syscall.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#if defined __NR_fadvise64_64 || defined __NR_fadvise64
++#include <_lfs_64.h>
++#include <sys/syscall.h>
+
+-/* Was named __libc_posix_fadvise64 for some inexplicable reason.
+-** google says only uclibc has *__libc*_posix_fadviseXXX,
+-** so it cannot be compat with anything.
+-**
+-** Remove this comment and one at the end after 0.9.31
+-*/
++#ifdef __NR_fadvise64_64
+
+ .text
+ .global posix_fadvise64
+ .type posix_fadvise64,%function
+ posix_fadvise64:
+-#if defined __NR_fadvise64_64
+ /* Save regs */
+ pushl %ebp
+ pushl %ebx
+@@ -63,47 +52,7 @@
+ /* Returns 0 on success, else an error code. */
+ negl %eax
+
+-#elif defined __NR_fadvise64
+- /* Save regs */
+- pushl %ebx
+- pushl %esi
+- pushl %edi
+-#if 0
+- /* does len overflow long? */
+- cmpl $0, 28(%esp)
+- movl $-EOVERFLOW, %eax
+- jne overflow
+-#endif
+- movl $__NR_fadvise64, %eax /* Syscall number in %eax. */
+-
+- movl 16(%esp), %ebx
+- movl 20(%esp), %ecx
+- movl 24(%esp), %edx
+- movl 28(%esp), %esi
+- movl 32(%esp), %edi
+-
+- /* Do the system call trap. */
+- int $0x80
+-overflow:
+- /* Restore regs */
+- popl %edi
+- popl %esi
+- popl %ebx
+-
+- /* Returns 0 on success, else an error code. */
+- negl %eax
+-#endif
+-
+ /* Successful; return the syscall's value. */
+ ret
+-
+ .size posix_fadvise64,.-posix_fadvise64
+-
+-/*
+-** libc_hidden_def(__libc_posix_fadvise64)
+-** #if defined __UCLIBC_HAS_LFS__ && defined __UCLIBC_HAS_ADVANCED_REALTIME__
+-** weak_alias(__libc_posix_fadvise64,posix_fadvise64)
+-** #endif
+-*/
+-
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/setcontext.S uClibc-git/libc/sysdeps/linux/i386/setcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/setcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/setcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,96 @@
++/* Install given context.
++ Copyright (C) 2001-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++ENTRY(__setcontext)
++ /* Load address of the context data structure. */
++ movl 4(%esp), %eax
++
++ /* Get the current signal mask. Note that we preserve EBX in case
++ the system call fails and we return from the function with an
++ error. */
++ pushl %ebx
++ cfi_adjust_cfa_offset (4)
++ xorl %edx, %edx
++ leal oSIGMASK(%eax), %ecx
++ movl $SIG_SETMASK, %ebx
++ cfi_rel_offset (ebx, 0)
++ movl $__NR_sigprocmask, %eax
++ ENTER_KERNEL
++ popl %ebx
++ cfi_adjust_cfa_offset (-4)
++ cfi_restore (ebx)
++ cmpl $-4095, %eax /* Check %eax for error. */
++ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
++
++ /* EAX was modified, reload it. */
++ movl 4(%esp), %eax
++
++ /* Restore the floating-point context. Not the registers, only the
++ rest. */
++ movl oFPREGS(%eax), %ecx
++ fldenv (%ecx)
++
++ /* Restore the FS segment register. We don't touch the GS register
++ since it is used for threads. */
++ movl oFS(%eax), %ecx
++ movw %cx, %fs
++
++ /* Fetch the address to return to. */
++ movl oEIP(%eax), %ecx
++
++ /* Load the new stack pointer. */
++ cfi_def_cfa (eax, 0)
++ cfi_offset (edi, oEDI)
++ cfi_offset (esi, oESI)
++ cfi_offset (ebp, oEBP)
++ cfi_offset (ebx, oEBX)
++ cfi_offset (edx, oEDX)
++ cfi_offset (ecx, oECX)
++ movl oESP(%eax), %esp
++
++ /* Push the return address on the new stack so we can return there. */
++ pushl %ecx
++
++ /* Load the values of all the 32-bit registers (except ESP).
++ Since we are loading from EAX, it must be last. */
++ movl oEDI(%eax), %edi
++ movl oESI(%eax), %esi
++ movl oEBP(%eax), %ebp
++ movl oEBX(%eax), %ebx
++ movl oEDX(%eax), %edx
++ movl oECX(%eax), %ecx
++ movl oEAX(%eax), %eax
++
++ /* End FDE here, we fall into another context. */
++ cfi_endproc
++ cfi_startproc
++
++ /* The following 'ret' will pop the address of the code and jump
++ to it. */
++
++L(pseudo_end):
++ ret
++PSEUDO_END(__setcontext)
++
++weak_alias (__setcontext, setcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/setjmp.S uClibc-git/libc/sysdeps/linux/i386/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+-
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .global __sigsetjmp
+ .type __sigsetjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sigaction.c uClibc-git/libc/sysdeps/linux/i386/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA.
++ see <http://www.gnu.org/licenses/>.
+
+ Totally hacked up for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+@@ -27,9 +26,6 @@
+
+ #define SA_RESTORER 0x04000000
+
+-extern __typeof(sigaction) __libc_sigaction;
+-
+-
+ #if defined __NR_rt_sigaction
+
+ extern void restore_rt(void) __asm__ ("__restore_rt") attribute_hidden;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/swapcontext.S uClibc-git/libc/sysdeps/linux/i386/swapcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/swapcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/swapcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,110 @@
++/* Save current context and install the given one.
++ Copyright (C) 2001-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++ENTRY(__swapcontext)
++ /* Load address of the context data structure we save in. */
++ movl 4(%esp), %eax
++
++ /* Return value of swapcontext. EAX is the only register whose
++ value is not preserved. */
++ movl $0, oEAX(%eax)
++
++ /* Save the 32-bit register values and the return address. */
++ movl %ecx, oECX(%eax)
++ movl %edx, oEDX(%eax)
++ movl %edi, oEDI(%eax)
++ movl %esi, oESI(%eax)
++ movl %ebp, oEBP(%eax)
++ movl (%esp), %ecx
++ movl %ecx, oEIP(%eax)
++ leal 4(%esp), %ecx
++ movl %ecx, oESP(%eax)
++ movl %ebx, oEBX(%eax)
++
++ /* Save the FS segment register. */
++ xorl %edx, %edx
++ movw %fs, %dx
++ movl %edx, oFS(%eax)
++
++ /* We have separate floating-point register content memory on the
++ stack. We use the __fpregs_mem block in the context. Set the
++ links up correctly. */
++ leal oFPREGSMEM(%eax), %ecx
++ movl %ecx, oFPREGS(%eax)
++ /* Save the floating-point context. */
++ fnstenv (%ecx)
++
++ /* Load address of the context data structure we have to load. */
++ movl 8(%esp), %ecx
++
++ /* Save the current signal mask and install the new one. */
++ pushl %ebx
++ leal oSIGMASK(%eax), %edx
++ leal oSIGMASK(%ecx), %ecx
++ movl $SIG_SETMASK, %ebx
++ movl $__NR_sigprocmask, %eax
++ ENTER_KERNEL
++ popl %ebx
++ cmpl $-4095, %eax /* Check %eax for error. */
++ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
++
++ /* EAX was modified, reload it. */
++ movl 8(%esp), %eax
++
++ /* Restore the floating-point context. Not the registers, only the
++ rest. */
++ movl oFPREGS(%eax), %ecx
++ fldenv (%ecx)
++
++ /* Restore the FS segment register. We don't touch the GS register
++ since it is used for threads. */
++ movl oFS(%eax), %edx
++ movw %dx, %fs
++
++ /* Fetch the address to return to. */
++ movl oEIP(%eax), %ecx
++
++ /* Load the new stack pointer. */
++ movl oESP(%eax), %esp
++
++ /* Push the return address on the new stack so we can return there. */
++ pushl %ecx
++
++ /* Load the values of all the 32-bit registers (except ESP).
++ Since we are loading from EAX, it must be last. */
++ movl oEDI(%eax), %edi
++ movl oESI(%eax), %esi
++ movl oEBP(%eax), %ebp
++ movl oEBX(%eax), %ebx
++ movl oEDX(%eax), %edx
++ movl oECX(%eax), %ecx
++ movl oEAX(%eax), %eax
++
++ /* The following 'ret' will pop the address of the code and jump
++ to it. */
++L(pseudo_end):
++ ret
++PSEUDO_END(__swapcontext)
++
++weak_alias (__swapcontext, swapcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sync_file_range.S uClibc-git/libc/sysdeps/linux/i386/sync_file_range.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sync_file_range.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sync_file_range.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _ERRNO_H 1
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/debugreg.h uClibc-git/libc/sysdeps/linux/i386/sys/debugreg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/debugreg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/debugreg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_DEBUGREG_H
+ #define _SYS_DEBUGREG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/elf.h uClibc-git/libc/sysdeps/linux/i386/sys/elf.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/elf.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/elf.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ELF_H
+ #define _SYS_ELF_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/io.h uClibc-git/libc/sysdeps/linux/i386/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+ #define _SYS_IO_H 1
+@@ -33,7 +32,6 @@
+ E.g., Linux/Alpha for Alpha PCs supports this. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to
+ access any I/O port is granted. This call requires root
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/perm.h uClibc-git/libc/sysdeps/linux/i386/sys/perm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/perm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/perm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PERM_H
+
+@@ -26,7 +25,6 @@
+ /* Set port input/output permissions. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+
+ /* Change I/O privilege level. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/procfs.h uClibc-git/libc/sysdeps/linux/i386/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/reg.h uClibc-git/libc/sysdeps/linux/i386/sys/reg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/reg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/reg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_REG_H
+ #define _SYS_REG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/ucontext.h uClibc-git/libc/sysdeps/linux/i386/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/user.h uClibc-git/libc/sysdeps/linux/i386/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/vm86.h uClibc-git/libc/sysdeps/linux/i386/sys/vm86.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sys/vm86.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sys/vm86.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_VM86_H
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/sysdep.h uClibc-git/libc/sysdeps/linux/i386/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINUX_I386_SYSDEP_H
+ #define _LINUX_I386_SYSDEP_H 1
+@@ -44,12 +43,9 @@
+ incomplete stabs information. Fake some entries here which specify
+ the current source file. */
+ #define ENTRY(name) \
+- STABS_CURRENT_FILE1("") \
+- STABS_CURRENT_FILE(name) \
+ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
+ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
+ .align ALIGNARG(4); \
+- STABS_FUN(name) \
+ C_LABEL(name) \
+ cfi_startproc; \
+ CALL_MCOUNT
+@@ -58,30 +54,6 @@
+ #define END(name) \
+ cfi_endproc; \
+ ASM_SIZE_DIRECTIVE(name) \
+- STABS_FUN_END(name)
+-
+-#ifdef HAVE_CPP_ASM_DEBUGINFO
+-/* Disable that goop, because we just pass -g through to the assembler
+- and it generates proper line number information directly. */
+-# define STABS_CURRENT_FILE1(name)
+-# define STABS_CURRENT_FILE(name)
+-# define STABS_FUN(name)
+-# define STABS_FUN_END(name)
+-#else
+-/* Remove the following two lines once the gdb bug is fixed. */
+-#define STABS_CURRENT_FILE(name) \
+- STABS_CURRENT_FILE1 (#name)
+-#define STABS_CURRENT_FILE1(name) \
+- 1: .stabs name,100,0,0,1b;
+-/* Emit stabs definition lines. We use F(0,1) and define t(0,1) as `int',
+- the same way gcc does it. */
+-#define STABS_FUN(name) STABS_FUN2(name, name##:F(0,1))
+-#define STABS_FUN2(name, namestr) \
+- .stabs "int:t(0,1)=r(0,1);-2147483648;2147483647;",128,0,0,0; \
+- .stabs #namestr,36,0,0,name;
+-#define STABS_FUN_END(name) \
+- 1: .stabs "",36,0,0,1b-name;
+-#endif
+
+ /* If compiled for profiling, call `mcount' at the start of each function. */
+ #ifdef PROF
+@@ -150,10 +122,6 @@
+ #undef __i686
+ #endif /* __ASSEMBLER__ */
+
+-#ifndef offsetof
+-# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+-#endif
+-
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
+ of the kernel. But these symbols do not follow the SYS_* syntax
+@@ -227,8 +195,6 @@
+ #define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
+-#define ret_ERRVAL ret
+-
+ #ifndef __PIC__
+ # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
+ #else
+@@ -444,6 +410,7 @@
+ # define PTR_DEMANGLE(reg) rorl $9, reg; \
+ xorl %gs:POINTER_GUARD, reg
+ # else
++# include <stddef.h>
+ # define PTR_MANGLE(var) __asm__ ("xorl %%gs:%c2, %0\n" \
+ "roll $9, %0" \
+ : "=r" (var) \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/ucontext_i.sym uClibc-git/libc/sysdeps/linux/i386/ucontext_i.sym
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/ucontext_i.sym 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/i386/ucontext_i.sym 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,30 @@
++#include <stddef.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++
++--
++
++SIG_BLOCK
++SIG_SETMASK
++
++#define ucontext(member) offsetof (ucontext_t, member)
++#define mcontext(member) ucontext (uc_mcontext.member)
++#define mreg(reg) mcontext (gregs[REG_##reg])
++
++oLINK ucontext (uc_link)
++oSS_SP ucontext (uc_stack.ss_sp)
++oSS_SIZE ucontext (uc_stack.ss_size)
++oGS mreg (GS)
++oFS mreg (FS)
++oEDI mreg (EDI)
++oESI mreg (ESI)
++oEBP mreg (EBP)
++oESP mreg (ESP)
++oEBX mreg (EBX)
++oEDX mreg (EDX)
++oECX mreg (ECX)
++oEAX mreg (EAX)
++oEIP mreg (EIP)
++oFPREGS mcontext (fpregs)
++oSIGMASK ucontext (uc_sigmask)
++oFPREGSMEM ucontext (__fpregs_mem)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i386/vfork.S uClibc-git/libc/sysdeps/linux/i386/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i386/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i386/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -38,4 +38,4 @@
+ .size __vfork,.-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/bits/fcntl.h uClibc-git/libc/sysdeps/linux/i960/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #define __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/bits/wordsize.h uClibc-git/libc/sysdeps/linux/i960/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/clone.S uClibc-git/libc/sysdeps/linux/i960/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ # details.
+ #
+ # You should have received a copy of the GNU Library General Public License
+-# along with this program; if not, write to the Free Software Foundation, Inc.,
+-# at 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # Derived from an old port of uC-libc to the i960 by Keith Adams (kma@cse.ogi.edu).
+ #
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/crt0.S uClibc-git/libc/sysdeps/linux/i960/crt0.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/crt0.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/crt0.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ # details.
+ #
+ # You should have received a copy of the GNU Library General Public License
+-# along with this program; if not, write to the Free Software Foundation, Inc.,
+-# at 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+
+ /*
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/mmap.S uClibc-git/libc/sysdeps/linux/i960/mmap.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/mmap.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/mmap.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ # details.
+ #
+ # You should have received a copy of the GNU Library General Public License
+-# along with this program; if not, write to the Free Software Foundation, Inc.,
+-# at 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # Derived from an old port of uC-libc to the i960 by Keith Adams (kma@cse.ogi.edu).
+ #
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/setjmp.S uClibc-git/libc/sysdeps/linux/i960/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -122,3 +122,5 @@
+ mov 1, g0 /* return 1 by default */
+ 0:
+ ret /* return to caller of __sigsetjmp */
++
++libc_hidden_def(__longjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/sys/procfs.h uClibc-git/libc/sysdeps/linux/i960/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/sys/ucontext.h uClibc-git/libc/sysdeps/linux/i960/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Don't rely on this, the interface is currently messed up and may need to
+ be broken to be fixed. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/i960/vfork.S uClibc-git/libc/sysdeps/linux/i960/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/i960/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/i960/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -18,6 +18,7 @@
+
+ .globl ___vfork
+ .hidden ___vfork
++ .type ___vfork,@function
+ ___vfork:
+ mov g13, r3
+ ldconst __NR_vfork, g13
+@@ -30,4 +31,4 @@
+ ret
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/atomic.h uClibc-git/libc/sysdeps/linux/ia64/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdint.h>
+ #include <ia64intrin.h>
+@@ -92,12 +91,12 @@
+ do \
+ { \
+ __oldval = __val; \
+- if (__builtin_expect (__val <= 0, 0)) \
++ if (unlikely (__val <= 0)) \
+ break; \
+ __val = atomic_compare_and_exchange_val_acq (__memp, __oldval - 1, \
+ __oldval); \
+ } \
+- while (__builtin_expect (__val != __oldval, 0)); \
++ while (unlikely (__val != __oldval)); \
+ __oldval; })
+
+ #define atomic_bit_test_set(mem, bit) \
+@@ -113,7 +112,7 @@
+ __oldval | __mask, \
+ __oldval); \
+ } \
+- while (__builtin_expect (__val != __oldval, 0)); \
++ while (unlikely (__val != __oldval)); \
+ __oldval & __mask; })
+
+ #define atomic_full_barrier() __sync_synchronize ()
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/byteswap.h uClibc-git/libc/sysdeps/linux/ia64/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ASM_BITS_BYTESWAP_H
+ #define _ASM_BITS_BYTESWAP_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/fcntl.h uClibc-git/libc/sysdeps/linux/ia64/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/fenv.h uClibc-git/libc/sysdeps/linux/ia64/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -73,15 +72,15 @@
+ typedef unsigned long int fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) 0xc009804c0270033fUL)
++#define FE_DFL_ENV ((const fenv_t *) 0xc009804c0270033fUL)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where only FE_UNNORMAL is masked since this
+ exception is not generally supported by glibc. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) 0xc009804c02700302UL)
++# define FE_NOMASK_ENV ((const fenv_t *) 0xc009804c02700302UL)
+
+ /* Floating-point environment with (processor-dependent) non-IEEE
+ floating point. In this case, turning on flush-to-zero mode for
+ s0, s2, and s3. */
+-# define FE_NONIEEE_ENV ((__const fenv_t *) 0xc009a04d0270037fUL)
++# define FE_NONIEEE_ENV ((const fenv_t *) 0xc009a04d0270037fUL)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/huge_vall.h uClibc-git/libc/sysdeps/linux/ia64/bits/huge_vall.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/huge_vall.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/huge_vall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,41 @@
++/* `HUGE_VALL' constant for ia64 (where it is infinity).
++ Used by <stdlib.h> and <math.h> functions for overflow.
++ Copyright (C) 2000, 2004 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _MATH_H
++# error "Never use <bits/huge_vall.h> directly; include <math.h> instead."
++#endif
++
++#if __GNUC_PREREQ(3,3)
++# define HUGE_VALL (__builtin_huge_vall())
++#elif __GNUC_PREREQ(2,96)
++# define HUGE_VALL (__extension__ 0x1.0p32767L)
++#else
++
++# define __HUGE_VALL_bytes { 0,0,0,0,0,0,0, 0x80, 0xff, 0x7f, 0,0,0,0,0,0}
++
++# define __huge_vall_t union { unsigned char __c[16]; long double __ld; }
++# ifdef __GNUC__
++# define HUGE_VALL (__extension__ \
++ ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
++# else /* Not GCC. */
++static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
++# define HUGE_VALL (__huge_vall.__ld)
++# endif /* GCC. */
++
++#endif /* GCC 2.95 */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/ipc.h uClibc-git/libc/sysdeps/linux/ia64/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/ia64/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -52,5 +52,7 @@
+
+ typedef unsigned int __kernel_dev_t;
+ typedef unsigned int __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ #endif /* _ASM_IA64_POSIX_TYPES_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/local_lim.h uClibc-git/libc/sysdeps/linux/ia64/bits/local_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/local_lim.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/local_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,99 @@
++/* Minimum guaranteed maximum values for system limits. Linux/IA-64 version.
++ Copyright (C) 1993-1998,2000,2002-2004,2008 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ see <http://www.gnu.org/licenses/>. */
++
++/* The kernel header pollutes the namespace with the NR_OPEN symbol
++ and defines LINK_MAX although filesystems have different maxima. A
++ similar thing is true for OPEN_MAX: the limit can be changed at
++ runtime and therefore the macro must not be defined. Remove this
++ after including the header if necessary. */
++#ifndef NR_OPEN
++# define __undef_NR_OPEN
++#endif
++#ifndef LINK_MAX
++# define __undef_LINK_MAX
++#endif
++#ifndef OPEN_MAX
++# define __undef_OPEN_MAX
++#endif
++#ifndef ARG_MAX
++# define __undef_ARG_MAX
++#endif
++
++/* The kernel sources contain a file with all the needed information. */
++#include <linux/limits.h>
++
++/* Have to remove NR_OPEN? */
++#ifdef __undef_NR_OPEN
++# undef NR_OPEN
++# undef __undef_NR_OPEN
++#endif
++/* Have to remove LINK_MAX? */
++#ifdef __undef_LINK_MAX
++# undef LINK_MAX
++# undef __undef_LINK_MAX
++#endif
++/* Have to remove OPEN_MAX? */
++#ifdef __undef_OPEN_MAX
++# undef OPEN_MAX
++# undef __undef_OPEN_MAX
++#endif
++/* Have to remove ARG_MAX? */
++#ifdef __undef_ARG_MAX
++# undef ARG_MAX
++# undef __undef_ARG_MAX
++#endif
++
++/* The number of data keys per process. */
++#define _POSIX_THREAD_KEYS_MAX 128
++/* This is the value this implementation supports. */
++#define PTHREAD_KEYS_MAX 1024
++
++/* Controlling the iterations of destructors for thread-specific data. */
++#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
++/* Number of iterations this implementation does. */
++#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
++
++/* The number of threads per process. */
++#define _POSIX_THREAD_THREADS_MAX 64
++/* We have no predefined limit on the number of threads. */
++#undef PTHREAD_THREADS_MAX
++
++/* Maximum amount by which a process can descrease its asynchronous I/O
++ priority level. */
++#define AIO_PRIO_DELTA_MAX 20
++
++/* Minimum size for a thread. We are free to choose a reasonable value. */
++#define PTHREAD_STACK_MIN 196608
++
++/* Maximum number of timer expiration overruns. */
++#define DELAYTIMER_MAX 2147483647
++
++/* Maximum tty name length. */
++#define TTY_NAME_MAX 32
++
++/* Maximum login name length. This is arbitrary. */
++#define LOGIN_NAME_MAX 256
++
++/* Maximum host name length. */
++#define HOST_NAME_MAX 64
++
++/* Maximum message queue priority level. */
++#define MQ_PRIO_MAX 32768
++
++/* Maximum value the semaphore can have. */
++#define SEM_VALUE_MAX (2147483647)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/mathdef.h uClibc-git/libc/sysdeps/linux/ia64/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/mathinline.h uClibc-git/libc/sysdeps/linux/ia64/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/mathinline.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/msq.h uClibc-git/libc/sysdeps/linux/ia64/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ #error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sem.h uClibc-git/libc/sysdeps/linux/ia64/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/setjmp.h uClibc-git/libc/sysdeps/linux/ia64/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,5 +1,5 @@
+ /* Define the machine-dependent type `jmp_buf'. Linux/IA-64 version.
+- Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
++ Copyright (C) 1999,2000,2003,2005,2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David Mosberger-Tang <davidm@hpl.hp.com>.
+
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+@@ -32,9 +31,4 @@
+ /* the __jmp_buf element type should be __float80 per ABI... */
+ typedef long __jmp_buf[_JBLEN] __attribute__ ((aligned (16))); /* guarantees 128-bit alignment! */
+
+-/* Test if longjmp to JMPBUF would unwind the frame containing a local
+- variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
+- ((void *)(_address) < (void *)(((long *)_jmpbuf)[0]))
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/shm.h uClibc-git/libc/sysdeps/linux/ia64/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sigaction.h uClibc-git/libc/sysdeps/linux/ia64/bits/sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/ia64/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sigcontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+ # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/siginfo.h uClibc-git/libc/sysdeps/linux/ia64/bits/siginfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/siginfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/siginfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined __need_siginfo_t \
+ && !defined __need_sigevent_t
+@@ -298,7 +297,11 @@
+
+ /* Structure to transport application-defined values with signals. */
+ # define __SIGEV_MAX_SIZE 64
+-# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
++# if __WORDSIZE == 64
++# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
++# else
++# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
++# endif
+
+ typedef struct sigevent
+ {
+@@ -310,6 +313,10 @@
+ {
+ int _pad[__SIGEV_PAD_SIZE];
+
++ /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
++ thread to receive the signal. */
++ __pid_t _tid;
++
+ struct
+ {
+ void (*_function) (sigval_t); /* Function to start. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sigstack.h uClibc-git/libc/sysdeps/linux/ia64/bits/sigstack.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/sigstack.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/sigstack.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include this file directly. Use <signal.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/ia64/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/stat.h uClibc-git/libc/sysdeps/linux/ia64/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/syscalls.h uClibc-git/libc/sysdeps/linux/ia64/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SYSCALLS_H
+ #define _BITS_SYSCALLS_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/ia64/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/wordsize.h uClibc-git/libc/sysdeps/linux/ia64/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 64
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/brk.S uClibc-git/libc/sysdeps/linux/ia64/brk.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/brk.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/brk.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/clone2.S uClibc-git/libc/sysdeps/linux/ia64/clone2.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/clone2.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/clone2.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/crt1.S uClibc-git/libc/sysdeps/linux/ia64/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __ASSEMBLY__
+ #include "sysdep.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/fork.S uClibc-git/libc/sysdeps/linux/ia64/fork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/fork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/fork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include "sysdep.h"
+@@ -24,7 +23,10 @@
+ /* pid_t fork(void); */
+ /* Implemented as a clone system call with parameters SIGCHLD and 0 */
+
+-ENTRY(__libc_fork)
++#ifdef __UCLIBC_HAS_THREADS__
++.weak fork
++#endif
++ENTRY(fork)
+ alloc r2=ar.pfs,0,0,2,0
+ mov out0=SIGCHLD /* Return SIGCHLD when child finishes */
+ /* no other clone flags; nothing shared */
+@@ -34,9 +36,8 @@
+ cmp.eq p6,p0=-1,r10
+ (p6) br.cond.spnt.few __syscall_error
+ ret
+-PSEUDO_END(__libc_fork)
+-
+-weak_alias (__libc_fork, __fork)
+-libc_hidden_def (__fork)
+-weak_alias (__libc_fork, fork)
+-libc_hidden_weak (fork)
++PSEUDO_END(fork)
++#ifdef __UCLIBC_HAS_THREADS__
++strong_alias(fork,__libc_fork)
++#endif
++libc_hidden_def(fork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/ia64/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/ia64/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
++ ((void *)(_address) < (void *)(((long *)_jmpbuf)[0]))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/__longjmp.S uClibc-git/libc/sysdeps/linux/ia64/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
+
+ Note that __sigsetjmp() did NOT flush the register stack. Instead,
+ we do it here since __longjmp() is usually much less frequently
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/Makefile.arch uClibc-git/libc/sysdeps/linux/ia64/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __syscall_error.c
++CSRC-y := __syscall_error.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S brk.S bsd-setjmp.S bsd-_setjmp.S clone2.S fork.S \
+ pipe.S setjmp.S syscall.S vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/pipe.S uClibc-git/libc/sysdeps/linux/ia64/pipe.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/pipe.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/pipe.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* __pipe is a special syscall since it returns two values. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/setjmp.S uClibc-git/libc/sysdeps/linux/ia64/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
+
+ The layout of the jmp_buf is as follows. This is subject to change
+ and user-code should never depend on the particular layout of
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/io.h uClibc-git/libc/sysdeps/linux/ia64/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+ #define _SYS_IO_H 1
+@@ -24,6 +23,7 @@
+
+ __BEGIN_DECLS
+
++#if defined __UCLIBC_LINUX_SPECIFIC__
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges.
+@@ -33,12 +33,12 @@
+ E.g., Linux/Alpha for Alpha PCs supports this. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on);
+-libc_hidden_proto(ioperm)
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to
+ access any I/O port is granted. This call requires root
+ privileges. */
+ extern int iopl (int __level);
++#endif /* __UCLIBC_LINUX_SPECIFIC__ */
+
+ extern unsigned int _inb (unsigned long int __port);
+ extern unsigned int _inb (unsigned long int __port);
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/procfs.h uClibc-git/libc/sysdeps/linux/ia64/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/ptrace.h uClibc-git/libc/sysdeps/linux/ia64/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/ucontext.h uClibc-git/libc/sysdeps/linux/ia64/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/user.h uClibc-git/libc/sysdeps/linux/ia64/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/syscall.S uClibc-git/libc/sysdeps/linux/ia64/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sysdep.h uClibc-git/libc/sysdeps/linux/ia64/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINUX_IA64_SYSDEP_H
+ #define _LINUX_IA64_SYSDEP_H 1
+
++#include <common/sysdep.h>
+ #include <features.h>
+ #include <asm/unistd.h>
+
+@@ -49,6 +49,15 @@
+ C_LABEL(name) \
+ CALL_MCOUNT
+
++#define HIDDEN_ENTRY(name) \
++ .text; \
++ .align 32; \
++ .proc C_SYMBOL_NAME(name); \
++ .global C_SYMBOL_NAME(name); \
++ .hidden C_SYMBOL_NAME(name); \
++ C_LABEL(name) \
++ CALL_MCOUNT
++
+ #define LEAF(name) \
+ .text; \
+ .align 32; \
+@@ -161,7 +170,6 @@
+
+ #define ret br.ret.sptk.few b0
+ #define ret_NOERRNO ret
+-#define ret_ERRVAL ret
+
+ #endif /* not __ASSEMBLER__ */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/ia64/vfork.S uClibc-git/libc/sysdeps/linux/ia64/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/ia64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/ia64/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include "sysdep.h"
+@@ -29,7 +28,7 @@
+ /* pid_t vfork(void); */
+ /* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
+
+-ENTRY(__vfork)
++HIDDEN_ENTRY(__vfork)
+ alloc r2=ar.pfs,0,0,2,0
+ mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
+ mov out1=0 /* Standard sp value. */
+@@ -41,4 +40,4 @@
+ PSEUDO_END(__vfork)
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/byteswap.h uClibc-git/libc/sysdeps/linux/m68k/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ASM_BITS_BYTESWAP_H
+ #define _ASM_BITS_BYTESWAP_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/fcntl.h uClibc-git/libc/sysdeps/linux/m68k/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/fenv.h uClibc-git/libc/sysdeps/linux/m68k/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -71,9 +70,9 @@
+ fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) -1)
++#define FE_DFL_ENV ((const fenv_t *) -1)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where none of the exceptions are masked. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) -2)
++# define FE_NOMASK_ENV ((const fenv_t *) -2)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/huge_vall.h uClibc-git/libc/sysdeps/linux/m68k/bits/huge_vall.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/huge_vall.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/huge_vall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,42 @@
++/* `HUGE_VALL' constant for m68k (where it is infinity).
++ Used by <stdlib.h> and <math.h> functions for overflow.
++ Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000, 2004
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _MATH_H
++# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
++#endif
++
++#if __GNUC_PREREQ(3,3)
++# define HUGE_VALL (__builtin_huge_vall ())
++#elif __GNUC_PREREQ(2,96)
++# define HUGE_VALL (__extension__ 0x1.0p32767L)
++#elif defined__GNUC__
++
++# define HUGE_VALL \
++ (__extension__ \
++ ((union { unsigned long __l[3]; long double __ld; }) \
++ { __l: { 0x7fff0000UL, 0x80000000UL, 0UL } }).__ld)
++
++#else /* not GCC */
++
++static union { unsigned char __c[12]; long double __ld; } __huge_vall =
++ { { 0x7f, 0xff, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0 } };
++# define HUGE_VALL (__huge_vall.__ld)
++
++#endif /* GCC 2.95. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/m68k/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef unsigned short __kernel_old_gid_t;
+ typedef long long __kernel_loff_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ #ifdef __USE_ALL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/mathdef.h uClibc-git/libc/sysdeps/linux/m68k/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/mathinline.h uClibc-git/libc/sysdeps/linux/m68k/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef __GNUC__
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/poll.h uClibc-git/libc/sysdeps/linux/m68k/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/setjmp.h uClibc-git/libc/sysdeps/linux/m68k/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. m68k version. */
+ #ifndef _BITS_SETJMP_H
+@@ -25,7 +24,7 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
++#include <features.h>
+
+ typedef struct
+ {
+@@ -37,7 +36,7 @@
+ int *__fp;
+ int *__sp;
+
+-#if defined __HAVE_68881__ || defined __HAVE_FPU__
++#if defined __HAVE_68881__ || defined __UCLIBC_HAS_FPU__
+ /* There are eight floating point registers which
+ are saved in IEEE 96-bit extended format. */
+ char __fpregs[8 * (96 / 8)];
+@@ -45,24 +44,4 @@
+
+ } __jmp_buf[1];
+
+-#endif
+-
+-#define JB_REGS 0
+-#define JB_DREGS 0
+-#define JB_AREGS 24
+-#define JB_PC 48
+-#define JB_FPREGS 52
+-
+-#if defined __HAVE_68881__ || defined __HAVE_FPU__
+-# define JB_SIZE 76
+-#else
+-# define JB_SIZE 52
+-#endif
+-
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)->__aregs[5])
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/m68k/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT int _code, struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS _code,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/m68k/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/stat.h uClibc-git/libc/sysdeps/linux/m68k/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #define __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/m68k/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/wordsize.h uClibc-git/libc/sysdeps/linux/m68k/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/m68k/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -2,9 +2,8 @@
+ /* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
+ /* This file is released under the LGPL, any version you like */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <features.h>
++#include <jmpbuf-offsets.h>
+
+ .globl _setjmp;
+ .type _setjmp,@function
+@@ -14,7 +13,7 @@
+ moveal %sp@(4), %a0
+ movel %sp@(0), %a0@(JB_PC)
+ moveml %d2-%d7/%a2-%a7, %a0@(JB_REGS)
+-#if defined(__HAVE_68881__) || defined(__HAVE_FPU__)
++#if defined __HAVE_68881__ || defined __UCLIBC_HAS_FPU__
+ fmovemx %fp2-%fp7, %a0@(JB_FPREGS)
+ #endif
+ clrl %d0
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/m68k/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -2,9 +2,8 @@
+ /* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
+ /* This file is released under the LGPL, any version you like */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <features.h>
++#include <jmpbuf-offsets.h>
+ #include "m68k_pic.S"
+
+ .globl setjmp;
+@@ -15,7 +14,7 @@
+ moveal %sp@(4), %a0
+ movel %sp@(0), %a0@(JB_PC)
+ moveml %d2-%d7/%a2-%a7, %a0@(JB_REGS)
+-#if defined(__HAVE_68881__) || defined(__HAVE_FPU__)
++#if defined __HAVE_68881__ || defined __UCLIBC_HAS_FPU__
+ fmovemx %fp2-%fp7, %a0@(JB_FPREGS)
+ #endif
+ clrl %d0
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/crt1.S uClibc-git/libc/sysdeps/linux/m68k/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include "m68k_pic.S"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/fpu_control.h uClibc-git/libc/sysdeps/linux/m68k/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/m68k/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/m68k/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,19 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++
++#define JB_REGS 0
++#define JB_DREGS 0
++#define JB_AREGS 24
++#define JB_PC 48
++#define JB_FPREGS 52
++
++#if defined __HAVE_68881__ || defined __UCLIBC_HAS_FPU__
++# define JB_SIZE 76
++#else
++# define JB_SIZE 52
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/m68k/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/m68k/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->__aregs[5])
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/__longjmp.S uClibc-git/libc/sysdeps/linux/m68k/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -2,10 +2,8 @@
+ /* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
+ /* This file is released under the LGPL, any version you like */
+
+-#define _ASM
+-#define _SETJMP_H
+ #include <features.h>
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ .globl __longjmp
+ .type __longjmp,@function
+@@ -17,7 +15,7 @@
+ movel #1, %d0
+ 1:
+ moveml %a0@(JB_REGS), %d2-%d7/%a2-%a7
+-#if defined(__HAVE_68881__) || defined(__HAVE_FPU__)
++#if defined __HAVE_68881__ || defined __UCLIBC_HAS_FPU__
+ fmovemx %a0@(JB_FPREGS), %fp2-%fp7
+ #endif
+ movel %a0@(JB_PC), %sp@
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/Makefile.arch uClibc-git/libc/sysdeps/linux/m68k/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,6 +5,6 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c
++CSRC-y := brk.c __syscall_error.c
+
+-SSRC := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S vfork.S
++SSRC-y := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/setjmp.S uClibc-git/libc/sysdeps/linux/m68k/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -2,9 +2,8 @@
+ /* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
+ /* This file is released under the LGPL, any version you like */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <features.h>
++#include <jmpbuf-offsets.h>
+ #include "m68k_pic.S"
+
+ .globl __sigsetjmp;
+@@ -15,7 +14,7 @@
+ moveal %sp@(4), %a0
+ movel %sp@(0), %a0@(JB_PC)
+ moveml %d2-%d7/%a2-%a7, %a0@(JB_REGS)
+-#if defined(__HAVE_68881__) || defined(__HAVE_FPU__)
++#if defined __HAVE_68881__ || defined __UCLIBC_HAS_FPU__
+ fmovemx %fp2-%fp7, %a0@(JB_FPREGS)
+ #endif
+ clrl %d0
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/sys/procfs.h uClibc-git/libc/sysdeps/linux/m68k/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/sys/reg.h uClibc-git/libc/sysdeps/linux/m68k/sys/reg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/sys/reg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/sys/reg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_REG_H
+ #define _SYS_REG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/sys/ucontext.h uClibc-git/libc/sysdeps/linux/m68k/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* System V/m68k ABI compliant context switching support. */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/m68k/vfork.S uClibc-git/libc/sysdeps/linux/m68k/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/m68k/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/m68k/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -4,9 +4,7 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-
+-#include <asm/unistd.h>
++#include <sys/syscall.h>
+
+ #ifndef __NR_vfork
+ #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
+@@ -16,7 +14,6 @@
+
+ .text
+ .align 2
+- .globl errno
+ .globl __vfork
+ .hidden __vfork
+ .type __vfork,@function
+@@ -42,4 +39,4 @@
+
+ .size __vfork,.-__vfork
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/Makefile.commonarch uClibc-git/libc/sysdeps/linux/Makefile.commonarch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/Makefile.commonarch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/Makefile.commonarch 2014-02-03 12:32:56.000000000 +0100
+@@ -8,15 +8,15 @@
+ ARCH_DIR := $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)
+ ARCH_OUT := $(top_builddir)libc/sysdeps/linux/$(TARGET_ARCH)
+
+-ARCH_CSRC := $(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
+-ARCH_COBJ := $(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
+-ARCH_SSRC = $(patsubst %.s,$(ARCH_DIR)/%.s,$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC)))
+-ARCH_SOBJ = $(patsubst %.s,$(ARCH_OUT)/%.o,$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC)))
++ARCH_CSRC := $(addprefix $(ARCH_DIR)/,$(CSRC-y))
++ARCH_COBJ := $(addprefix $(ARCH_OUT)/,$(CSRC-y:.c=.o))
++ARCH_SSRC = $(addprefix $(ARCH_DIR)/,$(SSRC-y))
++ARCH_SOBJ = $(patsubst %.s,%.o,$(patsubst %.S,%.o,$(addprefix $(ARCH_OUT)/,$(SSRC-y))))
+
+-ARCH_OBJS = $(ARCH_COBJ) $(ARCH_SOBJ)
++ARCH_OBJS-y = $(ARCH_COBJ) $(ARCH_SOBJ)
+
+ crt-y := FORCE
+-libc-y += $(ARCH_OBJS)
++libc-y += $(ARCH_OBJS-y)
+ libc-nomulti-y += $(ARCH_SOBJ)
+ objclean-y += CLEAN_$(subst $(top_builddir),,$(ARCH_OUT))
+
+@@ -37,5 +37,23 @@
+ headers_clean-y += HEADERCLEAN_$(subst $(top_builddir),,$(ARCH_OUT))
+ HEADERCLEAN_$(subst $(top_builddir),,$(ARCH_OUT)):
+ $(do_rm) $(ARCH_HEADERS_OUT)
+-
+ endif
++
++CFLAGS-ucontext_i.c = -S
++
++$(ARCH_OUT)/ucontext_i.c: $(ARCH_DIR)/ucontext_i.sym
++ $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
++
++$(ARCH_OUT)/ucontext_i.s: $(ARCH_OUT)/ucontext_i.c
++ $(compile.c)
++
++$(ARCH_OUT)/ucontext_i.h: $(ARCH_OUT)/ucontext_i.s
++ $(do_sed) $(PTHREAD_GENERATE_MANGLE) $< > $@
++
++pregen-headers-$(UCLIBC_HAS_CONTEXT_FUNCS) += $(ARCH_OUT)/ucontext_i.h
++
++headers_clean-$(UCLIBC_HAS_CONTEXT_FUNCS) += \
++ HEADERCLEAN_$(subst $(top_builddir),,$(ARCH_OUT)/ucontext_i)
++
++HEADERCLEAN_$(subst $(top_builddir),,$(ARCH_OUT)/ucontext_i):
++ $(do_rm) $(addprefix $(ARCH_OUT)/ucontext_i., c h s)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/atomic.h uClibc-git/libc/sysdeps/linux/metag/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/atomic.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,66 @@
++/*
++ * Copyrith (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ */
++
++#include <stdint.h>
++#include <sysdep.h>
++
++typedef int8_t atomic8_t;
++typedef uint8_t uatomic8_t;
++typedef int_fast8_t atomic_fast8_t;
++typedef uint_fast8_t uatomic_fast8_t;
++
++typedef int32_t atomic32_t;
++typedef uint32_t uatomic32_t;
++typedef int_fast32_t atomic_fast32_t;
++typedef uint_fast32_t uatomic_fast32_t;
++
++typedef intptr_t atomicptr_t;
++typedef uintptr_t uatomicptr_t;
++typedef intmax_t atomic_max_t;
++typedef uintmax_t uatomic_max_t;
++
++void __metag_link_error (void);
++
++#define atomic_full_barrier() \
++ __asm__ __volatile__("": : :"memory")
++
++/* Atomic compare and exchange. This sequence relies on the kernel to
++ provide a compare and exchange operation which is atomic. */
++
++#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
++ ({ __metag_link_error (); oldval; })
++
++#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
++ ({ __metag_link_error (); oldval; })
++
++/* This code uses the kernel helper to do cmpxchg. It relies on the fact
++ the helper code only clobbers D0Re0. */
++#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
++ ({ register __typeof (oldval) a_current __asm__ ("D1Ar1"); \
++ register __typeof (oldval) a_newval __asm__ ("D0Ar2") = (newval); \
++ register __typeof (mem) a_ptr __asm__ ("D1Ar3") = (mem); \
++ register __typeof (oldval) a_oldval __asm__ ("D0Ar4") = (oldval); \
++ __asm__ __volatile__ \
++ ("0:\n\t" \
++ "GETD %[cur], [%[ptr]]\n\t" \
++ "CMP %[cur], %[old]\n\t" \
++ "BNE 1f\n\t" \
++ "MOVT D1RtP, #0x6fff\n\t" \
++ "ADD D1RtP, D1RtP, #0xf040\n\t" \
++ "SWAP D1RtP, PC\n\t" \
++ "MOV %[cur], %[old]\n\t" \
++ "CMP D0Re0, #0\n\t" \
++ "BNE 0b\n\t" \
++ "1:" \
++ : [cur] "=&r" (a_current) \
++ : [new] "r" (a_newval), [ptr] "r" (a_ptr), \
++ [old] "r" (a_oldval) \
++ : "D0Re0", "D1RtP", "cc", "memory"); \
++ a_current; })
++
++#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
++ ({ __metag_link_error (); oldval; })
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/endian.h uClibc-git/libc/sysdeps/linux/metag/bits/endian.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/endian.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/endian.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,12 @@
++/* Meta is little endian
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _ENDIAN_H
++# error "Never use <bits/endian.h> directly; include <endian.h> instead."
++#endif
++
++#define __BYTE_ORDER __LITTLE_ENDIAN
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/fcntl.h uClibc-git/libc/sysdeps/linux/metag/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,238 @@
++/* O_*, F_*, FD_* bit values for Linux.
++ Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2008
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _FCNTL_H
++# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
++#endif
++
++#include <sys/types.h>
++#ifdef __USE_GNU
++# include <bits/uio.h>
++#endif
++
++
++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
++ located on an ext2 file system */
++#define O_ACCMODE 0003
++#define O_RDONLY 00
++#define O_WRONLY 01
++#define O_RDWR 02
++#define O_CREAT 0100 /* not fcntl */
++#define O_EXCL 0200 /* not fcntl */
++#define O_NOCTTY 0400 /* not fcntl */
++#define O_TRUNC 01000 /* not fcntl */
++#define O_APPEND 02000
++#define O_NONBLOCK 04000
++#define O_NDELAY O_NONBLOCK
++#define O_SYNC 010000
++#define O_FSYNC O_SYNC
++#define O_ASYNC 020000
++
++#ifdef __USE_GNU
++# define O_DIRECT 040000 /* Direct disk access. */
++# define O_DIRECTORY 0200000 /* Must be a directory. */
++# define O_NOFOLLOW 0400000 /* Do not follow links. */
++# define O_NOATIME 01000000 /* Do not set atime. */
++# define O_CLOEXEC 02000000 /* Set close_on_exec. */
++#endif
++
++/* For now Linux has synchronisity options for data and read operations.
++ We define the symbols here but let them do the same as O_SYNC since
++ this is a superset. */
++#if defined __USE_POSIX199309 || defined __USE_UNIX98
++# define O_DSYNC O_SYNC /* Synchronize data. */
++# define O_RSYNC O_SYNC /* Synchronize read operations. */
++#endif
++
++#ifdef __USE_LARGEFILE64
++# define O_LARGEFILE 0100000
++#endif
++
++/* Values for the second argument to `fcntl'. */
++#define F_DUPFD 0 /* Duplicate file descriptor. */
++#define F_GETFD 1 /* Get file descriptor flags. */
++#define F_SETFD 2 /* Set file descriptor flags. */
++#define F_GETFL 3 /* Get file status flags. */
++#define F_SETFL 4 /* Set file status flags. */
++#ifndef __USE_FILE_OFFSET64
++# define F_GETLK 5 /* Get record locking info. */
++# define F_SETLK 6 /* Set record locking info (non-blocking). */
++# define F_SETLKW 7 /* Set record locking info (blocking). */
++#else
++# define F_GETLK F_GETLK64 /* Get record locking info. */
++# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
++# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
++#endif
++#define F_GETLK64 12 /* Get record locking info. */
++#define F_SETLK64 13 /* Set record locking info (non-blocking). */
++#define F_SETLKW64 14 /* Set record locking info (blocking). */
++
++#if defined __USE_BSD || defined __USE_UNIX98
++# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
++# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETSIG 10 /* Set number of signal to be sent. */
++# define F_GETSIG 11 /* Get number of signal to be sent. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETLEASE 1024 /* Set a lease. */
++# define F_GETLEASE 1025 /* Enquire what lease is active. */
++# define F_NOTIFY 1026 /* Request notfications on a directory. */
++# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
++ close-on-exit set on new fd. */
++#endif
++
++/* For F_[GET|SET]FD. */
++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
++
++/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
++#define F_RDLCK 0 /* Read lock. */
++#define F_WRLCK 1 /* Write lock. */
++#define F_UNLCK 2 /* Remove lock. */
++
++/* For old implementation of bsd flock(). */
++#define F_EXLCK 4 /* or 3 */
++#define F_SHLCK 8 /* or 4 */
++
++#ifdef __USE_BSD
++/* Operations for bsd flock(), also used by the kernel implementation. */
++# define LOCK_SH 1 /* shared lock */
++# define LOCK_EX 2 /* exclusive lock */
++# define LOCK_NB 4 /* or'd with one of the above to prevent
++ blocking */
++# define LOCK_UN 8 /* remove lock */
++#endif
++
++#ifdef __USE_GNU
++# define LOCK_MAND 32 /* This is a mandatory flock: */
++# define LOCK_READ 64 /* ... which allows concurrent read operations. */
++# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
++# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
++#endif
++
++#ifdef __USE_GNU
++/* Types of directory notifications that may be requested with F_NOTIFY. */
++# define DN_ACCESS 0x00000001 /* File accessed. */
++# define DN_MODIFY 0x00000002 /* File modified. */
++# define DN_CREATE 0x00000004 /* File created. */
++# define DN_DELETE 0x00000008 /* File removed. */
++# define DN_RENAME 0x00000010 /* File renamed. */
++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
++#endif
++
++struct flock
++ {
++ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
++ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
++#ifndef __USE_FILE_OFFSET64
++ __off_t l_start; /* Offset where the lock begins. */
++ __off_t l_len; /* Size of the locked area; zero means until EOF. */
++#else
++ __off64_t l_start; /* Offset where the lock begins. */
++ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
++#endif
++ __pid_t l_pid; /* Process holding the lock. */
++ };
++
++#ifdef __USE_LARGEFILE64
++struct flock64
++ {
++ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
++ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
++ __off64_t l_start; /* Offset where the lock begins. */
++ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
++ __pid_t l_pid; /* Process holding the lock. */
++ };
++#endif
++
++/* Define some more compatibility macros to be backward compatible with
++ BSD systems which did not managed to hide these kernel macros. */
++#ifdef __USE_BSD
++# define FAPPEND O_APPEND
++# define FFSYNC O_FSYNC
++# define FASYNC O_ASYNC
++# define FNONBLOCK O_NONBLOCK
++# define FNDELAY O_NDELAY
++#endif /* Use BSD. */
++
++/* Advise to `posix_fadvise'. */
++#ifdef __USE_XOPEN2K
++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
++#endif
++
++
++#if defined __USE_GNU && defined __UCLIBC_LINUX_SPECIFIC__
++/* Flags for SYNC_FILE_RANGE. */
++# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
++ in the range before performing the
++ write. */
++# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
++ dirty pages in the range which are
++ not presently under writeback. */
++# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
++ the range after performing the
++ write. */
++
++/* Flags for SPLICE and VMSPLICE. */
++# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
++# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
++ (but we may still block on the fd
++ we splice from/to). */
++# define SPLICE_F_MORE 4 /* Expect more data. */
++# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
++#endif
++
++__BEGIN_DECLS
++
++#if defined __USE_GNU && defined __UCLIBC_LINUX_SPECIFIC__
++
++/* Provide kernel hint to read ahead. */
++extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
++ __THROW;
++
++/* Selective file content synch'ing. */
++extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
++ unsigned int __flags);
++
++/* Splice address range into a pipe. */
++extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
++ size_t __count, unsigned int __flags);
++
++/* Splice two files together. */
++extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
++ __off64_t *__offout, size_t __len,
++ unsigned int __flags);
++
++/* In-kernel implementation of tee for pipe buffers. */
++extern ssize_t tee (int __fdin, int __fdout, size_t __len,
++ unsigned int __flags);
++
++#endif
++__END_DECLS
++
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/fenv.h uClibc-git/libc/sysdeps/linux/metag/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/fenv.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,77 @@
++/* Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _FENV_H
++# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
++#endif
++
++
++/* Define bits representing the exception. We use the bit positions
++ of the appropriate bits in TXDEFR. */
++enum
++ {
++ FE_INEXACT = 0x1,
++#define FE_INEXACT FE_INEXACT
++ FE_UNDERFLOW = 0x2,
++#define FE_UNDERFLOW FE_UNDERFLOW
++ FE_OVERFLOW = 0x4,
++#define FE_OVERFLOW FE_OVERFLOW
++ FE_DIVBYZERO = 0x8,
++#define FE_DIVBYZERO FE_DIVBYZERO
++ FE_INVALID = 0x10,
++#define FE_INVALID FE_INVALID
++ };
++
++#define FE_ALL_EXCEPT \
++ (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
++
++/* The Meta FPU supports all of the four defined rounding modes. We
++ use the values of the rounding mode bits in TXMODE as the values
++ for the appropriate macros. */
++enum
++ {
++ FE_TONEAREST = 0x0,
++#define FE_TONEAREST FE_TONEAREST
++ FE_TOWARDZERO = 0x1,
++#define FE_TOWARDZERO FE_TOWARDZERO
++ FE_UPWARD = 0x2,
++#define FE_UPWARD FE_UPWARD
++ FE_DOWNWARD = 0x3
++#define FE_DOWNWARD FE_DOWNWARD
++ };
++
++
++/* Type representing exception flags. */
++typedef unsigned int fexcept_t;
++
++
++/* Type representing floating-point environment. */
++typedef struct
++ {
++ unsigned int txdefr;
++ unsigned int txmode;
++ }
++fenv_t;
++
++/* If the default argument is used we use this value. */
++#define FE_DFL_ENV ((__const fenv_t *) -1)
++
++#ifdef __USE_GNU
++/* Floating-point environment where none of the exception is masked. */
++# define FE_NOMASK_ENV ((__const fenv_t *) -2)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/ipc.h uClibc-git/libc/sysdeps/linux/metag/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/ipc.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,55 @@
++/* Copyright (C) 1995-1999, 2000, 2005, 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
++ Boston, MA 02110-1301, USA. */
++
++#ifndef _SYS_IPC_H
++# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
++#endif
++
++#include <bits/types.h>
++
++/* Mode bits for `msgget', `semget', and `shmget'. */
++#define IPC_CREAT 01000 /* Create key if key does not exist. */
++#define IPC_EXCL 02000 /* Fail if key exists. */
++#define IPC_NOWAIT 04000 /* Return error on wait. */
++
++/* Control commands for `msgctl', `semctl', and `shmctl'. */
++#define IPC_RMID 0 /* Remove identifier. */
++#define IPC_SET 1 /* Set `ipc_perm' options. */
++#define IPC_STAT 2 /* Get `ipc_perm' options. */
++#ifdef __USE_GNU
++# define IPC_INFO 3 /* See ipcs. */
++#endif
++
++/* Special key values. */
++#define IPC_PRIVATE ((__key_t) 0) /* Private key. */
++
++
++/* Data structure used to pass permission information to IPC operations. */
++struct ipc_perm
++ {
++ __key_t __key; /* Key. */
++ __uid_t uid; /* Owner's user ID. */
++ __gid_t gid; /* Owner's group ID. */
++ __uid_t cuid; /* Creator's user ID. */
++ __gid_t cgid; /* Creator's group ID. */
++ unsigned int mode; /* Read/write permission. */
++ unsigned short __seq; /* Sequence number. */
++ unsigned short __pad1;
++ unsigned long __unused1;
++ unsigned long __unused2;
++ };
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/metag/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/kernel_types.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,47 @@
++/* Note that we use the exact same include guard #define names
++ * as asm/posix_types.h. This will avoid gratuitous conflicts
++ * with the posix_types.h kernel header, and will ensure that
++ * our private content, and not the kernel header, will win.
++ * -Erik
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef __ASM_GENERIC_POSIX_TYPES_H
++#define __ASM_GENERIC_POSIX_TYPES_H
++
++typedef unsigned int __kernel_dev_t;
++typedef unsigned int __kernel_ino_t;
++typedef unsigned int __kernel_mode_t;
++typedef unsigned long __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef unsigned int __kernel_uid_t;
++typedef unsigned int __kernel_gid_t;
++typedef unsigned int __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef long __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef int __kernel_ipc_pid_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef unsigned int __kernel_uid32_t;
++typedef unsigned int __kernel_gid32_t;
++typedef unsigned int __kernel_old_uid_t;
++typedef unsigned int __kernel_old_gid_t;
++typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long long __kernel_loff_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
++
++typedef struct {
++ int val[2];
++} __kernel_fsid_t;
++
++#endif /* __ASM_GENERIC_POSIX_TYPES_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/profil-counter.h uClibc-git/libc/sysdeps/linux/metag/bits/profil-counter.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/profil-counter.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/profil-counter.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,17 @@
++/*
++ * Low-level statistical profiling support function. Linux/Meta version.
++ *
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ * Based on the SH version from the GNU C Library.
++ */
++
++#include <signal.h>
++
++static void
++profil_counter (int signo, struct sigcontext sc)
++{
++ profil_count (sc.cbuf.ctx.CurrPC);
++}
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/setjmp.h uClibc-git/libc/sysdeps/linux/metag/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,44 @@
++/*
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++/* Define the machine-dependent type `jmp_buf' */
++#ifndef _BITS_SETJMP_H
++#define _BITS_SETJMP_H 1
++
++#if !defined _SETJMP_H && !defined _PTHREAD_H
++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
++#endif
++
++/*
++ jmp_buf[0] - A0StP
++ jmp_buf[1] - A1GbP
++ jmp_buf[2] - A0FrP
++ jmp_buf[3] - A1LbP
++ jmp_buf[4] - D0FrT
++ jmp_buf[5] - D1RtP
++ jmp_buf[6] - D0.5
++ jmp_buf[7] - D1.5
++ jmp_buf[8] - D0.6
++ jmp_buf[9] - D1.6
++ jmp_buf[10] - D0.7
++ jmp_buf[11] - D1.7
++ */
++
++#define _JBLEN 24
++#if defined (__USE_MISC) || defined (_ASM)
++#define JB_SP 0
++#endif
++
++#ifndef _ASM
++typedef int __jmp_buf[_JBLEN] __attribute__((aligned (8)));
++#endif
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) > (void *) (jmpbuf)[JB_SP])
++
++#endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/metag/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/sigcontextinfo.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,14 @@
++/*
++ * Copyright (C) 2013, Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ */
++
++#define SIGCONTEXT struct sigcontext
++#define SIGCONTEXT_EXTRA_ARGS
++#define GET_PC(ctx) ((void *) ctx.cbuf.ctx.CurrPC)
++#define GET_FRAME(ctx) ((void *) ctx.cbuf.ctx.AX[1].U0)
++#define GET_STACK(ctx) ((void *) ctx.cbuf.ctx.AX[0].U0)
++#define CALL_SIGHANDLER(handler, signo, ctx) \
++ (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/metag/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/stackinfo.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,28 @@
++/* Copyright (C) 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* This file contains a bit of information about the stack allocation
++ of the processor. */
++
++#ifndef _STACKINFO_H
++#define _STACKINFO_H 1
++
++/* On Meta the stack grows up. */
++#define _STACK_GROWS_UP 1
++
++#endif /* stackinfo.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/syscalls.h uClibc-git/libc/sysdeps/linux/metag/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/syscalls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,120 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ */
++
++#ifndef _BITS_SYSCALLS_H
++#define _BITS_SYSCALLS_H
++#ifndef _SYSCALL_H
++# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
++#endif
++
++/*
++ Meta version adapted from the ARM version.
++*/
++
++#define SYS_ify(syscall_name) (__NR_##syscall_name)
++
++#ifdef __ASSEMBLER__
++
++/* Call a given syscall, with arguments loaded. */
++#undef DO_CALL
++#define DO_CALL(syscall_name, args) \
++ MOV D1Re0, #SYS_ify (syscall_name); \
++ SWITCH #0x440001
++
++#else
++
++#include <errno.h>
++
++#undef INLINE_SYSCALL_NCS
++#define INLINE_SYSCALL_NCS(name, nr, args...) \
++(__extension__ \
++ ({ unsigned int _inline_sys_result = INTERNAL_SYSCALL_NCS (name, , nr, args); \
++ if (unlikely(INTERNAL_SYSCALL_ERROR_P (_inline_sys_result, ))) \
++ { \
++ __set_errno (INTERNAL_SYSCALL_ERRNO (_inline_sys_result, )); \
++ _inline_sys_result = (unsigned int) -1; \
++ } \
++ (int) _inline_sys_result; }) \
++)
++
++#undef INTERNAL_SYSCALL_DECL
++#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
++
++#undef INTERNAL_SYSCALL_NCS
++#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
++(__extension__ \
++ ({unsigned int __sys_result; \
++ { \
++ PREP_ARGS_##nr (args); \
++ register int _result __asm__ ("D0Re0"), _nr __asm__ ("D1Re0"); \
++ LOAD_ARGS_##nr; \
++ _nr = (name); \
++ __asm__ volatile ("SWITCH #0x440001 ! syscall " #name \
++ : "=r" (_result) \
++ : "d" (_nr) ASM_ARGS_##nr \
++ : "memory"); \
++ __sys_result = _result; \
++ } \
++ (int) __sys_result; }) \
++)
++
++#undef INTERNAL_SYSCALL_ERROR_P
++#define INTERNAL_SYSCALL_ERROR_P(val, err) \
++ ((unsigned int) (val) >= 0xfffff001u)
++
++#undef INTERNAL_SYSCALL_ERRNO
++#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
++
++#define PREP_ARGS_0()
++#define PREP_ARGS_1(a1) \
++ int _t1 = (int) (a1); \
++ PREP_ARGS_0 ()
++#define PREP_ARGS_2(a1, a2) \
++ int _t2 = (int) (a2); \
++ PREP_ARGS_1 (a1)
++#define PREP_ARGS_3(a1, a2, a3) \
++ int _t3 = (int) (a3); \
++ PREP_ARGS_2 (a1, a2)
++#define PREP_ARGS_4(a1, a2, a3, a4) \
++ int _t4 = (int) (a4); \
++ PREP_ARGS_3 (a1, a2, a3)
++#define PREP_ARGS_5(a1, a2, a3, a4, a5) \
++ int _t5 = (int) (a5); \
++ PREP_ARGS_4 (a1, a2, a3, a4)
++#define PREP_ARGS_6(a1, a2, a3, a4, a5, a6) \
++ int _t6 = (int) (a6); \
++ PREP_ARGS_5 (a1, a2, a3, a4, a5)
++
++#define LOAD_ARGS_0
++#define ASM_ARGS_0
++#define LOAD_ARGS_1 \
++ register int _a1 __asm__ ("D1Ar1") = (int) (_t1); \
++ LOAD_ARGS_0
++#define ASM_ARGS_1 ASM_ARGS_0, "d" (_a1)
++#define LOAD_ARGS_2 \
++ register int _a2 __asm__ ("D0Ar2") = (int) (_t2); \
++ LOAD_ARGS_1
++#define ASM_ARGS_2 ASM_ARGS_1, "d" (_a2)
++#define LOAD_ARGS_3 \
++ register int _a3 __asm__ ("D1Ar3") = (int) (_t3); \
++ LOAD_ARGS_2
++#define ASM_ARGS_3 ASM_ARGS_2, "d" (_a3)
++#define LOAD_ARGS_4 \
++ register int _a4 __asm__ ("D0Ar4") = (int) (_t4); \
++ LOAD_ARGS_3
++#define ASM_ARGS_4 ASM_ARGS_3, "d" (_a4)
++#define LOAD_ARGS_5 \
++ register int _a5 __asm__ ("D1Ar5") = (int) (_t5); \
++ LOAD_ARGS_4
++#define ASM_ARGS_5 ASM_ARGS_4, "d" (_a5)
++#define LOAD_ARGS_6 \
++ register int _a6 __asm__ ("D0Ar6") = (int) (_t6); \
++ LOAD_ARGS_5
++#define ASM_ARGS_6 ASM_ARGS_5, "d" (_a6)
++
++#endif /* __ASSEMBLER__ */
++#endif /* _BITS_SYSCALLS_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/metag/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/uClibc_arch_features.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,46 @@
++/*
++ * Track misc arch-specific features that aren't config options
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
++#define _BITS_UCLIBC_ARCH_FEATURES_H
++
++/* instruction used when calling abort() to kill yourself */
++/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
++#undef __UCLIBC_ABORT_INSTRUCTION__
++
++/* can your target use syscall6() for mmap ? */
++#define __UCLIBC_MMAP_HAS_6_ARGS__
++
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
++
++/* does your target have a broken create_module() ? */
++#undef __UCLIBC_BROKEN_CREATE_MODULE__
++
++/* does your target have to worry about older [gs]etrlimit() ? */
++#undef __UCLIBC_HANDLE_OLDER_RLIMIT__
++
++/* does your target have an asm .set ? */
++#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
++
++/* define if target doesn't like .global */
++#undef __UCLIBC_ASM_GLOBAL_DIRECTIVE__
++
++/* define if target supports .weak */
++#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
++
++/* define if target supports .weakext */
++#undef __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
++
++/* needed probably only for ppc64 */
++#undef __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
++
++/* define if target supports IEEE signed zero floats */
++#define __UCLIBC_HAVE_SIGNED_ZERO__
++
++#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/wordsize.h uClibc-git/libc/sysdeps/linux/metag/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/bits/wordsize.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,19 @@
++/* Copyright (C) 1999 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/brk.c uClibc-git/libc/sysdeps/linux/metag/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/brk.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,38 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <errno.h>
++#include <unistd.h>
++#include <sys/syscall.h>
++
++libc_hidden_proto(brk)
++
++/* This must be initialized data because commons can't have aliases. */
++void * __curbrk attribute_hidden = 0;
++
++int brk (void *addr)
++{
++ void *newbrk;
++
++ __asm__ __volatile__ ("MOV D1Re0,%2\n\t"
++ "MOV D1Ar1,%1\n\t"
++ "SWITCH #0x440001\n\t"
++ "MOV %0,D0Re0"
++ : "=r" (newbrk)
++ : "r" (addr), "K" (__NR_brk)
++ : "D0Re0", "D1Re0", "D1Ar1");
++
++ __curbrk = newbrk;
++
++ if (newbrk < addr)
++ {
++ __set_errno (ENOMEM);
++ return -1;
++ }
++
++ return 0;
++}
++libc_hidden_def(brk)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/clone.S uClibc-git/libc/sysdeps/linux/metag/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/clone.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,101 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++! clone() is even more special than fork() as it mucks with stacks
++! and invokes a function in the right context after its all over.
++
++#include <asm/errno.h>
++#include <asm/unistd.h>
++
++#define CLONE_VM 0x00000100
++#define CLONE_THREAD 0x00010000
++
++#ifdef __PIC__
++#define __CLONE_METAG_LOAD_TP ___metag_load_tp@PLT
++#else
++#define __CLONE_METAG_LOAD_TP ___metag_load_tp
++#endif
++
++/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
++ pid_t *ptid, struct user_desc *tls, pid_t *ctid); */
++
++ .text
++ .global __clone
++ .type __clone,function
++__clone:
++ ! sanity check args
++ MOV D0Re0, #-EINVAL
++ CMP D1Ar1, #0
++ BEQ ___error
++ CMP D0Ar2, #0
++ BEQ ___error
++
++ ! save function pointer
++ MOV D0FrT, D1Ar1
++
++ ! do the system call
++ MOV D1Ar1, D1Ar3
++ MOV D1Ar3, D1Ar5
++ MOV D1Ar5, D0Ar6
++ MOV D0Ar6, D0Ar4
++ GETD D0Ar4, [A0StP+#-4]
++
++ ! new sp is already in D0Ar2
++ MOV D1Re0, #__NR_clone
++ SWITCH #0x440001
++ CMP D0Re0,#0
++ ! Error on -1
++ BLT ___error
++ ! If non-zero we are the parent
++ MOVNE PC, D1RtP
++ ! BRKPNT
++
++ ! We are the child
++#ifdef RESET_PID
++ SETL [A0StP++], D0FrT, D1RtP
++ MOVT D0FrT, #HI(CLONE_THREAD)
++ ADD D0FrT, D0FrT, #LO(CLONE_THREAD)
++ ANDS D0FrT, D0FrT, D1Ar1
++ BNZ 3f
++ MOVT D0FrT, #HI(CLONE_VM)
++ ADD D0FrT, D0FrT, #LO(CLONE_VM)
++ ANDS D0FrT, D0FrT, D1Ar1
++ BZ 1f
++ MOV D1Ar1, #-1
++ BA 2f
++1: MOV D1Re0, #__NR_getpid
++ SWITCH #0x440001
++ MOV D1Ar1, D0Re0
++2: CALLR D1RtP, __CLONE_METAG_LOAD_TP
++ SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE
++ SETD [D0Re0 + #PID], D1Ar1
++ SETD [D0Re0 + #TID], D1Ar1
++3: GETL D0FrT, D1RtP, [--A0StP]
++#endif
++ ! Rearrange the function arg and call address from registers
++ MOV D0Ar2, D0FrT
++ MOV D1Ar1, D0Ar6
++ MOV D1RtP, PC
++ ADD D1RtP, D1RtP, #8
++ MOV PC, D0Ar2
++
++ ! and we are done, passing the return value D0Re0 through D1Ar1
++ MOV D1Ar1, D0Re0
++#ifdef __PIC__
++ B _exit@PLT
++#else
++ B _exit
++#endif
++
++___error:
++ MOV D1Ar1, D0Re0
++#ifdef __PIC__
++ B ___syscall_error@PLT
++#else
++ B ___syscall_error
++#endif
++ .size __clone, .-__clone
++
++.weak _clone
++_clone = __clone
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/crt1.S uClibc-git/libc/sysdeps/linux/metag/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/crt1.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,75 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++#include <asm/unistd.h>
++
++ .text
++ .global __start
++ .type __start,function
++__start:
++ MOV D0FrT,A0StP
++ MOV A0FrP,A0StP
++
++ MOV A0.2,#0
++ MOV A0.3,#0
++
++ MOV A1.1,#0
++ MOV A1.2,#0
++ MOV A1.3,#0
++
++ MOV D0.5,#0
++ MOV D0.6,#0
++ MOV D0.7,#0
++
++ MOV D1.5,#0
++ MOV D1.6,#0
++ MOV D1.7,#0
++
++ MOV D1Ar3,D0Ar2 ! argv
++ MOV D0Ar2,D1Ar1 ! argc
++ MOV D0Ar6,D0Ar4 ! rtld_fini
++
++#ifdef __PIC__
++ ADDT A1LbP,CPC1,#HI(__GLOBAL_OFFSET_TABLE__)
++ ADD A1LbP,A1LbP,#LO(__GLOBAL_OFFSET_TABLE__+4)
++
++ MOV D1Ar1,A1LbP
++ ADDT D1Ar1,D1Ar1,#HI(_main@GOTOFF)
++ ADD D1Ar1,D1Ar1,#LO(_main@GOTOFF)
++
++ MOV D0Ar4,A1LbP
++ ADDT D0Ar4,D0Ar4,#HI(__init@GOTOFF)
++ ADD D0Ar4,D0Ar4,#LO(__init@GOTOFF)
++
++ MOV D1Ar5,A1LbP
++ ADDT D1Ar5,D1Ar5,#HI(__fini@GOTOFF)
++ ADD D1Ar5,D1Ar5,#LO(__fini@GOTOFF)
++#else
++ MOVT D1Ar1,#HI(_main)
++ ADD D1Ar1,D1Ar1,#LO(_main)
++ MOVT D0Ar4,#HI(__init)
++ ADD D0Ar4,D0Ar4,#LO(__init)
++ MOVT D1Ar5,#HI(__fini)
++ ADD D1Ar5,D1Ar5,#LO(__fini)
++#endif
++
++ MOVT D1Re0,#0x80
++
++ SETL [A0StP++],D0Re0,D1Re0 ! stack_end (8Mb)
++
++ MOV D1Re0,#0
++ MOV D0Re0,#0
++
++#ifdef __PIC__
++ CALLR D1RtP, ___uClibc_main@PLT
++#else
++ CALLR D1RtP, ___uClibc_main
++#endif
++
++ MOV D1Re0,#__NR_exit
++ MOV D1Ar1,#0x1
++ SWITCH #0x440001 ! exit syscall
++
++ .size __start,.-__start
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/crti.S uClibc-git/libc/sysdeps/linux/metag/crti.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/crti.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/crti.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,19 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++ .section .init
++ .global __init
++ .type __init,function
++__init:
++ MOV D0FrT, A0FrP
++ ADD A0FrP, A0StP, #0
++ SETL [A0StP++], D0.4, D1RtP
++
++ .section .fini
++ .global __fini
++ .type __fini,function
++__fini:
++ MOV D0FrT, A0FrP
++ ADD A0FrP, A0StP, #0
++ SETL [A0StP++], D0.4, D1RtP
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/crtn.S uClibc-git/libc/sysdeps/linux/metag/crtn.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/crtn.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/crtn.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,19 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++ .section .init
++ .global __init
++ .type __init,function
++ GETL D0.4, D1RtP, [A0FrP+#8++]
++ SUB A0StP, A0FrP, #8
++ MOV A0FrP, D0.4
++ MOV PC, D1RtP
++
++ .section .fini
++ .global __fini
++ .type __fini,function
++ GETL D0.4, D1RtP, [A0FrP+#8++]
++ SUB A0StP, A0FrP, #8
++ MOV A0FrP, D0.4
++ MOV PC, D1RtP
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/libc-metag_load_tp.S uClibc-git/libc/sysdeps/linux/metag/libc-metag_load_tp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/libc-metag_load_tp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/libc-metag_load_tp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <ldso/ldso/metag/metag_load_tp.S>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/_longjmp.S uClibc-git/libc/sysdeps/linux/metag/_longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/_longjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/_longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,25 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++
++ .text
++ .global ___longjmp
++ .type ___longjmp,function
++
++___longjmp:
++ !! If val is 0, set it to 1
++ CMP D0Ar2,#0
++ ADDZ D0Ar2,D0Ar2,#1
++
++ !! Restore A0/A1 regs
++ MGETL A0.0,A0.1,[D1Ar1++]
++ !! Restore D0/D1 regs
++ MOV A0.3,D1Ar1
++ MGETL D0FrT,D0.5,D0.6,D0.7,[A0.3++]
++ !! Move 2nd argument to return value
++ MOV D0Re0,D0Ar2
++ MOV PC,D1RtP
++ .size ___longjmp,.-___longjmp
++
++libc_hidden_def(__longjmp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/Makefile uClibc-git/libc/sysdeps/linux/metag/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,13 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++top_srcdir=../../../../
++top_builddir=../../../../
++all: objs
++include $(top_builddir)Rules.mak
++include Makefile.arch
++include $(top_srcdir)Makerules
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/Makefile.arch uClibc-git/libc/sysdeps/linux/metag/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/Makefile.arch 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,12 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2013 Imagination Technologies Ltd.
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++CSRC-y := brk.c syscall.c metag.c __syscall_error.c
++
++SSRC-y := _longjmp.S clone.S setjmp.S vfork.S
++
++SSRC-$(UCLIBC_HAS_THREADS_NATIVE) += libc-metag_load_tp.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/metag.c uClibc-git/libc/sysdeps/linux/metag/metag.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/metag.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/metag.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <errno.h>
++#include <sys/syscall.h>
++
++_syscall2(int,metag_setglobalbit,char *,addr,int,mask)
++_syscall1(void,metag_set_fpu_flags,unsigned int,flags)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/setjmp.S uClibc-git/libc/sysdeps/linux/metag/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,52 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++!!! setjmp and variants
++ .text
++
++!! int _setjmp (jmp_buf __env)
++!! Store the calling environment in ENV, not saving the signal mask.
++!! Return 0. */
++ .global __setjmp
++ .type __setjmp,function
++__setjmp:
++ MOV D0Ar2,#0
++ B ___sigsetjmp1
++ .size __setjmp,.-__setjmp
++
++!! int setjmp (jmp_buf __env)
++!! Store the calling environment in ENV, also saving the signal mask.
++!! Return 0. */
++ .global _setjmp
++ .type _setjmp,function
++_setjmp:
++ MOV D0Ar2,#1
++ !! fall through to __sigsetjmp
++ .size _setjmp,.-_setjmp
++
++!! int __sigsetjmp (jmp_buf __env, int __savemask)
++!! Store the calling environment in ENV, also saving the
++!! signal mask if SAVEMASK is nonzero. Return 0.
++!! This is the internal name for `sigsetjmp'.
++ .global ___sigsetjmp
++ .type ___sigsetjmp,function
++___sigsetjmp:
++___sigsetjmp1:
++ !! Save A0/A1 regs
++ MSETL [D1Ar1++],A0.0,A0.1
++ !! Use A0.3 as temp
++ MOV A0.3,D1Ar1
++ !! Rewind D1Ar1 that was modified above
++ SUB D1Ar1,D1Ar1,#(2*8)
++ !! Save D0/D1 regs
++ MSETL [A0.3++],D0FrT,D0.5,D0.6,D0.7
++ !! Tail call __sigjmp_save
++#ifdef __PIC__
++ B ___sigjmp_save@PLT
++#else
++ B ___sigjmp_save
++#endif
++ .size ___sigsetjmp,.-___sigsetjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/io.h uClibc-git/libc/sysdeps/linux/metag/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/io.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,48 @@
++/* Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_IO_H
++
++#define _SYS_IO_H 1
++#include <features.h>
++
++__BEGIN_DECLS
++
++/* If TURN_ON is TRUE, request for permission to do direct i/o on the
++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
++ permission off for that range. This call requires root privileges. */
++extern int ioperm (unsigned long int __from, unsigned long int __num,
++ int __turn_on) __THROW;
++
++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
++ permission to access any I/O port is granted. This call requires
++ root privileges. */
++extern int iopl (int __level) __THROW;
++
++/* The functions that actually perform reads and writes. */
++extern unsigned char inb (unsigned long int port) __THROW;
++extern unsigned short int inw (unsigned long int port) __THROW;
++extern unsigned long int inl (unsigned long int port) __THROW;
++
++extern void outb (unsigned char value, unsigned long int port) __THROW;
++extern void outw (unsigned short value, unsigned long int port) __THROW;
++extern void outl (unsigned long value, unsigned long int port) __THROW;
++
++__END_DECLS
++
++#endif /* _SYS_IO_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/procfs.h uClibc-git/libc/sysdeps/linux/metag/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,121 @@
++/* Copyright (C) 1996, 1997, 1999, 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
++ Boston, MA 02110-1301, USA. */
++
++#ifndef _SYS_PROCFS_H
++#define _SYS_PROCFS_H 1
++
++/* This is somewhat modelled after the file of the same name on SVR4
++ systems. It provides a definition of the core file format for ELF
++ used on Linux. It doesn't have anything to do with the /proc file
++ system, even though Linux has one.
++
++ Anyway, the whole purpose of this file is for GDB and GDB only.
++ Don't read too much into it. Don't use it for anything other than
++ GDB unless you know what you are doing. */
++
++#include <features.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#include <sys/user.h>
++
++__BEGIN_DECLS
++
++/* Type for a general-purpose register. */
++typedef unsigned long elf_greg_t;
++
++#define ELF_NGREG 30
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++/* Register set for the floating-point registers. */
++#define ELF_NFPREG 18
++typedef unsigned long elf_fpreg_t;
++typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
++
++/* Signal info. */
++struct elf_siginfo
++ {
++ int si_signo; /* Signal number. */
++ int si_code; /* Extra code. */
++ int si_errno; /* Errno. */
++ };
++
++/* Definitions to generate Intel SVR4-like core files. These mostly
++ have the same names as the SVR4 types with "elf_" tacked on the
++ front to prevent clashes with Linux definitions, and the typedef
++ forms have been avoided. This is mostly like the SVR4 structure,
++ but more Linuxy, with things that Linux does not support and which
++ GDB doesn't really use excluded. */
++
++struct elf_prstatus
++ {
++ struct elf_siginfo pr_info; /* Info associated with signal. */
++ short int pr_cursig; /* Current signal. */
++ unsigned long int pr_sigpend; /* Set of pending signals. */
++ unsigned long int pr_sighold; /* Set of held signals. */
++ __pid_t pr_pid;
++ __pid_t pr_ppid;
++ __pid_t pr_pgrp;
++ __pid_t pr_sid;
++ struct timeval pr_utime; /* User time. */
++ struct timeval pr_stime; /* System time. */
++ struct timeval pr_cutime; /* Cumulative user time. */
++ struct timeval pr_cstime; /* Cumulative system time. */
++ elf_gregset_t pr_reg; /* GP registers. */
++ int pr_fpvalid; /* True if math copro being used. */
++ };
++
++
++#define ELF_PRARGSZ (80) /* Number of chars for args. */
++
++struct elf_prpsinfo
++ {
++ char pr_state; /* Numeric process state. */
++ char pr_sname; /* Char for pr_state. */
++ char pr_zomb; /* Zombie. */
++ char pr_nice; /* Nice val. */
++ unsigned long int pr_flag; /* Flags. */
++ unsigned short int pr_uid;
++ unsigned short int pr_gid;
++ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
++ /* Lots missing */
++ char pr_fname[16]; /* Filename of executable. */
++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
++ };
++
++/* The rest of this file provides the types for emulation of the
++ Solaris <proc_service.h> interfaces that should be implemented by
++ users of libthread_db. */
++
++/* Addresses. */
++typedef void *psaddr_t;
++
++/* Register sets. Linux has different names. */
++typedef elf_gregset_t prgregset_t;
++typedef elf_fpregset_t prfpregset_t;
++
++/* We don't have any differences between processes and threads,
++ therefore have only one PID type. */
++typedef __pid_t lwpid_t;
++
++/* Process status and info. In the end we do provide typedefs for them. */
++typedef struct elf_prstatus prstatus_t;
++typedef struct elf_prpsinfo prpsinfo_t;
++
++__END_DECLS
++
++#endif /* sys/procfs.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/ucontext.h uClibc-git/libc/sysdeps/linux/metag/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,96 @@
++/* Copyright (C) 1998, 1999, 2001, 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* Meta ABI compliant context switching support. */
++
++#ifndef _SYS_UCONTEXT_H
++#define _SYS_UCONTEXT_H 1
++
++#include <features.h>
++#include <signal.h>
++#include <sys/procfs.h>
++
++/* We need the signal context definitions even if they are not used
++ included in <signal.h>. */
++#include <bits/sigcontext.h>
++
++typedef int greg_t;
++
++/* Number of general registers. */
++#define NGREG 18
++
++/* Container for all general registers. */
++typedef elf_gregset_t gregset_t;
++
++/* Number of each register is the `gregset_t' array. */
++enum
++{
++ R0 = 0,
++#define R0 R0
++ R1 = 1,
++#define R1 R1
++ R2 = 2,
++#define R2 R2
++ R3 = 3,
++#define R3 R3
++ R4 = 4,
++#define R4 R4
++ R5 = 5,
++#define R5 R5
++ R6 = 6,
++#define R6 R6
++ R7 = 7,
++#define R7 R7
++ R8 = 8,
++#define R8 R8
++ R9 = 9,
++#define R9 R9
++ R10 = 10,
++#define R10 R10
++ R11 = 11,
++#define R11 R11
++ R12 = 12,
++#define R12 R12
++ R13 = 13,
++#define R13 R13
++ R14 = 14,
++#define R14 R14
++ R15 = 15
++#define R15 R15
++};
++
++/* Structure to describe FPU registers. */
++typedef elf_fpregset_t fpregset_t;
++
++/* Context to describe whole processor state. This only describes
++ the core registers; coprocessor registers get saved elsewhere
++ (e.g. in uc_regspace, or somewhere unspecified on the stack
++ during non-RT signal handlers). */
++typedef struct sigcontext mcontext_t;
++
++/* Userlevel context. */
++typedef struct ucontext
++ {
++ unsigned long uc_flags;
++ struct ucontext *uc_link;
++ stack_t uc_stack;
++ mcontext_t uc_mcontext;
++ __sigset_t uc_sigmask;
++ } ucontext_t;
++
++#endif /* sys/ucontext.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/user.h uClibc-git/libc/sysdeps/linux/metag/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/sys/user.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * This file is not needed, but in practice gdb might try to include it.
++ *
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/syscall.c uClibc-git/libc/sysdeps/linux/metag/syscall.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/syscall.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/syscall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,40 @@
++/* syscall for META/uClibc
++ *
++ * Copyright (C) 2013 Imagination Technologies
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/syscall.h>
++
++long syscall(long sysnum,
++ long arg1, long arg2, long arg3,
++ long arg4, long arg5, long arg6)
++{
++
++ register long __call __asm__ ("D1Re0") = sysnum;
++ register long __res __asm__ ("D0Re0");
++ register long __a __asm__ ("D1Ar1") = arg1;
++ register long __b __asm__ ("D0Ar2") = arg2;
++ register long __c __asm__ ("D1Ar3") = arg3;
++ register long __d __asm__ ("D0Ar4") = arg4;
++ register long __e __asm__ ("D1Ar5") = arg5;
++ register long __f __asm__ ("D0Ar6") = arg6;
++
++
++ __asm__ __volatile__ ("SWITCH #0x440001"
++ : "=d" (__res)
++ : "d" (__call), "d" (__a), "d" (__b),
++ "d" (__c), "d" (__d), "d" (__e) , "d" (__f)
++ : "memory");
++
++ if(__res >= (unsigned long) -4095) {
++ long err = __res;
++ (*__errno_location()) = (-err);
++ __res = (unsigned long) -1;
++ }
++ return (long) __res;
++}
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/__syscall_error.c uClibc-git/libc/sysdeps/linux/metag/__syscall_error.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/__syscall_error.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/__syscall_error.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,18 @@
++/* Wrapper for setting errno.
++ *
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <errno.h>
++#include <features.h>
++
++/* This routine is jumped to by all the syscall handlers, to stash
++ * an error number into errno. */
++int __syscall_error(int err_no) attribute_hidden;
++int __syscall_error(int err_no)
++{
++ __set_errno(-err_no);
++ return -1;
++}
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/sysdep.h uClibc-git/libc/sysdeps/linux/metag/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/sysdep.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,59 @@
++/*
++ * Assembler macros for Meta.
++ *
++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <common/sysdep.h>
++
++#include <features.h>
++#include <libc-internal.h>
++
++#ifdef __ASSEMBLER__
++
++#ifdef SHARED
++#define PLTJMP(_x) _x##@PLT
++#else
++#define PLTJMP(_x) _x
++#endif
++
++#undef PSEUDO_END
++#define PSEUDO_END(name) \
++ SYSCALL_ERROR_HANDLER \
++ END (name)
++
++#if defined NOT_IN_libc
++# define SYSCALL_ERROR __local_syscall_error
++# ifdef RTLD_PRIVATE_ERRNO
++# define SYSCALL_ERROR_HANDLER \
++__local_syscall_error: \
++ NEG D0Re0, D0Re0; \
++ ADDT D1Re0, CPC1, #HI(_rtld_errno); \
++ ADD D1Re0, D1Re0, #LO(_rtld_errno) + 4; \
++ SETD [D1Re0], D0Re0; \
++ NEG D0Re0, #0x1; \
++ MOV PC, D1RtP;
++# else
++# define SYSCALL_ERROR_HANDLER \
++__local_syscall_error: \
++ MOV D1Re0, D1RtP; \
++ SETL [A0StP++], D0Re0, D1Re0; \
++ CALLR D1RtP, PLTJMP(___errno_location); \
++ GETD D1Re0, [A0StP+#-8]; \
++ NEG D1Re0, D1Re0; \
++ SETD [D0Re0], D1Re0; \
++ NEG D0Re0, #0x1; \
++ GETD D1RtP, [A0StP+#-4]; \
++ SUB A0StP, A0StP, #0x8; \
++ MOV PC, D1RtP;
++# endif
++#else
++# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
++# define SYSCALL_ERROR ___syscall_error
++#endif
++
++#endif /* __ASSEMBLER __*/
++
++/* Pointer mangling is not yet supported for META. */
++#define PTR_MANGLE(var) (void) (var)
++#define PTR_DEMANGLE(var) (void) (var)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/metag/vfork.S uClibc-git/libc/sysdeps/linux/metag/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/metag/vfork.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/metag/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,67 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++#include <asm/unistd.h>
++
++#define _ERRNO_H
++#include <bits/errno.h>
++#include <sys/syscall.h>
++
++#ifndef SAVE_PID
++#define SAVE_PID
++#endif
++
++#ifndef RESTORE_PID
++#define RESTORE_PID
++#endif
++
++#ifdef __NR_vfork
++#define __VFORK_NR __NR_vfork
++#else
++#define __VFORK_NR __NR_fork
++#endif
++
++/* Clone the calling process, but without copying the whole address space.
++ The calling process is suspended until the new process exits or is
++ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
++ and the process ID of the new process to the old process. */
++
++ .balign 4
++ .global ___vfork
++ .hidden ___vfork
++ .type ___vfork, @function
++___vfork:
++
++ SAVE_PID
++
++ MOV D1Ar1, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */
++ MOV D0Ar2, #0
++ MOV D1Ar3, #0
++ MOV D0Ar4, #0
++ MOV D1Ar5, #0
++ MOV D0Ar6, #0
++ MOV D1Re0, #__NR_clone
++ SWITCH #0x440001
++
++ RESTORE_PID
++
++ MOVT D1Re0, #HI(-4096)
++ ADD D1Re0, D1Re0, #LO(-4096)
++ CMP D1Re0, D0Re0
++ BCS error
++
++ /* Syscall worked. Return to child/parent */
++ MOV PC, D1RtP
++
++error:
++ MOV D1Ar1, D0Re0
++#ifdef __PIC__
++ B ___syscall_error@PLT
++#else
++ B ___syscall_error
++#endif
++ .size ___vfork,.-___vfork
++
++weak_alias(__vfork,vfork)
++libc_hidden_weak(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/fcntl.h uClibc-git/libc/sysdeps/linux/microblaze/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/microblaze/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -44,6 +44,8 @@
+ typedef unsigned int __kernel_old_uid_t;
+ typedef unsigned int __kernel_old_gid_t;
+ typedef unsigned int __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ #ifdef __GNUC__
+ typedef long long __kernel_loff_t;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/poll.h uClibc-git/libc/sysdeps/linux/microblaze/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/setjmp.h uClibc-git/libc/sysdeps/linux/microblaze/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -19,7 +19,6 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ typedef struct
+ {
+ /* Stack pointer. */
+@@ -35,13 +34,5 @@
+ /* Callee-saved registers r18-r31. */
+ int __regs[14];
+ } __jmp_buf[1];
+-#endif
+-
+-#define JB_SIZE (4 * 18)
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[0].__sp)
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/microblaze/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/microblaze/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/wordsize.h uClibc-git/libc/sysdeps/linux/microblaze/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,6 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#define JB_SIZE (4 * 18)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/microblaze/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/microblaze/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[0].__sp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/__longjmp.S uClibc-git/libc/sysdeps/linux/microblaze/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,10 +12,6 @@
+ * Written by Miles Bader <miles@gnu.org>
+ */
+
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+-
+ #include <libc-symbols.h>
+
+ .text
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/Makefile uClibc-git/libc/sysdeps/linux/microblaze/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+ # details.
+ #
+ # You should have received a copy of the GNU Library General Public License
+-# along with this program; if not, write to the Free Software Foundation, Inc.,
+-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ top_srcdir=../../../../
+ top_builddir=../../../../
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/Makefile.arch uClibc-git/libc/sysdeps/linux/microblaze/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ #
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+-CSRC := mmap.c clone.c fixdfsi.c
++CSRC-y := clone.c fixdfsi.c
+
+-SSRC := setjmp.S __longjmp.S vfork.S
++SSRC-y := setjmp.S __longjmp.S vfork.S
+
+ ARCH_HEADERS := floatlib.h
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/mmap.c uClibc-git/libc/sysdeps/linux/microblaze/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,16 +0,0 @@
+-/* Use new style mmap for microblaze */
+-/*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <unistd.h>
+-#include <errno.h>
+-#include <sys/mman.h>
+-#include <sys/syscall.h>
+-
+-
+-_syscall6 (__ptr_t, mmap, __ptr_t, addr, size_t, len, int, prot,
+- int, flags, int, fd, __off_t, offset)
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/setjmp.S uClibc-git/libc/sysdeps/linux/microblaze/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -25,13 +25,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <libc-symbols.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/procfs.h uClibc-git/libc/sysdeps/linux/microblaze/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/ptrace.h uClibc-git/libc/sysdeps/linux/microblaze/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/ucontext.h uClibc-git/libc/sysdeps/linux/microblaze/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/user.h uClibc-git/libc/sysdeps/linux/microblaze/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/vfork.S uClibc-git/libc/sysdeps/linux/microblaze/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/microblaze/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/microblaze/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,21 +13,15 @@
+ * Microblaze port by John Williams
+ */
+
+-#define _ERRNO_H 1
+-#include <bits/errno.h>
+-#define _SYSCALL_H
+-#include <bits/sysnum.h>
+-
+-#include <libc-symbols.h>
++#include <sys/syscall.h>
+
+ /* Clone the calling process, but without copying the whole address space.
+ The calling process is suspended until the new process exits or is
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+
+-.global C_SYMBOL_NAME(errno)
+-
+ .globl __vfork
++ .hidden __vfork
+ .align 4
+ __vfork:
+ addi r12, r0, SYS_vfork
+@@ -50,4 +44,4 @@
+ .size __vfork, .-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/atomic.h uClibc-git/libc/sysdeps/linux/mips/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MIPS_BITS_ATOMIC_H
+ #define _MIPS_BITS_ATOMIC_H 1
+@@ -136,22 +135,22 @@
+ /* For all "bool" routines, we return FALSE if exchange succesful. */
+
+ #define __arch_compare_and_exchange_bool_8_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_8_int(mem, new, old, rel, acq); \
+ !__cmp; })
+
+ #define __arch_compare_and_exchange_bool_16_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_16_int(mem, new, old, rel, acq); \
+ !__cmp; })
+
+ #define __arch_compare_and_exchange_bool_32_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_32_int(mem, new, old, rel, acq); \
+ !__cmp; })
+
+ #define __arch_compare_and_exchange_bool_64_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_64_int(mem, new, old, rel, acq); \
+ !__cmp; })
+
+@@ -159,22 +158,22 @@
+ successful or not. */
+
+ #define __arch_compare_and_exchange_val_8_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_8_int(mem, new, old, rel, acq); \
+ (__typeof (*mem))__prev; })
+
+ #define __arch_compare_and_exchange_val_16_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_16_int(mem, new, old, rel, acq); \
+ (__typeof (*mem))__prev; })
+
+ #define __arch_compare_and_exchange_val_32_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_32_int(mem, new, old, rel, acq); \
+ (__typeof (*mem))__prev; })
+
+ #define __arch_compare_and_exchange_val_64_int(mem, new, old, rel, acq) \
+-({ __typeof (*mem) __prev; int __cmp; \
++({ __typeof (*mem) __prev attribute_unused; int __cmp; \
+ __arch_compare_and_exchange_xxx_64_int(mem, new, old, rel, acq); \
+ (__typeof (*mem))__prev; })
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/dirent.h uClibc-git/libc/sysdeps/linux/mips/bits/dirent.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/dirent.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/dirent.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _DIRENT_H
+ # error "Never use <bits/dirent.h> directly; include <dirent.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/dlfcn.h uClibc-git/libc/sysdeps/linux/mips/bits/dlfcn.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/dlfcn.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/dlfcn.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _DLFCN_H
+ # error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/eventfd.h uClibc-git/libc/sysdeps/linux/mips/bits/eventfd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/eventfd.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/bits/eventfd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_EVENTFD_H
++# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
++#endif
++
++/* Flags for eventfd. */
++enum
++ {
++ EFD_SEMAPHORE = 00000001,
++#define EFD_SEMAPHORE EFD_SEMAPHORE
++ EFD_CLOEXEC = 02000000,
++#define EFD_CLOEXEC EFD_CLOEXEC
++ EFD_NONBLOCK = 00000200
++#define EFD_NONBLOCK EFD_NONBLOCK
++ };
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/fcntl.h uClibc-git/libc/sysdeps/linux/mips/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/fenv.h uClibc-git/libc/sysdeps/linux/mips/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -69,9 +68,9 @@
+ fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) -1)
++#define FE_DFL_ENV ((const fenv_t *) -1)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where none of the exception is masked. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) -2)
++# define FE_NOMASK_ENV ((const fenv_t *) -2)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/ioctl-types.h uClibc-git/libc/sysdeps/linux/mips/bits/ioctl-types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/ioctl-types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/ioctl-types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IOCTL_H
+ # error "Never use <bits/ioctl-types.h> directly; include <sys/ioctl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/ipc.h uClibc-git/libc/sysdeps/linux/mips/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/kernel_sigaction.h uClibc-git/libc/sysdeps/linux/mips/bits/kernel_sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/kernel_sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/kernel_sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -24,12 +24,4 @@
+ #endif
+ };
+
+-/* In uclibc, userspace struct sigaction is identical to
+- * "new" struct kernel_sigaction (one from the Linux 2.1.68 kernel).
+- * See sigaction.h
+- */
+-
+-extern int __syscall_rt_sigaction (int, const struct sigaction *,
+- struct sigaction *, size_t) attribute_hidden;
+-
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/mips/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef __kernel_uid_t __kernel_old_uid_t;
+ typedef __kernel_gid_t __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+ #else
+ typedef unsigned int __kernel_dev_t;
+@@ -68,6 +70,8 @@
+ typedef __kernel_uid_t __kernel_old_uid_t;
+ typedef __kernel_gid_t __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/mathdef.h uClibc-git/libc/sysdeps/linux/mips/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/mman.h uClibc-git/libc/sysdeps/linux/mips/bits/mman.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+@@ -66,7 +65,7 @@
+ # define MAP_LOCKED 0x8000 /* pages are locked */
+ # define MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
+ # define MAP_NONBLOCK 0x20000 /* do not block on IO */
+-# define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/msq.h uClibc-git/libc/sysdeps/linux/mips/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/poll.h uClibc-git/libc/sysdeps/linux/mips/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/resource.h uClibc-git/libc/sysdeps/linux/mips/bits/resource.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/resource.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/resource.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_RESOURCE_H
+ # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sem.h uClibc-git/libc/sysdeps/linux/mips/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/setjmp.h uClibc-git/libc/sysdeps/linux/mips/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+@@ -26,13 +25,19 @@
+
+ #include <sgidefs.h>
+
++#if _MIPS_SIM == _MIPS_SIM_ABI32
++#define ptrsize void *
++#else
++#define ptrsize long long
++#endif
++
+ typedef struct
+ {
+ /* Program counter. */
+- void * __pc;
++ ptrsize __pc;
+
+ /* Stack pointer. */
+- void * __sp;
++ ptrsize __sp;
+
+ /* Callee-saved registers s0 through s7. */
+ #if _MIPS_SIM == _MIPS_SIM_ABI32
+@@ -42,10 +47,10 @@
+ #endif
+
+ /* The frame pointer. */
+- void * __fp;
++ ptrsize __fp;
+
+ /* The global pointer. */
+- void * __gp;
++ ptrsize __gp;
+
+ /* Floating point status register. */
+ int __fpc_csr;
+@@ -58,15 +63,4 @@
+ #endif /* N32 || O32 */
+ } __jmp_buf[1];
+
+-#ifdef __USE_MISC
+-/* Offset to the program counter in `jmp_buf'. */
+-# define JB_PC 0
+-#endif
+-
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[0].__sp)
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/shm.h uClibc-git/libc/sysdeps/linux/mips/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigaction.h uClibc-git/libc/sysdeps/linux/mips/bits/sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/mips/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigcontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SIGCONTEXT_H
+ #define _BITS_SIGCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/mips/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include <sgidefs.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/siginfo.h uClibc-git/libc/sysdeps/linux/mips/bits/siginfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/siginfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/siginfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined __need_siginfo_t \
+ && !defined __need_sigevent_t
+@@ -265,8 +264,11 @@
+
+ /* Structure to transport application-defined values with signals. */
+ # define __SIGEV_MAX_SIZE 64
+-# define __SIGEV_HEAD_SIZE (sizeof(long) + 2*sizeof(int))
+-# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE - __SIGEV_HEAD_SIZE) / sizeof (int))
++# if __WORDSIZE == 64
++# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
++# else
++# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
++# endif
+
+ /* Forward declaration of the `pthread_attr_t' type. */
+ struct __pthread_attr_s;
+@@ -282,6 +284,10 @@
+ {
+ int _pad[__SIGEV_PAD_SIZE];
+
++ /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
++ thread to receive the signal. */
++ __pid_t _tid;
++
+ struct
+ {
+ void (*_function) (sigval_t); /* Function to start. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/signum.h uClibc-git/libc/sysdeps/linux/mips/bits/signum.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/signum.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/signum.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef _SIGNAL_H
+
+@@ -54,7 +53,20 @@
+ #define SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
+ #define SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */
+
+-/* Biggest signal number + 1 (including real-time signals). */
+-#define _NSIG 129
++/* MIPS is special by having 128 signals.
++ * All (?) other architectures have at most 64 signals.
++ * Having 128 signals is problematic because signal nos are 1-based
++ * and last signal number is then 128.
++ * This plays havoc with WIFSIGNALED and WCOREDUMP in waitpid status word,
++ * when process dies from signal 128.
++ * Linux kernel 3.9 accepts signal 128, with awful results :/
++ * It is being fixed.
++ *
++ * glibc (accidentally?) papers over this issue by declaring _NSIG to be 128,
++ * not 129 (despite claiming that _NSIG is "biggest signal number + 1"
++ * in the comment above that definition). We follow suit.
++ * Note that this results in __SIGRTMAX == 127. It is intended.
++ */
++#define _NSIG 128
+
+ #endif /* <signal.h> included. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigstack.h uClibc-git/libc/sysdeps/linux/mips/bits/sigstack.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/sigstack.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/sigstack.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include this file directly. Use <signal.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/socket.h uClibc-git/libc/sysdeps/linux/mips/bits/socket.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/socket.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/socket.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,369 +0,0 @@
+-/* System-specific socket constants and types. Linux/MIPS version.
+- Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006
+- Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifndef __BITS_SOCKET_H
+-#define __BITS_SOCKET_H
+-
+-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
+-# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+-#endif
+-
+-#define __need_size_t
+-#define __need_NULL
+-#include <stddef.h>
+-
+-#include <limits.h>
+-#include <sys/types.h>
+-
+-/* Type for length arguments in socket calls. */
+-#ifndef __socklen_t_defined
+-typedef __socklen_t socklen_t;
+-# define __socklen_t_defined
+-#endif
+-
+-/* Types of sockets. */
+-enum __socket_type
+-{
+- SOCK_DGRAM = 1, /* Connectionless, unreliable datagrams
+- of fixed maximum length. */
+-#define SOCK_DGRAM SOCK_DGRAM
+- SOCK_STREAM = 2, /* Sequenced, reliable, connection-based
+- byte streams. */
+-#define SOCK_STREAM SOCK_STREAM
+- SOCK_RAW = 3, /* Raw protocol interface. */
+-#define SOCK_RAW SOCK_RAW
+- SOCK_RDM = 4, /* Reliably-delivered messages. */
+-#define SOCK_RDM SOCK_RDM
+- SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
+- datagrams of fixed maximum length. */
+-#define SOCK_SEQPACKET SOCK_SEQPACKET
+- SOCK_DCCP = 6,
+-#define SOCK_DCCP SOCK_DCCP /* Datagram Congestion Control Protocol. */
+- SOCK_PACKET = 10, /* Linux specific way of getting packets
+- at the dev level. For writing rarp and
+- other similar things on the user level. */
+-#define SOCK_PACKET SOCK_PACKET
+- /* Flags to be ORed into the type parameter of socket and socketpair and
+- used for the flags parameter of paccept. */
+-
+- SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
+- new descriptor(s). */
+-#define SOCK_CLOEXEC SOCK_CLOEXEC
+- SOCK_NONBLOCK = 0200 /* Atomically mark descriptor(s) as
+- non-blocking. */
+-#define SOCK_NONBLOCK SOCK_NONBLOCK
+-};
+-
+-/* Protocol families. */
+-#define PF_UNSPEC 0 /* Unspecified. */
+-#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */
+-#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */
+-#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */
+-#define PF_INET 2 /* IP protocol family. */
+-#define PF_AX25 3 /* Amateur Radio AX.25. */
+-#define PF_IPX 4 /* Novell Internet Protocol. */
+-#define PF_APPLETALK 5 /* Appletalk DDP. */
+-#define PF_NETROM 6 /* Amateur radio NetROM. */
+-#define PF_BRIDGE 7 /* Multiprotocol bridge. */
+-#define PF_ATMPVC 8 /* ATM PVCs. */
+-#define PF_X25 9 /* Reserved for X.25 project. */
+-#define PF_INET6 10 /* IP version 6. */
+-#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */
+-#define PF_DECnet 12 /* Reserved for DECnet project. */
+-#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */
+-#define PF_SECURITY 14 /* Security callback pseudo AF. */
+-#define PF_KEY 15 /* PF_KEY key management API. */
+-#define PF_NETLINK 16
+-#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */
+-#define PF_PACKET 17 /* Packet family. */
+-#define PF_ASH 18 /* Ash. */
+-#define PF_ECONET 19 /* Acorn Econet. */
+-#define PF_ATMSVC 20 /* ATM SVCs. */
+-#define PF_SNA 22 /* Linux SNA Project */
+-#define PF_IRDA 23 /* IRDA sockets. */
+-#define PF_PPPOX 24 /* PPPoX sockets. */
+-#define PF_WANPIPE 25 /* Wanpipe API sockets. */
+-#define PF_LLC 26 /* Linux LLC. */
+-#define PF_CAN 29 /* Controller Area Network. */
+-#define PF_TIPC 30 /* TIPC sockets. */
+-#define PF_BLUETOOTH 31 /* Bluetooth sockets. */
+-#define PF_IUCV 32 /* IUCV sockets. */
+-#define PF_RXRPC 33 /* RxRPC sockets. */
+-#define PF_ISDN 34 /* mISDN sockets. */
+-#define PF_PHONET 35 /* Phonet sockets. */
+-#define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */
+-#define PF_CAIF 37 /* CAIF sockets. */
+-#define PF_ALG 38 /* Algorithm sockets. */
+-#define PF_MAX 39 /* For now.. */
+-
+-/* Address families. */
+-#define AF_UNSPEC PF_UNSPEC
+-#define AF_LOCAL PF_LOCAL
+-#define AF_UNIX PF_UNIX
+-#define AF_FILE PF_FILE
+-#define AF_INET PF_INET
+-#define AF_AX25 PF_AX25
+-#define AF_IPX PF_IPX
+-#define AF_APPLETALK PF_APPLETALK
+-#define AF_NETROM PF_NETROM
+-#define AF_BRIDGE PF_BRIDGE
+-#define AF_ATMPVC PF_ATMPVC
+-#define AF_X25 PF_X25
+-#define AF_INET6 PF_INET6
+-#define AF_ROSE PF_ROSE
+-#define AF_DECnet PF_DECnet
+-#define AF_NETBEUI PF_NETBEUI
+-#define AF_SECURITY PF_SECURITY
+-#define AF_KEY PF_KEY
+-#define AF_NETLINK PF_NETLINK
+-#define AF_ROUTE PF_ROUTE
+-#define AF_PACKET PF_PACKET
+-#define AF_ASH PF_ASH
+-#define AF_ECONET PF_ECONET
+-#define AF_ATMSVC PF_ATMSVC
+-#define AF_SNA PF_SNA
+-#define AF_IRDA PF_IRDA
+-#define AF_PPPOX PF_PPPOX
+-#define AF_WANPIPE PF_WANPIPE
+-#define AF_LLC PF_LLC
+-#define AF_CAN PF_CAN
+-#define AF_TIPC PF_TIPC
+-#define AF_BLUETOOTH PF_BLUETOOTH
+-#define AF_IUCV PF_IUCV
+-#define AF_RXRPC PF_RXRPC
+-#define AF_ISDN PF_ISDN
+-#define AF_PHONET PF_PHONET
+-#define AF_IEEE802154 PF_IEEE802154
+-#define AF_CAIF PF_CAIF
+-#define AF_ALG PF_ALG
+-#define AF_MAX PF_MAX
+-
+-/* Socket level values. Others are defined in the appropriate headers.
+-
+- XXX These definitions also should go into the appropriate headers as
+- far as they are available. */
+-#define SOL_RAW 255
+-#define SOL_DECNET 261
+-#define SOL_X25 262
+-#define SOL_PACKET 263
+-#define SOL_ATM 264 /* ATM layer (cell level). */
+-#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */
+-#define SOL_IRDA 266
+-
+-/* Maximum queue length specifiable by listen. */
+-#define SOMAXCONN 128
+-
+-/* Get the definition of the macro to define the common sockaddr members. */
+-#include <bits/sockaddr.h>
+-
+-/* Structure describing a generic socket address. */
+-struct sockaddr
+- {
+- __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
+- char sa_data[14]; /* Address data. */
+- };
+-
+-
+-/* Structure large enough to hold any socket address (with the historical
+- exception of AF_UNIX). We reserve 128 bytes. */
+-#define __ss_aligntype unsigned long int
+-#define _SS_SIZE 128
+-#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+-
+-struct sockaddr_storage
+- {
+- __SOCKADDR_COMMON (ss_); /* Address family, etc. */
+- __ss_aligntype __ss_align; /* Force desired alignment. */
+- char __ss_padding[_SS_PADSIZE];
+- };
+-
+-
+-/* Bits in the FLAGS argument to `send', `recv', et al. */
+-enum
+- {
+- MSG_OOB = 0x01, /* Process out-of-band data. */
+-#define MSG_OOB MSG_OOB
+- MSG_PEEK = 0x02, /* Peek at incoming messages. */
+-#define MSG_PEEK MSG_PEEK
+- MSG_DONTROUTE = 0x04, /* Don't use local routing. */
+-#define MSG_DONTROUTE MSG_DONTROUTE
+-#ifdef __USE_GNU
+- /* DECnet uses a different name. */
+- MSG_TRYHARD = MSG_DONTROUTE,
+-# define MSG_TRYHARD MSG_DONTROUTE
+-#endif
+- MSG_CTRUNC = 0x08, /* Control data lost before delivery. */
+-#define MSG_CTRUNC MSG_CTRUNC
+- MSG_PROXY = 0x10, /* Supply or ask second address. */
+-#define MSG_PROXY MSG_PROXY
+- MSG_TRUNC = 0x20,
+-#define MSG_TRUNC MSG_TRUNC
+- MSG_DONTWAIT = 0x40, /* Nonblocking IO. */
+-#define MSG_DONTWAIT MSG_DONTWAIT
+- MSG_EOR = 0x80, /* End of record. */
+-#define MSG_EOR MSG_EOR
+- MSG_WAITALL = 0x100, /* Wait for a full request. */
+-#define MSG_WAITALL MSG_WAITALL
+- MSG_FIN = 0x200,
+-#define MSG_FIN MSG_FIN
+- MSG_SYN = 0x400,
+-#define MSG_SYN MSG_SYN
+- MSG_CONFIRM = 0x800, /* Confirm path validity. */
+-#define MSG_CONFIRM MSG_CONFIRM
+- MSG_RST = 0x1000,
+-#define MSG_RST MSG_RST
+- MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */
+-#define MSG_ERRQUEUE MSG_ERRQUEUE
+- MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */
+-#define MSG_NOSIGNAL MSG_NOSIGNAL
+- MSG_MORE = 0x8000, /* Sender will send more. */
+-#define MSG_MORE MSG_MORE
+- MSG_WAITFORONE = 0x10000, /* Wait for at least one packet to return.*/
+-#define MSG_WAITFORONE MSG_WAITFORONE
+-
+- MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file
+- descriptor received through
+- SCM_RIGHTS. */
+-#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+- };
+-
+-
+-/* Structure describing messages sent by
+- `sendmsg' and received by `recvmsg'. */
+-/* Note: do not change these members to match glibc; these match the
+- SuSv3 spec already (e.g. msg_iovlen/msg_controllen).
+- http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html */
+-/* Note: linux kernel uses __kernel_size_t (which is 8bytes on 64bit
+- platforms, and 4bytes on 32bit platforms) for msg_iovlen/msg_controllen */
+-struct msghdr
+- {
+- void *msg_name; /* Address to send to/receive from. */
+- socklen_t msg_namelen; /* Length of address data. */
+-
+- struct iovec *msg_iov; /* Vector of data to send/receive into. */
+-#if __WORDSIZE == 32
+- int msg_iovlen; /* Number of elements in the vector. */
+-#else
+- size_t msg_iovlen; /* Number of elements in the vector. */
+-#endif
+-
+- void *msg_control; /* Ancillary data (eg BSD filedesc passing). */
+-#if __WORDSIZE == 32
+- socklen_t msg_controllen; /* Ancillary data buffer length. */
+-#else
+- size_t msg_controllen; /* Ancillary data buffer length. */
+-#endif
+-
+- int msg_flags; /* Flags on received message. */
+- };
+-
+-/* Structure used for storage of ancillary data object information. */
+-struct cmsghdr
+- {
+- size_t cmsg_len; /* Length of data in cmsg_data plus length
+- of cmsghdr structure. */
+- int cmsg_level; /* Originating protocol. */
+- int cmsg_type; /* Protocol specific type. */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+- __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
+-#endif
+- };
+-
+-/* Ancillary data object manipulation macros. */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+-#else
+-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+-#endif
+-#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+-#define CMSG_FIRSTHDR(mhdr) \
+- ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
+- ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
+-#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+- & (size_t) ~(sizeof (size_t) - 1))
+-#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+- + CMSG_ALIGN (sizeof (struct cmsghdr)))
+-#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+-
+-extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+- struct cmsghdr *__cmsg) __THROW;
+-libc_hidden_proto(__cmsg_nxthdr)
+-#ifdef __USE_EXTERN_INLINES
+-# ifndef _EXTERN_INLINE
+-# define _EXTERN_INLINE extern __inline
+-# endif
+-_EXTERN_INLINE struct cmsghdr *
+-__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+-{
+- if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+- /* The kernel header does this so there may be a reason. */
+- return 0;
+-
+- __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+- + CMSG_ALIGN (__cmsg->cmsg_len));
+- if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+- + __mhdr->msg_controllen)
+- || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+- > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+- /* No more entries. */
+- return 0;
+- return __cmsg;
+-}
+-#endif /* Use `extern inline'. */
+-
+-/* Socket level message types. This must match the definitions in
+- <linux/socket.h>. */
+-enum
+- {
+- SCM_RIGHTS = 0x01 /* Transfer file descriptors. */
+-#define SCM_RIGHTS SCM_RIGHTS
+-#ifdef __USE_BSD
+- , SCM_CREDENTIALS = 0x02 /* Credentials passing. */
+-# define SCM_CREDENTIALS SCM_CREDENTIALS
+-#endif
+- };
+-
+-/* User visible structure for SCM_CREDENTIALS message */
+-
+-struct ucred
+-{
+- pid_t pid; /* PID of sending process. */
+- uid_t uid; /* UID of sending process. */
+- gid_t gid; /* GID of sending process. */
+-};
+-
+-/* Get socket manipulation related informations from kernel headers. */
+-#ifndef __GLIBC__
+-#define __GLIBC__ 2
+-#include <asm/socket.h>
+-#undef __GLIBC__
+-#else
+-#include <asm/socket.h>
+-#endif
+-
+-
+-/* Structure used to manipulate the SO_LINGER option. */
+-struct linger
+- {
+- int l_onoff; /* Nonzero to linger on close. */
+- int l_linger; /* Time to linger. */
+- };
+-
+-#endif /* bits/socket.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/socket_type.h uClibc-git/libc/sysdeps/linux/mips/bits/socket_type.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/socket_type.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/bits/socket_type.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,55 @@
++/* System-specific socket constants and types. Linux/MIPS version.
++ Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets. */
++enum __socket_type
++{
++ SOCK_DGRAM = 1, /* Connectionless, unreliable datagrams
++ of fixed maximum length. */
++#define SOCK_DGRAM SOCK_DGRAM
++ SOCK_STREAM = 2, /* Sequenced, reliable, connection-based
++ byte streams. */
++#define SOCK_STREAM SOCK_STREAM
++ SOCK_RAW = 3, /* Raw protocol interface. */
++#define SOCK_RAW SOCK_RAW
++ SOCK_RDM = 4, /* Reliably-delivered messages. */
++#define SOCK_RDM SOCK_RDM
++ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
++ datagrams of fixed maximum length. */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++ SOCK_DCCP = 6,
++#define SOCK_DCCP SOCK_DCCP /* Datagram Congestion Control Protocol. */
++ SOCK_PACKET = 10, /* Linux specific way of getting packets
++ at the dev level. For writing rarp and
++ other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++ /* Flags to be ORed into the type parameter of socket and socketpair. */
++
++ SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
++ new descriptor(s). */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++ SOCK_NONBLOCK = 00000200 /* Atomically mark descriptor(s) as
++ non-blocking. */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/mips/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/statfs.h uClibc-git/libc/sysdeps/linux/mips/bits/statfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/statfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/statfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STATFS_H
+ # error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/stat.h uClibc-git/libc/sysdeps/linux/mips/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/syscalls.h uClibc-git/libc/sysdeps/linux/mips/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -29,7 +29,7 @@
+ } \
+ result_var; })
+
+-#define INTERNAL_SYSCALL_DECL(err) long err
++#define INTERNAL_SYSCALL_DECL(err) long err attribute_unused
+
+ #define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/termios.h uClibc-git/libc/sysdeps/linux/mips/bits/termios.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TERMIOS_H
+ # error "Never include <bits/termios.h> directly; use <termios.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -4,6 +4,7 @@
+
+ #ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+ #define _BITS_UCLIBC_ARCH_FEATURES_H
++#include <sgidefs.h>
+
+ /* instruction used when calling abort() to kill yourself */
+ #define __UCLIBC_ABORT_INSTRUCTION__ "break 255"
+@@ -11,8 +12,12 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#if _MIPS_SIM == _ABIO32
++#define __UCLIBC_SYSCALL_ALIGN_64BIT__
++#else
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
++#endif
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/mips/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/uClibc_page.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* Supply an architecture specific value for PAGE_SIZE and friends. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/wordsize.h uClibc-git/libc/sysdeps/linux/mips/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE _MIPS_SZPTR
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/brk.c uClibc-git/libc/sysdeps/linux/mips/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/mips/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/mips/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/cacheflush.c uClibc-git/libc/sysdeps/linux/mips/cacheflush.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/cacheflush.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/cacheflush.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,19 +12,18 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the uClibc Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the uClibc Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <errno.h>
+-#include <unistd.h>
+ #include <sys/syscall.h>
+
+ #ifdef __NR_cacheflush
++# include <sys/cachectl.h>
+ _syscall3(int, cacheflush, void *, addr, const int, nbytes, const int, op)
+-strong_alias(cacheflush, _flush_cache)
++strong_alias_untyped(cacheflush, _flush_cache)
+ #endif
+
+ #ifdef __NR_cachectl
++# include <sys/cachectl.h>
+ _syscall3(int, cachectl, void *, addr, const int, nbytes, const int, op)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/clone.S uClibc-git/libc/sysdeps/linux/mips/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/crt1.S uClibc-git/libc/sysdeps/linux/mips/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -31,9 +31,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include <sys/regdef.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/fpu_control.h uClibc-git/libc/sysdeps/linux/mips/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/getcontext.S uClibc-git/libc/sysdeps/linux/mips/getcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/getcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/getcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,148 @@
++/* Save current context.
++ Copyright (C) 2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Maciej W. Rozycki <macro@codesourcery.com>.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <sys/asm.h>
++#include <sys/fpregdef.h>
++#include <sys/regdef.h>
++
++#include "ucontext_i.h"
++
++/* int getcontext (ucontext_t *ucp) */
++
++ .text
++LOCALSZ = 0
++MASK = 0x00000000
++#ifdef __PIC__
++LOCALSZ = 1 /* save gp */
++# if _MIPS_SIM != _ABIO32
++MASK = 0x10000000
++# endif
++#endif
++FRAMESZ = ((LOCALSZ * SZREG) + ALSZ) & ALMASK
++GPOFF = FRAMESZ - (1 * SZREG)
++
++NESTED (__getcontext, FRAMESZ, ra)
++ .mask MASK, 0
++ .fmask 0x00000000, 0
++
++#ifdef __PIC__
++ SETUP_GP
++
++ move a2, sp
++# define _SP a2
++
++# if _MIPS_SIM != _ABIO32
++ move a3, gp
++# define _GP a3
++# endif
++
++ PTR_ADDIU sp, -FRAMESZ
++ SETUP_GP64 (GPOFF, __getcontext)
++ SAVE_GP (GPOFF)
++
++#else /* ! __PIC__ */
++# define _SP sp
++# define _GP gp
++
++#endif /* ! __PIC__ */
++
++#ifdef PROF
++ .set noat
++ move AT, ra
++ jal _mcount
++ .set at
++#endif
++
++ /* Store a magic flag. */
++ li v1, 1
++ REG_S v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */
++
++ REG_S s0, (16 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s1, (17 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s2, (18 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s3, (19 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s4, (20 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s5, (21 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s6, (22 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s7, (23 * SZREG + MCONTEXT_GREGS)(a0)
++#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32
++ REG_S _GP, (28 * SZREG + MCONTEXT_GREGS)(a0)
++#endif
++ REG_S _SP, (29 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S fp, (30 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S ra, (31 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S ra, MCONTEXT_PC(a0)
++
++#ifdef __mips_hard_float
++# if _MIPS_SIM == _ABI64
++ s.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(a0)
++
++# else /* _MIPS_SIM != _ABI64 */
++ s.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(a0)
++
++# endif /* _MIPS_SIM != _ABI64 */
++
++ cfc1 v1, fcr31
++ sw v1, MCONTEXT_FPC_CSR(a0)
++#endif /* __mips_hard_float */
++
++/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */
++ li a3, _NSIG8
++ PTR_ADDU a2, a0, UCONTEXT_SIGMASK
++ move a1, zero
++ li a0, SIG_BLOCK
++
++ li v0, SYS_ify (rt_sigprocmask)
++ syscall
++ bnez a3, 99f
++
++#ifdef __PIC__
++ RESTORE_GP64
++ PTR_ADDIU sp, FRAMESZ
++#endif
++ move v0, zero
++ jr ra
++
++99:
++#ifdef __PIC__
++ PTR_LA t9, JUMPTARGET (__syscall_error)
++ RESTORE_GP64
++ PTR_ADDIU sp, FRAMESZ
++ jr t9
++
++#else /* ! __PIC__ */
++
++ j JUMPTARGET (__syscall_error)
++#endif /* ! __PIC__ */
++PSEUDO_END (__getcontext)
++
++weak_alias (__getcontext, getcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/mips/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,22 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[0].__sp)
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[0].__sp - (_adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/kernel_rt_sigframe.h uClibc-git/libc/sysdeps/linux/mips/kernel_rt_sigframe.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/kernel_rt_sigframe.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/kernel_rt_sigframe.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,10 @@
++/* Linux kernel RT signal frame. */
++typedef struct kernel_rt_sigframe
++ {
++ uint32_t rs_ass[4];
++ uint32_t rs_code[2];
++ siginfo_t rs_info;
++ struct ucontext rs_uc;
++ uint32_t rs_altcode[8] __attribute__ ((__aligned__ (1 << 7)));
++ }
++kernel_rt_sigframe_t;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/__longjmp.c uClibc-git/libc/sysdeps/linux/mips/__longjmp.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/__longjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/__longjmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <setjmp.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/makecontext.S uClibc-git/libc/sysdeps/linux/mips/makecontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/makecontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/makecontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,188 @@
++/* Modify saved context.
++ Copyright (C) 2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Maciej W. Rozycki <macro@codesourcery.com>.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <sys/asm.h>
++#include <sys/fpregdef.h>
++#include <sys/regdef.h>
++
++#include "ucontext_i.h"
++
++/* int makecontext (ucontext_t *ucp, (void *func) (), int argc, ...) */
++
++ .text
++LOCALSZ = 0
++ARGSZ = 0
++MASK = 0x00000000
++#ifdef __PIC__
++LOCALSZ = 1 /* save gp */
++#endif
++#if _MIPS_SIM != _ABIO32
++ARGSZ = 5 /* save a3-a7 */
++# ifdef __PIC__
++MASK = 0x10000000
++# endif
++#endif
++FRAMESZ = (((ARGSZ + LOCALSZ) * SZREG) + ALSZ) & ALMASK
++GPOFF = FRAMESZ - ((ARGSZ + 1) * SZREG)
++#if _MIPS_SIM != _ABIO32
++A3OFF = FRAMESZ - (5 * SZREG) /* callee-allocated */
++A4OFF = FRAMESZ - (4 * SZREG)
++A5OFF = FRAMESZ - (3 * SZREG)
++A6OFF = FRAMESZ - (2 * SZREG)
++A7OFF = FRAMESZ - (1 * SZREG)
++NARGREGS = 8
++#else
++A3OFF = FRAMESZ + (3 * SZREG) /* caller-allocated */
++NARGREGS = 4
++#endif
++
++NESTED (__makecontext, FRAMESZ, ra)
++ .mask MASK, -(ARGSZ * SZREG)
++ .fmask 0x00000000, 0
++
++98:
++#ifdef __PIC__
++ SETUP_GP
++#endif
++
++ PTR_ADDIU sp, -FRAMESZ
++
++#ifdef __PIC__
++ SETUP_GP64 (GPOFF, __makecontext)
++ SAVE_GP (GPOFF)
++#endif
++
++#ifdef PROF
++ .set noat
++ move AT, ra
++ jal _mcount
++ .set at
++#endif
++
++ /* Store args to be passed. */
++ REG_S a3, A3OFF(sp)
++#if _MIPS_SIM != _ABIO32
++ REG_S a4, A4OFF(sp)
++ REG_S a5, A5OFF(sp)
++ REG_S a6, A6OFF(sp)
++ REG_S a7, A7OFF(sp)
++#endif
++
++ /* Store a magic flag. */
++ li v1, 1
++ REG_S v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */
++
++ /* Set up the stack. */
++ PTR_L t0, STACK_SP(a0)
++ PTR_L t2, STACK_SIZE(a0)
++ PTR_ADDIU t1, sp, A3OFF
++ PTR_ADDU t0, t2
++ and t0, ALMASK
++ blez a2, 2f /* no arguments */
++
++ /* Store register arguments. */
++ PTR_ADDIU t2, a0, MCONTEXT_GREGS + 4 * SZREG
++ move t3, zero
++0:
++ addiu t3, 1
++ REG_L v1, (t1)
++ PTR_ADDIU t1, SZREG
++ REG_S v1, (t2)
++ PTR_ADDIU t2, SZREG
++ bgeu t3, a2, 2f /* all done */
++ bltu t3, NARGREGS, 0b /* next */
++
++ /* Make room for stack arguments. */
++ PTR_SUBU t2, a2, t3
++ PTR_SLL t2, 3
++ PTR_SUBU t0, t2
++ and t0, ALMASK
++
++ /* Store stack arguments. */
++ move t2, t0
++1:
++ addiu t3, 1
++ REG_L v1, (t1)
++ PTR_ADDIU t1, SZREG
++ REG_S v1, (t2)
++ PTR_ADDIU t2, SZREG
++ bltu t3, a2, 1b /* next */
++
++2:
++#if _MIPS_SIM == _ABIO32
++ /* Make room for a0-a3 storage. */
++ PTR_ADDIU t0, -(NARGSAVE * SZREG)
++#endif
++ PTR_L v1, UCONTEXT_LINK(a0)
++#ifdef __PIC__
++ PTR_ADDIU t9, 99f - 98b
++#else
++ PTR_LA t9, 99f
++#endif
++ REG_S t0, (29 * SZREG + MCONTEXT_GREGS)(a0) /* sp */
++ REG_S v1, (16 * SZREG + MCONTEXT_GREGS)(a0) /* s0 */
++#ifdef __PIC__
++ REG_S gp, (17 * SZREG + MCONTEXT_GREGS)(a0) /* s1 */
++#endif
++ REG_S t9, (31 * SZREG + MCONTEXT_GREGS)(a0) /* ra */
++ REG_S a1, MCONTEXT_PC(a0)
++
++#ifdef __PIC__
++ RESTORE_GP64
++ PTR_ADDIU sp, FRAMESZ
++#endif
++ jr ra
++
++99:
++#ifdef __PIC__
++ move gp, s1
++#endif
++ move a0, zero
++ beqz s0, 0f
++
++ /* setcontext (ucp) */
++ move a0, s0
++#ifdef __PIC__
++ PTR_LA t9, JUMPTARGET (__setcontext)
++ jalr t9
++# if _MIPS_SIM == _ABIO32
++ move gp, s1
++# endif
++#else
++ jal JUMPTARGET (__setcontext)
++#endif
++ move a0, v0
++
++0:
++ /* exit (a0) */
++#ifdef __PIC__
++ PTR_LA t9, HIDDEN_JUMPTARGET (exit)
++ jalr t9
++#else
++ jal HIDDEN_JUMPTARGET (exit)
++#endif
++
++ /* You don't exist, you won't feel anything. */
++1:
++ lb zero, (zero)
++ b 1b
++PSEUDO_END (__makecontext)
++
++weak_alias (__makecontext, makecontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/Makefile.arch uClibc-git/libc/sysdeps/linux/mips/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,20 +5,18 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := \
+- __longjmp.c brk.c setjmp_aux.c mmap.c \
+- cacheflush.c pread_write.c sigaction.c sysmips.c _test_and_set.c \
+- readahead.c
+-
+-SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S
+-
+-ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
+-CSRC += posix_fadvise.c posix_fadvise64.c
+-endif
+-
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-SSRC += vfork.S clone.S
+-endif
++CSRC-y := \
++ __longjmp.c brk.c setjmp_aux.c \
++ pread_write.c sigaction.c _test_and_set.c
++
++SSRC-y := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S
++
++CSRC-$(UCLIBC_LINUX_SPECIFIC) += cacheflush.c sysmips.c
++CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise.c
++CSRC-$(if $(findstring yy,$(UCLIBC_HAS_LFS)$(UCLIBC_HAS_ADVANCED_REALTIME)),y) += posix_fadvise64.c
++SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += vfork.S clone.S
++SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.S setcontext.S getcontext.S \
++ swapcontext.S
+
+ ASFLAGS-syscall_error.S += -D_LIBC_REENTRANT
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/mmap.c uClibc-git/libc/sysdeps/linux/mips/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,26 +0,0 @@
+-/* Use new style mmap for mips */
+-/*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <unistd.h>
+-#include <errno.h>
+-#include <sys/mman.h>
+-#include <sys/syscall.h>
+-
+-
+-#if 0
+-/* For now, leave mmap using mmap1 since mmap2 seems
+- * to have issues (i.e. it doesn't work 100% properly).
+- */
+-#ifdef __NR_mmap2
+-# undef __NR_mmap
+-# define __NR_mmap __NR_mmap2
+-#endif
+-#endif
+-
+-_syscall6 (__ptr_t, mmap, __ptr_t, addr, size_t, len, int, prot,
+- int, flags, int, fd, __off_t, offset)
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/posix_fadvise64.c uClibc-git/libc/sysdeps/linux/mips/posix_fadvise64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/posix_fadvise64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/posix_fadvise64.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,36 +8,28 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
++#include <_lfs_64.h>
+ #include <sys/syscall.h>
+-#include <fcntl.h>
++#include <bits/wordsize.h>
+
+-#ifdef __UCLIBC_HAS_LFS__
++/* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */
++#if defined __NR_fadvise64 && __WORDSIZE == 32
++# include <fcntl.h>
++# include <endian.h>
+
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advice)
++int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice)
+ {
+-/* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */
+-#ifdef __NR_fadvise64
+ INTERNAL_SYSCALL_DECL(err);
+-# if _MIPS_SIM == _MIPS_SIM_ABI32
++# if _MIPS_SIM == _ABIO32
+ int ret = INTERNAL_SYSCALL(fadvise64, err, 7, fd, 0,
+- __LONG_LONG_PAIR ((long) (offset >> 32), (long) offset),
+- __LONG_LONG_PAIR ((long) (len >> 32), (long) len),
+- advice);
++ __LONG_LONG_PAIR ((long) (offset >> 32), (long) offset),
++ __LONG_LONG_PAIR ((long) (len >> 32), (long) len),
++ advice);
+ # else /* N32 || N64 */
+ int ret = INTERNAL_SYSCALL(fadvise64, err, 4, fd, offset, len, advice);
+ # endif
+ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
+ return INTERNAL_SYSCALL_ERRNO (ret, err);
+ return 0;
+-#else
+- return ENOSYS;
+-#endif
+ }
+-
+-#endif /* __UCLIBC_HAS_LFS__ */
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/posix_fadvise.c uClibc-git/libc/sysdeps/linux/mips/posix_fadvise.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/posix_fadvise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/posix_fadvise.c 2014-02-03 12:32:56.000000000 +0100
+@@ -8,19 +8,16 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
+ #include <sys/syscall.h>
+-#include <fcntl.h>
+
+-int posix_fadvise(int fd, off_t offset, off_t len, int advice)
+-{
+ /* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */
+ #ifdef __NR_fadvise64
++# include <fcntl.h>
++# include <endian.h>
++# include <bits/wordsize.h>
++
++int posix_fadvise(int fd, off_t offset, off_t len, int advice)
++{
+ INTERNAL_SYSCALL_DECL(err);
+ # if _MIPS_SIM == _ABIO32
+ int ret = INTERNAL_SYSCALL(fadvise64, err, 7, fd, 0,
+@@ -33,7 +30,9 @@
+ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
+ return INTERNAL_SYSCALL_ERRNO (ret, err);
+ return 0;
+-#else
+- return ENOSYS;
+-#endif
+ }
++# if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
++strong_alias(posix_fadvise,posix_fadvise64)
++# endif
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/pread_write.c uClibc-git/libc/sysdeps/linux/mips/pread_write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/pread_write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/pread_write.c 2014-03-13 09:07:55.000000000 +0100
+@@ -4,112 +4,28 @@
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+-/*
+- * Based in part on the files
+- * ./sysdeps/unix/sysv/linux/pwrite.c,
+- * ./sysdeps/unix/sysv/linux/pread.c,
+- * sysdeps/posix/pread.c
+- * sysdeps/posix/pwrite.c
+- * from GNU libc 2.2.5, but reworked considerably...
+- */
+
+ #include <sys/syscall.h>
+ #include <unistd.h>
+-#include <stdint.h>
+ #include <endian.h>
+ #include <sgidefs.h>
+
+-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */
+-# ifdef __NR_pread
+-# error "__NR_pread and __NR_pread64 both defined???"
+-# endif
+-# define __NR_pread __NR_pread64
+-#endif
+-
+-extern __typeof(pread) __libc_pread;
+-extern __typeof(pwrite) __libc_pwrite;
+-#ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pread64) __libc_pread64;
+-extern __typeof(pwrite64) __libc_pwrite64;
+-#endif
+-
+-#include <bits/kernel_types.h>
+-
+-
+-#ifdef __NR_pread
+-
+-# if _MIPS_SIM == _MIPS_SIM_ABI64
+-# define __NR___libc_pread __NR_pread
+-_syscall4(ssize_t, __libc_pread, int, fd, void *, buf, size_t, count, off_t, offset)
+-weak_alias (__libc_pread, pread)
+-# ifdef __UCLIBC_HAS_LFS__
+-# define __NR___libc_pread64 __NR_pread
+-_syscall4(ssize_t, __libc_pread64, int, fd, void *, buf, size_t, count, off64_t, offset)
+-weak_alias (__libc_pread64, pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-# else /* O32 || N32 */
+-# define __NR___syscall_pread __NR_pread
+-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf,
+- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return(__syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR(offset>>31,offset)));
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return(__syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR (high, low)));
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-# endif /* O32 || N32 */
+-
+-#endif /* __NR_pread */
+-
+-/**********************************************************************/
+-
+-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */
+-# ifdef __NR_pwrite
+-# error "__NR_pwrite and __NR_pwrite64 both defined???"
+-# endif
+-# define __NR_pwrite __NR_pwrite64
++/* We should generalize this for 32bit userlands w/64bit regs. This applies
++ * to the x86_64 x32 and the mips n32 ABIs. */
++#if _MIPS_SIM == _MIPS_SIM_NABI32
++# define __NR___syscall_pread __NR_pread64
++static _syscall4(ssize_t, __syscall_pread, int, fd, void *, buf, size_t, count, off_t, offset)
++# define MY_PREAD(fd, buf, count, offset) \
++ __syscall_pread(fd, buf, count, offset)
++# define MY_PREAD64(fd, buf, count, offset) \
++ __syscall_pread(fd, buf, count, offset)
++
++# define __NR___syscall_pwrite __NR_pwrite64
++static _syscall4(ssize_t, __syscall_pwrite, int, fd, const void *, buf, size_t, count, off_t, offset)
++# define MY_PWRITE(fd, buf, count, offset) \
++ __syscall_pwrite(fd, buf, count, offset)
++# define MY_PWRITE64(fd, buf, count, offset) \
++ __syscall_pwrite(fd, buf, count, offset)
+ #endif
+
+-#ifdef __NR_pwrite
+-
+-# if _MIPS_SIM == _MIPS_SIM_ABI64
+-# define __NR___libc_pwrite __NR_pwrite
+-_syscall4(ssize_t, __libc_pwrite, int, fd, const void *, buf, size_t, count, off_t, offset)
+-weak_alias (__libc_pwrite, pwrite)
+-# ifdef __UCLIBC_HAS_LFS__
+-# define __NR___libc_pwrite64 __NR_pwrite
+-_syscall4(ssize_t, __libc_pwrite64, int, fd, const void *, buf, size_t, count, off64_t, offset)
+-weak_alias (__libc_pwrite64, pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-# else /* O32 || N32 */
+-# define __NR___syscall_pwrite __NR_pwrite
+-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
+- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- return(__syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR(offset>>31,offset)));
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return(__syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR (high, low)));
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-# endif /* O32 || N32 */
+-#endif /* __NR_pwrite */
++#include "../common/pread_write.c"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/readahead.c uClibc-git/libc/sysdeps/linux/mips/readahead.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/readahead.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/readahead.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,41 +0,0 @@
+-/* Provide kernel hint to read ahead.
+- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <errno.h>
+-#include <fcntl.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-#include <_lfs_64.h>
+-# ifdef __NR_readahead
+-
+-ssize_t readahead(int fd, off64_t offset, size_t count)
+-{
+-# if _MIPS_SIM == _ABIO32
+- return INLINE_SYSCALL (readahead, 5, fd, 0,
+- __LONG_LONG_PAIR ((off_t) (offset >> 32), (off_t) offset),
+- count);
+-# else /* N32 || N64 */
+- return INLINE_SYSCALL (readahead, 3, fd, offset, count);
+-# endif
+-}
+-
+-# endif
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/setcontext.S uClibc-git/libc/sysdeps/linux/mips/setcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/setcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/setcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,191 @@
++/* Set current context.
++ Copyright (C) 2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Maciej W. Rozycki <macro@codesourcery.com>.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <sys/asm.h>
++#include <sys/fpregdef.h>
++#include <sys/regdef.h>
++
++#include "ucontext_i.h"
++
++/* int setcontext (const ucontext_t *ucp) */
++
++ .text
++LOCALSZ = 0
++ARGSZ = 0
++MASK = 0x00000000
++#ifdef __PIC__
++LOCALSZ = 1 /* save gp */
++#endif
++#if _MIPS_SIM != _ABIO32
++ARGSZ = 1 /* save a0 */
++# ifdef __PIC__
++MASK = 0x10000000
++# endif
++#endif
++FRAMESZ = (((ARGSZ + LOCALSZ) * SZREG) + ALSZ) & ALMASK
++GPOFF = FRAMESZ - ((ARGSZ + 1) * SZREG)
++#if _MIPS_SIM != _ABIO32
++A0OFF = FRAMESZ - (1 * SZREG) /* callee-allocated */
++#else
++A0OFF = FRAMESZ + (0 * SZREG) /* caller-allocated */
++#endif
++
++NESTED (__setcontext, FRAMESZ, ra)
++ .mask MASK, -(ARGSZ * SZREG)
++ .fmask 0x00000000, 0
++
++#ifdef __PIC__
++ SETUP_GP
++#endif
++
++ PTR_ADDIU sp, -FRAMESZ
++
++#ifdef __PIC__
++ SETUP_GP64 (GPOFF, __setcontext)
++ SAVE_GP (GPOFF)
++#endif
++
++#ifdef PROF
++ .set noat
++ move AT, ra
++ jal _mcount
++ .set at
++#endif
++
++ /* Check for the magic flag. */
++ li v0, 1
++ REG_L v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */
++ bne v0, v1, 98f
++
++ REG_S a0, A0OFF(sp)
++
++/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */
++ li a3, _NSIG8
++ move a2, zero
++ PTR_ADDU a1, a0, UCONTEXT_SIGMASK
++ li a0, SIG_SETMASK
++
++ li v0, SYS_ify (rt_sigprocmask)
++ syscall
++ bnez a3, 99f
++
++ REG_L v0, A0OFF(sp)
++
++#ifdef __mips_hard_float
++# if _MIPS_SIM == _ABI64
++ l.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(v0)
++
++# else /* _MIPS_SIM != _ABI64 */
++ l.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(v0)
++
++# endif /* _MIPS_SIM != _ABI64 */
++
++ lw v1, MCONTEXT_FPC_CSR(v0)
++ ctc1 v1, fcr31
++#endif /* __mips_hard_float */
++
++ /* Note the contents of argument registers will be random
++ unless makecontext() has been called. */
++ REG_L a0, (4 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a1, (5 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a2, (6 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a3, (7 * SZREG + MCONTEXT_GREGS)(v0)
++#if _MIPS_SIM != _ABIO32
++ REG_L a4, (8 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a5, (9 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a6, (10 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a7, (11 * SZREG + MCONTEXT_GREGS)(v0)
++#endif
++
++ REG_L s0, (16 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s1, (17 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s2, (18 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s3, (19 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s4, (20 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s5, (21 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s6, (22 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s7, (23 * SZREG + MCONTEXT_GREGS)(v0)
++#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32
++ REG_L gp, (28 * SZREG + MCONTEXT_GREGS)(v0)
++#endif
++ REG_L sp, (29 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L fp, (30 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L ra, (31 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L t9, MCONTEXT_PC(v0)
++
++ move v0, zero
++ jr t9
++
++98:
++ /* This is a context obtained from a signal handler.
++ Perform a full restore by pushing the context
++ passed onto a simulated signal frame on the stack
++ and call the signal return syscall as if a signal
++ handler exited normally. */
++ PTR_ADDIU sp, -((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
++
++ /* Only ucontext is referred to from rt_sigreturn,
++ copy it. */
++ PTR_ADDIU t1, sp, RT_SIGFRAME_UCONTEXT
++ li t3, ((UCONTEXT_SIZE + SZREG - 1) / SZREG) - 1
++0:
++ REG_L t2, (a0)
++ PTR_ADDIU a0, SZREG
++ REG_S t2, (t1)
++ PTR_ADDIU t1, SZREG
++ .set noreorder
++ bgtz t3, 0b
++ addiu t3, -1
++ .set reorder
++
++/* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */
++ li v0, SYS_ify (rt_sigreturn)
++ syscall
++
++ /* Restore the stack and fall through to the error
++ path. Successful rt_sigreturn never returns to
++ its calling place. */
++ PTR_ADDIU sp, ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
++99:
++#ifdef __PIC__
++ PTR_LA t9, JUMPTARGET (__syscall_error)
++ RESTORE_GP64
++ PTR_ADDIU sp, FRAMESZ
++ jr t9
++
++#else /* ! __PIC__ */
++
++ j JUMPTARGET (__syscall_error)
++#endif /* ! __PIC__ */
++PSEUDO_END (__setcontext)
++
++weak_alias (__setcontext, setcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/setjmp_aux.c uClibc-git/libc/sysdeps/linux/mips/setjmp_aux.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/setjmp_aux.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/setjmp_aux.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <setjmp.h>
+@@ -27,11 +26,9 @@
+ pointer. We do things this way because it's difficult to reliably
+ access them in C. */
+
+-extern int __sigjmp_save (sigjmp_buf, int);
+-
+ int
+ #if _MIPS_SIM == _MIPS_SIM_ABI64
+-__sigsetjmp_aux (jmp_buf env, int savemask, long sp, long fp)
++__sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp, long long gp)
+ #else /* O32 || N32 */
+ __sigsetjmp_aux (jmp_buf env, int savemask, int sp, int fp)
+ #endif /* O32 || N32 */
+@@ -65,14 +62,14 @@
+ #endif
+
+ /* .. and the stack pointer; */
+- env[0].__jmpbuf[0].__sp = (void *) sp;
++ env[0].__jmpbuf[0].__sp = (ptrsize) sp;
+
+ /* .. and the FP; it'll be in s8. */
+- env[0].__jmpbuf[0].__fp = (void *) fp;
++ env[0].__jmpbuf[0].__fp = (ptrsize) fp;
+
+ /* .. and the GP; */
+ #if _MIPS_SIM == _MIPS_SIM_ABI64
+- __asm__ __volatile__ ("sd $gp, %0" : : "m" (env[0].__jmpbuf[0].__gp));
++ env[0].__jmpbuf[0].__gp = (ptrsize) gp;
+ #else
+ __asm__ __volatile__ ("sw $gp, %0" : : "m" (env[0].__jmpbuf[0].__gp));
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/setjmp.S uClibc-git/libc/sysdeps/linux/mips/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/regdef.h>
+ #include <sys/asm.h>
+@@ -53,6 +52,7 @@
+ PTR_LA t9, __sigsetjmp_aux
+ #if _MIPS_SIM != _MIPS_SIM_ABI32
+ .cpreturn
++ move a4, gp
+ #endif
+ jr t9
+ #else
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sgidefs.h uClibc-git/libc/sysdeps/linux/mips/sgidefs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sgidefs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sgidefs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SGIDEFS_H
+ #define _SGIDEFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sigaction.c uClibc-git/libc/sysdeps/linux/mips/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA.
++ see <http://www.gnu.org/licenses/>.
+
+ Totally hacked up for uClibc by Erik Andersen <andersen@codepoet.org>
+ */
+@@ -27,9 +26,6 @@
+
+ #define SA_RESTORER 0x04000000
+
+-extern __typeof(sigaction) __libc_sigaction;
+-
+-
+ #ifdef __NR_rt_sigaction
+
+ # if _MIPS_SIM != _ABIO32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/swapcontext.S uClibc-git/libc/sysdeps/linux/mips/swapcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/swapcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/swapcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,211 @@
++/* Save and set current context.
++ Copyright (C) 2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Maciej W. Rozycki <macro@codesourcery.com>.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library. If not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <sys/asm.h>
++#include <sys/fpregdef.h>
++#include <sys/regdef.h>
++
++#include "ucontext_i.h"
++
++/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */
++
++ .text
++LOCALSZ = 0
++ARGSZ = 0
++MASK = 0x00000000
++#ifdef __PIC__
++LOCALSZ = 1 /* save gp */
++#endif
++#if _MIPS_SIM != _ABIO32
++ARGSZ = 1 /* save a1 */
++# ifdef __PIC__
++MASK = 0x10000000
++# endif
++#endif
++FRAMESZ = (((ARGSZ + LOCALSZ) * SZREG) + ALSZ) & ALMASK
++GPOFF = FRAMESZ - ((ARGSZ + 1) * SZREG)
++#if _MIPS_SIM != _ABIO32
++A1OFF = FRAMESZ - (1 * SZREG) /* callee-allocated */
++#else
++A1OFF = FRAMESZ + (1 * SZREG) /* caller-allocated */
++#endif
++
++NESTED (__swapcontext, FRAMESZ, ra)
++ .mask MASK, -(ARGSZ * SZREG)
++ .fmask 0x00000000, 0
++
++#ifdef __PIC__
++ SETUP_GP
++
++ move a2, sp
++# define _SP a2
++
++# if _MIPS_SIM != _ABIO32
++ move a3, gp
++# define _GP a3
++# endif
++
++ PTR_ADDIU sp, -FRAMESZ
++ SETUP_GP64 (GPOFF, __swapcontext)
++ SAVE_GP (GPOFF)
++
++#else /* ! __PIC__ */
++# define _SP sp
++# define _GP gp
++
++#endif /* ! __PIC__ */
++
++#ifdef PROF
++ .set noat
++ move AT, ra
++ jal _mcount
++ .set at
++#endif
++
++ /* Store a magic flag. */
++ li v1, 1
++ REG_S v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */
++
++ REG_S s0, (16 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s1, (17 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s2, (18 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s3, (19 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s4, (20 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s5, (21 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s6, (22 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S s7, (23 * SZREG + MCONTEXT_GREGS)(a0)
++#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32
++ REG_S _GP, (28 * SZREG + MCONTEXT_GREGS)(a0)
++#endif
++ REG_S _SP, (29 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S fp, (30 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S ra, (31 * SZREG + MCONTEXT_GREGS)(a0)
++ REG_S ra, MCONTEXT_PC(a0)
++
++#ifdef __mips_hard_float
++# if _MIPS_SIM == _ABI64
++ s.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(a0)
++
++# else /* _MIPS_SIM != _ABI64 */
++ s.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0)
++ s.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(a0)
++
++# endif /* _MIPS_SIM != _ABI64 */
++
++ cfc1 v1, fcr31
++ sw v1, MCONTEXT_FPC_CSR(a0)
++#endif /* __mips_hard_float */
++
++ REG_S a1, A1OFF(sp)
++
++/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */
++ li a3, _NSIG8
++ PTR_ADDU a2, a0, UCONTEXT_SIGMASK
++ PTR_ADDU a1, a1, UCONTEXT_SIGMASK
++ li a0, SIG_SETMASK
++
++ li v0, SYS_ify (rt_sigprocmask)
++ syscall
++ bnez a3, 99f
++
++ REG_L v0, A1OFF(sp)
++
++#ifdef __mips_hard_float
++# if _MIPS_SIM == _ABI64
++ l.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(v0)
++
++# else /* _MIPS_SIM != _ABI64 */
++ l.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0)
++ l.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(v0)
++
++# endif /* _MIPS_SIM != _ABI64 */
++
++ lw v1, MCONTEXT_FPC_CSR(v0)
++ ctc1 v1, fcr31
++#endif /* __mips_hard_float */
++
++ /* Note the contents of argument registers will be random
++ unless makecontext() has been called. */
++ REG_L a0, (4 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a1, (5 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a2, (6 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a3, (7 * SZREG + MCONTEXT_GREGS)(v0)
++#if _MIPS_SIM != _ABIO32
++ REG_L a4, (8 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a5, (9 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a6, (10 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L a7, (11 * SZREG + MCONTEXT_GREGS)(v0)
++#endif
++
++ REG_L s0, (16 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s1, (17 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s2, (18 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s3, (19 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s4, (20 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s5, (21 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s6, (22 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L s7, (23 * SZREG + MCONTEXT_GREGS)(v0)
++#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32
++ REG_L gp, (28 * SZREG + MCONTEXT_GREGS)(v0)
++#endif
++ REG_L sp, (29 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L fp, (30 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L ra, (31 * SZREG + MCONTEXT_GREGS)(v0)
++ REG_L t9, MCONTEXT_PC(v0)
++
++ move v0, zero
++ jr t9
++
++99:
++#ifdef __PIC__
++ PTR_LA t9, JUMPTARGET (__syscall_error)
++ RESTORE_GP64
++ PTR_ADDIU sp, FRAMESZ
++ jr t9
++
++#else /* ! __PIC__ */
++
++ j JUMPTARGET (__syscall_error)
++#endif /* ! __PIC__ */
++PSEUDO_END (__swapcontext)
++
++weak_alias (__swapcontext, swapcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/asm.h uClibc-git/libc/sysdeps/linux/mips/sys/asm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/asm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/asm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_ASM_H
+ #define _SYS_ASM_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/cachectl.h uClibc-git/libc/sysdeps/linux/mips/sys/cachectl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/cachectl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/cachectl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_CACHECTL_H
+ #define _SYS_CACHECTL_H 1
+@@ -29,13 +28,15 @@
+ __BEGIN_DECLS
+
+ #ifdef __USE_MISC
+-extern int cachectl (void *addr, __const int nbytes, __const int op) __THROW;
++extern int cachectl (void *addr, const int nbytes, const int op) __THROW;
++#endif
++#if 0
++extern int __cachectl (void *addr, const int nbytes, const int op) __THROW;
+ #endif
+-extern int __cachectl (void *addr, __const int nbytes, __const int op) __THROW;
+ #ifdef __USE_MISC
+-extern int cacheflush (void *addr, __const int nbytes, __const int op) __THROW;
++extern int cacheflush (void *addr, const int nbytes, const int op) __THROW;
+ #endif
+-extern int _flush_cache (char *addr, __const int nbytes, __const int op) __THROW;
++extern int _flush_cache (char *addr, const int nbytes, const int op) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/fpregdef.h uClibc-git/libc/sysdeps/linux/mips/sys/fpregdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/fpregdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/fpregdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_FPREGDEF_H
+ #define _SYS_FPREGDEF_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/procfs.h uClibc-git/libc/sysdeps/linux/mips/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/regdef.h uClibc-git/libc/sysdeps/linux/mips/sys/regdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/regdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/regdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_REGDEF_H
+ #define _SYS_REGDEF_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/sysmips.h uClibc-git/libc/sysdeps/linux/mips/sys/sysmips.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/sysmips.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/sysmips.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SYSMIPS_H
+ #define _SYS_SYSMIPS_H 1
+@@ -36,8 +35,8 @@
+
+ __BEGIN_DECLS
+
+-extern int sysmips (__const int cmd, __const long arg1,
+- __const int arg2, __const int arg3) __THROW;
++extern int sysmips (const int cmd, const long arg1,
++ const int arg2, const int arg3) __THROW;
+
+ __END_DECLS
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/tas.h uClibc-git/libc/sysdeps/linux/mips/sys/tas.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/tas.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/tas.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_TAS_H
+ #define _SYS_TAS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/ucontext.h uClibc-git/libc/sysdeps/linux/mips/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Don't rely on this, the interface is currently messed up and may need to
+ be broken to be fixed. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/user.h uClibc-git/libc/sysdeps/linux/mips/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/syscall_error.S uClibc-git/libc/sysdeps/linux/mips/syscall_error.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/syscall_error.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/syscall_error.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/asm.h>
+ #include <sysdep.h>
+@@ -43,7 +42,7 @@
+ #ifdef __PIC__
+ SAVE_GP(GPOFF)
+ #endif
+- REG_S v0, V0OFF(sp)
++ REG_S a0, V0OFF(sp)
+ REG_S ra, RAOFF(sp)
+
+ /* Find our per-thread errno address */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/syscall.S uClibc-git/libc/sysdeps/linux/mips/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/asm.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/sysdep.h uClibc-git/libc/sysdeps/linux/mips/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/sysdep.h 2014-02-15 14:18:15.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINUX_MIPS_SYSDEP_H
+ #define _LINUX_MIPS_SYSDEP_H 1
+@@ -78,8 +77,6 @@
+ #undef PSEUDO_END_ERRVAL
+ #define PSEUDO_END_ERRVAL(sym) .end sym; .size sym,.-sym
+
+-#define ret_ERRVAL ret
+-
+ #define r0 v0
+ #define r1 v1
+ /* The mips move insn is d,s. */
+@@ -133,258 +130,6 @@
+
+ #else /* ! __ASSEMBLER__ */
+
+-/* Define a macro which expands into the inline wrapper code for a system
+- call. */
+-#undef INLINE_SYSCALL
+-#define INLINE_SYSCALL(name, nr, args...) \
+- ({ INTERNAL_SYSCALL_DECL(err); \
+- long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
+- if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
+- { \
+- __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
+- result_var = -1L; \
+- } \
+- result_var; })
+-
+-#undef INTERNAL_SYSCALL_DECL
+-#define INTERNAL_SYSCALL_DECL(err) long err
+-
+-#undef INTERNAL_SYSCALL_ERROR_P
+-#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
+-
+-#undef INTERNAL_SYSCALL_ERRNO
+-#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
+-
+-#undef INTERNAL_SYSCALL
+-#define INTERNAL_SYSCALL(name, err, nr, args...) \
+- internal_syscall##nr (, "li\t$2, %2\t\t\t# " #name "\n\t", \
+- "i" (SYS_ify (name)), err, args)
+-
+-#undef INTERNAL_SYSCALL_NCS
+-#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
+- internal_syscall##nr (= number, , "r" (__v0), err, args)
+-#undef internal_syscall0
+-#define internal_syscall0(ncs_init, cs_init, input, err, dummy...) \
+-({ \
+- long _sys_result; \
+- \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a3 __asm__("$7"); \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- ".set reorder" \
+- : "=r" (__v0), "=r" (__a3) \
+- : input \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef internal_syscall1
+-#define internal_syscall1(ncs_init, cs_init, input, err, arg1) \
+-({ \
+- long _sys_result; \
+- \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a3 __asm__("$7"); \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- ".set reorder" \
+- : "=r" (__v0), "=r" (__a3) \
+- : input, "r" (__a0) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef internal_syscall2
+-#define internal_syscall2(ncs_init, cs_init, input, err, arg1, arg2) \
+-({ \
+- long _sys_result; \
+- \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a1 __asm__("$5") = (long) arg2; \
+- register long __a3 __asm__("$7"); \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "=r" (__a3) \
+- : input, "r" (__a0), "r" (__a1) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef internal_syscall3
+-#define internal_syscall3(ncs_init, cs_init, input, err, arg1, arg2, arg3)\
+-({ \
+- long _sys_result; \
+- \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a1 __asm__("$5") = (long) arg2; \
+- register long __a2 __asm__("$6") = (long) arg3; \
+- register long __a3 __asm__("$7"); \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "=r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef internal_syscall4
+-#define internal_syscall4(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4)\
+-({ \
+- long _sys_result; \
+- \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a1 __asm__("$5") = (long) arg2; \
+- register long __a2 __asm__("$6") = (long) arg3; \
+- register long __a3 __asm__("$7") = (long) arg4; \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-/* We need to use a frame pointer for the functions in which we
+- adjust $sp around the syscall, or debug information and unwind
+- information will be $sp relative and thus wrong during the syscall. As
+- of GCC 3.4.3, this is sufficient. */
+-#define FORCE_FRAME_POINTER alloca (4)
+-
+-#undef internal_syscall5
+-#define internal_syscall5(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5)\
+-({ \
+- long _sys_result; \
+- \
+- FORCE_FRAME_POINTER; \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a1 __asm__("$5") = (long) arg2; \
+- register long __a2 __asm__("$6") = (long) arg3; \
+- register long __a3 __asm__("$7") = (long) arg4; \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- "subu\t$29, 32\n\t" \
+- "sw\t%6, 16($29)\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- "addiu\t$29, 32\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
+- "r" ((long)arg5) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef internal_syscall6
+-#define internal_syscall6(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5, arg6)\
+-({ \
+- long _sys_result; \
+- \
+- FORCE_FRAME_POINTER; \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a1 __asm__("$5") = (long) arg2; \
+- register long __a2 __asm__("$6") = (long) arg3; \
+- register long __a3 __asm__("$7") = (long) arg4; \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- "subu\t$29, 32\n\t" \
+- "sw\t%6, 16($29)\n\t" \
+- "sw\t%7, 20($29)\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- "addiu\t$29, 32\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
+- "r" ((long)arg5), "r" ((long)arg6) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef internal_syscall7
+-#define internal_syscall7(ncs_init, cs_init, input, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
+-({ \
+- long _sys_result; \
+- \
+- FORCE_FRAME_POINTER; \
+- { \
+- register long __v0 __asm__("$2") ncs_init; \
+- register long __a0 __asm__("$4") = (long) arg1; \
+- register long __a1 __asm__("$5") = (long) arg2; \
+- register long __a2 __asm__("$6") = (long) arg3; \
+- register long __a3 __asm__("$7") = (long) arg4; \
+- __asm__ __volatile__ ( \
+- ".set\tnoreorder\n\t" \
+- "subu\t$29, 32\n\t" \
+- "sw\t%6, 16($29)\n\t" \
+- "sw\t%7, 20($29)\n\t" \
+- "sw\t%8, 24($29)\n\t" \
+- cs_init \
+- "syscall\n\t" \
+- "addiu\t$29, 32\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
+- "r" ((long)arg5), "r" ((long)arg6), "r" ((long)arg7) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
+-})
+-
+-#undef __SYSCALL_CLOBBERS
+-#define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \
+- "$14", "$15", "$24", "$25", "memory"
+-
+ /* Pointer mangling is not yet supported for MIPS. */
+ #define PTR_MANGLE(var) (void) (var)
+ #define PTR_DEMANGLE(var) (void) (var)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/_test_and_set.c uClibc-git/libc/sysdeps/linux/mips/_test_and_set.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/_test_and_set.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/_test_and_set.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the real-function versions of all inline functions
+ defined in sys/tas.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/ucontext_i.sym uClibc-git/libc/sysdeps/linux/mips/ucontext_i.sym
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/ucontext_i.sym 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/mips/ucontext_i.sym 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,52 @@
++#include <inttypes.h>
++#include <signal.h>
++#include <stddef.h>
++#include <sys/ucontext.h>
++
++#include <kernel_rt_sigframe.h>
++
++-- Constants used by the rt_sigprocmask call.
++
++SIG_BLOCK
++SIG_SETMASK
++
++_NSIG8 (_NSIG / 8)
++
++-- Offsets of the fields in the kernel rt_sigframe_t structure.
++#define rt_sigframe(member) offsetof (kernel_rt_sigframe_t, member)
++
++RT_SIGFRAME_UCONTEXT rt_sigframe (rs_uc)
++
++RT_SIGFRAME_SIZE sizeof (kernel_rt_sigframe_t)
++
++-- Offsets of the fields in the ucontext_t structure.
++#define ucontext(member) offsetof (ucontext_t, member)
++#define stack(member) ucontext (uc_stack.member)
++#define mcontext(member) ucontext (uc_mcontext.member)
++
++UCONTEXT_FLAGS ucontext (uc_flags)
++UCONTEXT_LINK ucontext (uc_link)
++UCONTEXT_STACK ucontext (uc_stack)
++UCONTEXT_MCONTEXT ucontext (uc_mcontext)
++UCONTEXT_SIGMASK ucontext (uc_sigmask)
++
++STACK_SP stack (ss_sp)
++STACK_SIZE stack (ss_size)
++STACK_FLAGS stack (ss_flags)
++
++MCONTEXT_GREGS mcontext (gregs)
++MCONTEXT_FPREGS mcontext (fpregs)
++MCONTEXT_MDHI mcontext (mdhi)
++MCONTEXT_HI1 mcontext (hi1)
++MCONTEXT_HI2 mcontext (hi2)
++MCONTEXT_HI3 mcontext (hi3)
++MCONTEXT_MDLO mcontext (mdlo)
++MCONTEXT_LO1 mcontext (lo1)
++MCONTEXT_LO2 mcontext (lo2)
++MCONTEXT_LO3 mcontext (lo3)
++MCONTEXT_PC mcontext (pc)
++MCONTEXT_FPC_CSR mcontext (fpc_csr)
++MCONTEXT_USED_MATH mcontext (used_math)
++MCONTEXT_DSP mcontext (dsp)
++
++UCONTEXT_SIZE sizeof (ucontext_t)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/mips/vfork.S uClibc-git/libc/sysdeps/linux/mips/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/mips/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/mips/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,12 +12,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* vfork() is just a special case of clone(). */
+
++#include <sys/syscall.h>
+ #include <sys/asm.h>
+ #include <sysdep.h>
+
+@@ -34,6 +34,7 @@
+ /* int vfork() */
+
+ .text
++ .hidden __vfork
+ LOCALSZ= 1
+ FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
+ GPOFF= FRAMESZ-(1*SZREG)
+@@ -84,6 +85,7 @@
+
+ /* Something bad happened -- no child created. */
+ L(error):
++ move a0, v0
+ #ifdef __PIC__
+ PTR_LA t9, __syscall_error
+ RESTORE_GP64
+@@ -95,6 +97,6 @@
+ END(__vfork)
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/fcntl.h uClibc-git/libc/sysdeps/linux/nios/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/mathdef.h uClibc-git/libc/sysdeps/linux/nios/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/setjmp.h uClibc-git/libc/sysdeps/linux/nios/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. Nios version. */
+ #ifndef _BITS_SETJMP_H
+@@ -24,8 +23,6 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+-
+ #include <signal.h>
+
+ typedef struct
+@@ -44,33 +41,4 @@
+
+ } __jmp_buf[1];
+
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)->__sp)
+-
+-#else /* _ASM */
+-
+-#define jmpbuf_l0 0x00
+-#define jmpbuf_l1 0x01
+-#define jmpbuf_l2 0x02
+-#define jmpbuf_l3 0x03
+-#define jmpbuf_l4 0x04
+-#define jmpbuf_l5 0x05
+-#define jmpbuf_l6 0x06
+-#define jmpbuf_l7 0x07
+-
+-#define jmpbuf_i0 0x08
+-#define jmpbuf_i1 0x09
+-#define jmpbuf_i2 0x0a
+-#define jmpbuf_i3 0x0b
+-#define jmpbuf_i4 0x0c
+-#define jmpbuf_i5 0x0d
+-
+-#define jmpbuf_sp 0x0e
+-#define jmpbuf_jmpret 0x0f
+-#define jmpbuf_callersret 0x10
+-
+-#endif /* _ASM */
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/nios/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/nios/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/stat.h uClibc-git/libc/sysdeps/linux/nios/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/wordsize.h uClibc-git/libc/sysdeps/linux/nios/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/brk.c uClibc-git/libc/sysdeps/linux/nios/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/clone.S uClibc-git/libc/sysdeps/linux/nios/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/crt1.S uClibc-git/libc/sysdeps/linux/nios/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+-Cambridge, MA 02139, USA. */
++not, see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <asm/unistd.h>
+@@ -29,9 +28,6 @@
+ .weak _fini
+ .type main,@function
+ .type __uClibc_main,@function
+- .type __h_errno_location, @function
+- .type _stdio_init, @function
+- .type _stdio_term, @function
+
+ .text
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/fpu_control.h uClibc-git/libc/sysdeps/linux/nios/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/nios/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/nios/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,25 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#define jmpbuf_l0 0x00
++#define jmpbuf_l1 0x01
++#define jmpbuf_l2 0x02
++#define jmpbuf_l3 0x03
++#define jmpbuf_l4 0x04
++#define jmpbuf_l5 0x05
++#define jmpbuf_l6 0x06
++#define jmpbuf_l7 0x07
++
++#define jmpbuf_i0 0x08
++#define jmpbuf_i1 0x09
++#define jmpbuf_i2 0x0a
++#define jmpbuf_i3 0x0b
++#define jmpbuf_i4 0x0c
++#define jmpbuf_i5 0x0d
++
++#define jmpbuf_sp 0x0e
++#define jmpbuf_jmpret 0x0f
++#define jmpbuf_callersret 0x10
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/nios/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/nios/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->__sp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/__longjmp.S uClibc-git/libc/sysdeps/linux/nios/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,9 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
+-
+-#include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++ see <http://www.gnu.org/licenses/>. */
+
++#include <jmpbuf-offsets.h>
+
+ ;----------------------------------------
+ ; Name: __longjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/Makefile.arch uClibc-git/libc/sysdeps/linux/nios/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c crtbegin.c crtend.c
++CSRC-y := brk.c crtbegin.c crtend.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S bsd-_setjmp.S bsd-setjmp.S setjmp.S \
+ clone.S vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/setjmp.S uClibc-git/libc/sysdeps/linux/nios/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,13 +13,9 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+ #include "NM_Macros.S"
+
+ ;----------------------------------------
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/sys/procfs.h uClibc-git/libc/sysdeps/linux/nios/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/sys/ucontext.h uClibc-git/libc/sysdeps/linux/nios/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios/vfork.S uClibc-git/libc/sysdeps/linux/nios/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -10,9 +10,6 @@
+ * Written by Wentao Xu <wentao@microtronix.com>
+ */
+
+-#include <features.h>
+-
+-#include <bits/errno.h>
+ #include <sys/syscall.h>
+ #include "NM_Macros.S"
+
+@@ -51,4 +48,4 @@
+
+ .size __vfork,.-__vfork
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/fcntl.h uClibc-git/libc/sysdeps/linux/nios2/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/nios2/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -31,6 +31,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef unsigned short __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ typedef struct {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/mathdef.h uClibc-git/libc/sysdeps/linux/nios2/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/setjmp.h uClibc-git/libc/sysdeps/linux/nios2/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+@@ -24,7 +23,6 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ typedef struct
+ {
+ /* Callee-saved registers r16 through r23. */
+@@ -43,30 +41,9 @@
+ unsigned long __gp;
+
+ /* floating point regs, if any */
+-#if defined __HAVE_FPU__
++#ifdef __UCLIBC_HAS_FPU__
+ unsigned long __fpregs[64];
+ #endif
+ } __jmp_buf[1];
+
+-#endif
+-
+-#define JB_REGS 0
+-#define JB_PC 32
+-#define JB_SP 36
+-#define JB_FP 40
+-#define JB_GP 44
+-#define JB_FPREGS 48
+-
+-#if defined __HAVE_FPU__
+-# define JB_SIZE 304
+-#else
+-# define JB_SIZE 48
+-#endif
+-
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void*)(jmpbuf)->__sp)
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/nios2/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/nios2/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/stat.h uClibc-git/libc/sysdeps/linux/nios2/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/nios2/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/uClibc_page.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,29 +0,0 @@
+-/* Copyright (C) 2004 Erik Andersen
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * The GNU C Library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
+- */
+-
+-/* Supply an architecture specific value for PAGE_SIZE and friends. */
+-
+-#ifndef _UCLIBC_PAGE_H
+-#define _UCLIBC_PAGE_H
+-
+-/* PAGE_SHIFT determines the page size -- in this case 4096 */
+-#define PAGE_SHIFT (12)
+-#define PAGE_SIZE (1UL << PAGE_SHIFT)
+-#define PAGE_MASK (~(PAGE_SIZE-1))
+-
+-#endif /* _UCLIBC_PAGE_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/wordsize.h uClibc-git/libc/sysdeps/linux/nios2/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/brk.c uClibc-git/libc/sysdeps/linux/nios2/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/nios2/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ *
+ */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <features.h>
++#include <jmpbuf-offsets.h>
+
+ .globl _setjmp
+ .type _setjmp,@function
+@@ -34,7 +33,7 @@
+ stw fp, JB_FP(r4)
+ stw gp, JB_GP(r4)
+
+-#if defined(__HAVE_FPU__)
++#ifdef __UCLIBC_HAS_FPU__
+ SAVE_FPU r4 JB_FPREGS
+ #endif
+ stw r0, JB_SIZE(r4) /* signal mask is not saved */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/nios2/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ */
+
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <features.h>
++#include <jmpbuf-offsets.h>
+
+ .globl setjmp
+ .type setjmp,@function
+@@ -35,7 +34,7 @@
+ stw fp, JB_FP(r4)
+ stw gp, JB_GP(r4)
+
+-#if defined(__HAVE_FPU__)
++#ifdef __UCLIBC_HAS_FPU__
+ SAVE_FPU r4 JB_FPREGS
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/crt1.S uClibc-git/libc/sysdeps/linux/nios2/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -25,9 +25,6 @@
+ #endif
+ .type main,@function
+ .type __uClibc_main,@function
+- .type __h_errno_location, @function
+- .type _stdio_init, @function
+- .type _stdio_term, @function
+ .text
+ .balign 4
+ _start:
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/fpu_control.h uClibc-git/libc/sysdeps/linux/nios2/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/nios2/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/nios2/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,20 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <features.h>
++
++#define JB_REGS 0
++#define JB_PC 32
++#define JB_SP 36
++#define JB_FP 40
++#define JB_GP 44
++#define JB_FPREGS 48
++
++#ifdef __UCLIBC_HAS_FPU__
++# define JB_SIZE 304
++#else
++# define JB_SIZE 48
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/nios2/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/nios2/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)->__sp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/__longjmp.S uClibc-git/libc/sysdeps/linux/nios2/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,7 @@
+ */
+
+ #include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ .globl __longjmp
+ .type __longjmp,@function
+@@ -39,7 +37,7 @@
+ ldw gp, JB_GP(r4)
+ ldw sp, JB_SP(r4)
+
+-#if defined(__HAVE_FPU__)
++#ifdef __UCLIBC_HAS_FPU__
+ RESTORE_FPU r4 JB_FPREGS
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/Makefile.arch uClibc-git/libc/sysdeps/linux/nios2/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,8 +5,8 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c syscall.c
++CSRC-y := brk.c syscall.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S bsd-_setjmp.S bsd-setjmp.S setjmp.S \
+ vfork.S clone.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/setjmp.S uClibc-git/libc/sysdeps/linux/nios2/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,7 @@
+ */
+
+ #include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ .globl __sigsetjmp
+ .type __sigsetjmp,@function
+@@ -35,7 +33,7 @@
+ stw fp, JB_FP(r4)
+ stw gp, JB_GP(r4)
+
+-#if defined(__HAVE_FPU__)
++#ifdef __UCLIBC_HAS_FPU__
+ SAVE_FPU r4 JB_FPREGS
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/sys/procfs.h uClibc-git/libc/sysdeps/linux/nios2/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/sys/ucontext.h uClibc-git/libc/sysdeps/linux/nios2/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/syscall.c uClibc-git/libc/sysdeps/linux/nios2/syscall.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/syscall.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/syscall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/nios2/vfork.S uClibc-git/libc/sysdeps/linux/nios2/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/nios2/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/nios2/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -10,11 +10,7 @@
+ * Written by Wentao Xu <wentao@microtronix.com>
+ */
+
+-#include <features.h>
+-
+-#define _ERRNO_H
+-#include <bits/errno.h>
+-#include <asm/unistd.h>
++#include <sys/syscall.h>
+
+ #ifndef __NR_vfork
+ #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
+@@ -53,4 +49,4 @@
+
+ .size __vfork,.-__vfork
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/atomic.h uClibc-git/libc/sysdeps/linux/powerpc/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <bits/wordsize.h>
+
+@@ -37,9 +36,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The 32-bit exchange_bool is different on powerpc64 because the subf
+ does signed 64-bit arthmatic while the lwarx is 32-bit unsigned
+@@ -260,9 +258,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * The 32-bit exchange_bool is different on powerpc64 because the subf
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/endian.h uClibc-git/libc/sysdeps/linux/powerpc/bits/endian.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/endian.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/endian.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* PowerPC can be little or big endian. Hopefully gcc will know... */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/fcntl.h uClibc-git/libc/sysdeps/linux/powerpc/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/fenv.h uClibc-git/libc/sysdeps/linux/powerpc/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/fenvinline.h uClibc-git/libc/sysdeps/linux/powerpc/bits/fenvinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/fenvinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/fenvinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/ipc.h uClibc-git/libc/sysdeps/linux/powerpc/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/powerpc/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -36,6 +36,8 @@
+ typedef unsigned int __kernel_old_uid_t;
+ typedef unsigned int __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ #else
+ typedef unsigned int __kernel_dev_t;
+ typedef unsigned int __kernel_ino_t;
+@@ -61,6 +63,8 @@
+ typedef unsigned int __kernel_old_uid_t;
+ typedef unsigned int __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/local_lim.h uClibc-git/libc/sysdeps/linux/powerpc/bits/local_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/local_lim.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/local_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,101 @@
++/* Minimum guaranteed maximum values for system limits. Linux/PPC version.
++ Copyright (C) 1993-1998,2000,2002-2004,2006,2008
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public License as
++ published by the Free Software Foundation; either version 2.1 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
++
++/* The kernel header pollutes the namespace with the NR_OPEN symbol
++ and defines LINK_MAX although filesystems have different maxima. A
++ similar thing is true for OPEN_MAX: the limit can be changed at
++ runtime and therefore the macro must not be defined. Remove this
++ after including the header if necessary. */
++#ifndef NR_OPEN
++# define __undef_NR_OPEN
++#endif
++#ifndef LINK_MAX
++# define __undef_LINK_MAX
++#endif
++#ifndef OPEN_MAX
++# define __undef_OPEN_MAX
++#endif
++#ifndef ARG_MAX
++# define __undef_ARG_MAX
++#endif
++
++/* The kernel sources contain a file with all the needed information. */
++#include <linux/limits.h>
++
++/* Have to remove NR_OPEN? */
++#ifdef __undef_NR_OPEN
++# undef NR_OPEN
++# undef __undef_NR_OPEN
++#endif
++/* Have to remove LINK_MAX? */
++#ifdef __undef_LINK_MAX
++# undef LINK_MAX
++# undef __undef_LINK_MAX
++#endif
++/* Have to remove OPEN_MAX? */
++#ifdef __undef_OPEN_MAX
++# undef OPEN_MAX
++# undef __undef_OPEN_MAX
++#endif
++/* Have to remove ARG_MAX? */
++#ifdef __undef_ARG_MAX
++# undef ARG_MAX
++# undef __undef_ARG_MAX
++#endif
++
++/* The number of data keys per process. */
++#define _POSIX_THREAD_KEYS_MAX 128
++/* This is the value this implementation supports. */
++#define PTHREAD_KEYS_MAX 1024
++
++/* Controlling the iterations of destructors for thread-specific data. */
++#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
++/* Number of iterations this implementation does. */
++#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
++
++/* The number of threads per process. */
++#define _POSIX_THREAD_THREADS_MAX 64
++/* We have no predefined limit on the number of threads. */
++#undef PTHREAD_THREADS_MAX
++
++/* Maximum amount by which a process can descrease its asynchronous I/O
++ priority level. */
++#define AIO_PRIO_DELTA_MAX 20
++
++/* Minimum size for a thread. At least two pages for systems with 64k
++ pages. */
++#define PTHREAD_STACK_MIN 131072
++
++/* Maximum number of timer expiration overruns. */
++#define DELAYTIMER_MAX 2147483647
++
++/* Maximum tty name length. */
++#define TTY_NAME_MAX 32
++
++/* Maximum login name length. This is arbitrary. */
++#define LOGIN_NAME_MAX 256
++
++/* Maximum host name length. */
++#define HOST_NAME_MAX 64
++
++/* Maximum message queue priority level. */
++#define MQ_PRIO_MAX 32768
++
++/* Maximum value the semaphore can have. */
++#define SEM_VALUE_MAX (2147483647)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/mathdef.h uClibc-git/libc/sysdeps/linux/powerpc/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/mathinline.h uClibc-git/libc/sysdeps/linux/powerpc/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/mman.h uClibc-git/libc/sysdeps/linux/powerpc/bits/mman.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; iclude <sys/mman.h> instead."
+@@ -63,7 +62,7 @@
+ # define MAP_NORESERVE 0x00040 /* Don't check for reservations. */
+ # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
+ # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+-# define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/msq.h uClibc-git/libc/sysdeps/linux/powerpc/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/sem.h uClibc-git/libc/sysdeps/linux/powerpc/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/setjmp.h uClibc-git/libc/sysdeps/linux/powerpc/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
++/* Copyright (C) 1997,1998,2000,2003,2004,2005,2006
++ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. PowerPC version. */
+ #ifndef _BITS_SETJMP_H
+@@ -31,30 +31,6 @@
+
+ #include <bits/wordsize.h>
+
+-#if defined __USE_MISC || defined _ASM
+-# define JB_GPR1 0 /* Also known as the stack pointer */
+-# define JB_GPR2 1
+-# define JB_LR 2 /* The address we will return to */
+-# if __WORDSIZE == 64
+-# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18*2 words total. */
+-# define JB_CR 21 /* Condition code registers with the VRSAVE at */
+- /* offset 172 (low half of the double word. */
+-# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */
+-# define JB_SIZE (64 * 8) /* As per PPC64-VMX ABI. */
+-# define JB_VRSAVE 21 /* VRSAVE shares a double word with the CR at offset */
+- /* 168 (high half of the double word). */
+-# define JB_VRS 40 /* VRs 20 through 31 are saved, 12*4 words total. */
+-# else
+-# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total. */
+-# define JB_CR 21 /* Condition code registers. */
+-# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */
+-# define JB_SIZE ((64 + (12 * 4)) * 4)
+-# define JB_VRSAVE 62
+-# define JB_VRS 64
+-# endif
+-#endif
+-
+-
+ /* The current powerpc 32-bit Altivec ABI specifies for SVR4 ABI and EABI
+ the vrsave must be at byte 248 & v20 at byte 256. So we must pad this
+ correctly on 32 bit. It also insists that vecregs are only gauranteed
+@@ -62,19 +38,12 @@
+ We have to version the code because members like int __mask_was_saved
+ in the jmp_buf will move as jmp_buf is now larger than 248 bytes. We
+ cannot keep the altivec jmp_buf backward compatible with the jmp_buf. */
+-#ifndef _ASM
+-# if __WORDSIZE == 64
++#if __WORDSIZE == 64
+ typedef long int __jmp_buf[64] __attribute__ ((__aligned__ (16)));
+-# else
++#else
+ /* The alignment is not essential, i.e.the buffer can be copied to a 4 byte
+ aligned buffer as per the ABI it is just added for performance reasons. */
+ typedef long int __jmp_buf[64 + (12 * 4)] __attribute__ ((__aligned__ (16)));
+-# endif
+ #endif
+
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[JB_GPR1])
+-
+-#endif /* bits/setjmp.h */
++#endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/shm.h uClibc-git/libc/sysdeps/linux/powerpc/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/powerpc/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <signal.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/powerpc/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/stat.h uClibc-git/libc/sysdeps/linux/powerpc/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/syscalls.h uClibc-git/libc/sysdeps/linux/powerpc/bits/syscalls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/syscalls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/syscalls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SYSCALLS_H
+ #define _BITS_SYSCALLS_H
+@@ -168,7 +167,7 @@
+ }) \
+ )
+ # define INTERNAL_SYSCALL_ERROR_P(val, err) \
+- ((void) (val), __builtin_expect ((err) & (1 << 28), 0))
++ ((void) (val), unlikely ((err) & (1 << 28)))
+
+ # define INTERNAL_SYSCALL_ERRNO(val, err) (val)
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/termios.h uClibc-git/libc/sysdeps/linux/powerpc/bits/termios.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TERMIOS_H
+ # error "Never include <bits/termios.h> directly; use <termios.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#define __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/brk.S uClibc-git/libc/sysdeps/linux/powerpc/brk.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/brk.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/brk.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include "ppc_asm.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/powerpc/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/powerpc/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/clone.S uClibc-git/libc/sysdeps/linux/powerpc/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/crt1.S uClibc-git/libc/sysdeps/linux/powerpc/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,8 @@
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+- * along with this program; if not, write to the Free Software Foundation,
+- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * along with this program; see the file COPYING.LIB. If not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/fenv.h uClibc-git/libc/sysdeps/linux/powerpc/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * ISO C99 7.6: Floating-point environment <fenv.h>
+@@ -73,7 +72,7 @@
+
+ /* Set complete status for exceptions indicated by EXCEPTS according to
+ the representation in the object pointed to by FLAGP. */
+-extern int fesetexceptflag (__const fexcept_t *__flagp, int __excepts) __THROW;
++extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
+
+ /* Determine which of subset of the exceptions specified by EXCEPTS are
+ currently set. */
+@@ -102,12 +101,12 @@
+
+ /* Establish the floating-point environment represented by the object
+ pointed to by ENVP. */
+-extern int fesetenv (__const fenv_t *__envp) __THROW;
++extern int fesetenv (const fenv_t *__envp) __THROW;
+
+ /* Save current exceptions in temporary storage, install environment
+ represented by object pointed to by ENVP and raise exceptions
+ according to saved exceptions. */
+-extern int feupdateenv (__const fenv_t *__envp) __THROW;
++extern int feupdateenv (const fenv_t *__envp) __THROW;
+
+
+ /* Include optimization. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/fpu_control.h uClibc-git/libc/sysdeps/linux/powerpc/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/ioctl.c uClibc-git/libc/sysdeps/linux/powerpc/ioctl.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/ioctl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/ioctl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdarg.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/powerpc/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/powerpc/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Private macros for accessing __jmp_buf contents. PowerPC version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <bits/wordsize.h>
++
++#define JB_GPR1 0 /* Also known as the stack pointer */
++#define JB_GPR2 1
++#define JB_LR 2 /* The address we will return to */
++#if __WORDSIZE == 64
++# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18*2 words total. */
++# define JB_CR 21 /* Condition code registers with the VRSAVE at */
++ /* offset 172 (low half of the double word. */
++# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */
++# define JB_SIZE (64 * 8) /* As per PPC64-VMX ABI. */
++# define JB_VRSAVE 21 /* VRSAVE shares a double word with the CR at offset */
++ /* 168 (high half of the double word). */
++# define JB_VRS 40 /* VRs 20 through 31 are saved, 12*4 words total. */
++#else
++# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total. */
++# define JB_CR 21 /* Condition code registers. */
++# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */
++# define JB_SIZE ((64 + (12 * 4)) * 4)
++# define JB_VRSAVE 62
++# define JB_VRS 64
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/powerpc/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/powerpc/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_GPR1])
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_GPR1] - (_adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/__longjmp.S uClibc-git/libc/sysdeps/linux/powerpc/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,15 +15,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include "ppc_asm.h"
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+
+ #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/Makefile.arch uClibc-git/libc/sysdeps/linux/powerpc/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,18 +5,13 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __syscall_error.c pread_write.c ioctl.c
++CSRC-y := __syscall_error.c ioctl.c
+
+-ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
+-CSRC += posix_fadvise.c posix_fadvise64.c
+-endif
+-
+-SSRC := \
++SSRC-y := \
+ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \
+ __uClibc_syscall.S syscall.S
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-SSRC += clone.S vfork.S
+-endif
++
++SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += clone.S vfork.S
+
+ ifeq ($(CONFIG_E500),y)
+ ARCH_HEADERS := fenv.h
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/posix_fadvise64.c uClibc-git/libc/sysdeps/linux/powerpc/posix_fadvise64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/posix_fadvise64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/posix_fadvise64.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,69 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * posix_fadvise64() for uClibc
+- * http://www.opengroup.org/onlinepubs/009695399/functions/posix_fadvise.html
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <fcntl.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-#ifdef __NR_fadvise64_64
+-
+-/* 64 bit implementation is cake ... or more like pie ... */
+-#if __WORDSIZE == 64
+-
+-#define __NR_posix_fadvise64 __NR_fadvise64_64
+-
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advise)
+-{
+- if (len != (off_t) len)
+- return EOVERFLOW;
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (posix_fadvise64, err, 6, fd, 0,
+- __LONG_LONG_PAIR ((long) (offset >> 32), (long) offset),
+- (off_t) len, advise);
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+-}
+-
+-/* 32 bit implementation is kind of a pita */
+-#elif __WORDSIZE == 32
+-
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advise)
+-{
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, advise,
+- __LONG_LONG_PAIR((long) (offset >> 32), (long) offset ),
+- __LONG_LONG_PAIR((long) (len >> 32), (long) len));
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+-}
+-
+-#else
+-#error your machine is neither 32 bit or 64 bit ... it must be magical
+-#endif
+-
+-#elif !defined __NR_fadvise64
+-/* This is declared as a strong alias in posix_fadvise.c if __NR_fadvise64
+- * is defined.
+- */
+-int posix_fadvise64(int fd, __off64_t offset, __off64_t len, int advise)
+-{
+-#warning This is not correct as far as SUSv3 is concerned.
+- return ENOSYS;
+-}
+-#endif /* __NR_fadvise64_64 */
+-#endif /* __UCLIBC_HAS_LFS__ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/posix_fadvise.c uClibc-git/libc/sysdeps/linux/powerpc/posix_fadvise.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/posix_fadvise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/posix_fadvise.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,36 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * posix_fadvise() for uClibc
+- * http://www.opengroup.org/onlinepubs/009695399/functions/posix_fadvise.html
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <sys/syscall.h>
+-#include <fcntl.h>
+-
+-#ifdef __NR_fadvise64
+-#define __NR_posix_fadvise __NR_fadvise64
+-int posix_fadvise(int fd, off_t offset, off_t len, int advice)
+-{
+- INTERNAL_SYSCALL_DECL(err);
+- int ret = (int) (INTERNAL_SYSCALL(posix_fadvise, err, 6, fd, 0,
+- __LONG_LONG_PAIR (offset >> 31, offset), len, advice));
+- if (INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+- return 0;
+-}
+-
+-#if defined __UCLIBC_HAS_LFS__ && (!defined __NR_fadvise64_64 || !defined _syscall6)
+-strong_alias(posix_fadvise,posix_fadvise64)
+-#endif
+-
+-#else
+-int posix_fadvise(int fd attribute_unused, off_t offset attribute_unused, off_t len attribute_unused, int advice attribute_unused)
+-{
+-#warning This is not correct as far as SUSv3 is concerned.
+- return ENOSYS;
+-}
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/powerpc32/sysdep.h uClibc-git/libc/sysdeps/linux/powerpc/powerpc32/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/powerpc32/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/powerpc32/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+- 02110-1301 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef __ASSEMBLER__
+
+@@ -133,6 +132,7 @@
+
+ #define PSEUDO_RET_ERRVAL \
+ blr
++#undef ret_ERRVAL
+ #define ret_ERRVAL PSEUDO_RET_ERRVAL
+
+ #undef PSEUDO_END_ERRVAL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/powerpc64/sysdep.h uClibc-git/libc/sysdeps/linux/powerpc/powerpc64/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/powerpc64/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/powerpc64/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+- 02110-1301 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef __ELF__
+
+@@ -228,6 +227,7 @@
+ #define PSEUDO_RET_ERRVAL \
+ blr
+
++#undef ret_ERRVAL
+ #define ret_ERRVAL PSEUDO_RET_ERRVAL
+
+ #undef PSEUDO_END_ERRVAL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/ppc_asm.h uClibc-git/libc/sysdeps/linux/powerpc/ppc_asm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/ppc_asm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/ppc_asm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef __ASSEMBLER__
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/pread_write.c uClibc-git/libc/sysdeps/linux/powerpc/pread_write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/pread_write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/pread_write.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,183 +0,0 @@
+-/* vi: set sw=4 ts=4:
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-/* Based in part on the files
+- * ./sysdeps/unix/sysv/linux/pwrite.c,
+- * ./sysdeps/unix/sysv/linux/pread.c,
+- * sysdeps/posix/pread.c
+- * sysdeps/posix/pwrite.c
+- * from GNU libc 2.2.5, but reworked considerably...
+- */
+-
+-#include <sys/syscall.h>
+-#include <unistd.h>
+-#include <endian.h>
+-
+-#ifndef __UCLIBC_HAS_LFS__
+-# define off64_t off_t
+-#endif
+-
+-#ifdef __NR_pread
+-extern __typeof(pread) __libc_pread;
+-# define __NR___syscall_pread __NR_pread
+-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd,
+- void *, buf, size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return(__syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset)));
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pread64) __libc_pread64;
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- return(__syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 32, offset)));
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* __NR_pread */
+-
+-
+-#ifdef __NR_pwrite
+-extern __typeof(pwrite) __libc_pwrite;
+-# define __NR___syscall_pwrite __NR_pwrite
+-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd,
+- const void *, buf, size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- return(__syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset)));
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pwrite64) __libc_pwrite64;
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- return(__syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 32, offset)));
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* __NR_pwrite */
+-
+-
+-
+-#if ! defined __NR_pread || ! defined __NR_pwrite
+-
+-static ssize_t __fake_pread_write(int fd, void *buf,
+- size_t count, off_t offset, int do_pwrite)
+-{
+- int save_errno;
+- ssize_t result;
+- off_t old_offset;
+-
+- /* Since we must not change the file pointer preserve the
+- * value so that we can restore it later. */
+- if ((old_offset=lseek(fd, 0, SEEK_CUR)) == (off_t) -1)
+- return -1;
+-
+- /* Set to wanted position. */
+- if (lseek (fd, offset, SEEK_SET) == (off_t) -1)
+- return -1;
+-
+- if (do_pwrite == 1) {
+- /* Write the data. */
+- result = write(fd, buf, count);
+- } else {
+- /* Read the data. */
+- result = read(fd, buf, count);
+- }
+-
+- /* Now we have to restore the position. If this fails we
+- * have to return this as an error. */
+- save_errno = errno;
+- if (lseek(fd, old_offset, SEEK_SET) == (off_t) -1)
+- {
+- if (result == -1)
+- __set_errno(save_errno);
+- return -1;
+- }
+- __set_errno(save_errno);
+- return(result);
+-}
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-
+-static ssize_t __fake_pread_write64(int fd, void *buf,
+- size_t count, off64_t offset, int do_pwrite)
+-{
+- int save_errno;
+- ssize_t result;
+- off64_t old_offset;
+-
+- /* Since we must not change the file pointer preserve the
+- * value so that we can restore it later. */
+- if ((old_offset=lseek64(fd, 0, SEEK_CUR)) == (off64_t) -1)
+- return -1;
+-
+- /* Set to wanted position. */
+- if (lseek64(fd, offset, SEEK_SET) == (off64_t) -1)
+- return -1;
+-
+- if (do_pwrite == 1) {
+- /* Write the data. */
+- result = write(fd, buf, count);
+- } else {
+- /* Read the data. */
+- result = read(fd, buf, count);
+- }
+-
+- /* Now we have to restore the position. */
+- save_errno = errno;
+- if (lseek64 (fd, old_offset, SEEK_SET) == (off64_t) -1) {
+- if (result == -1)
+- __set_errno (save_errno);
+- return -1;
+- }
+- __set_errno (save_errno);
+- return result;
+-}
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! defined __NR_pread || ! defined __NR_pwrite */
+-
+-#ifndef __NR_pread
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset);
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return(__fake_pread_write(fd, buf, count, offset, 0));
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset);
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- return(__fake_pread_write64(fd, buf, count, offset, 0));
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! __NR_pread */
+-
+-
+-#ifndef __NR_pwrite
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset);
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- return(__fake_pread_write(fd, (void*)buf, count, offset, 1));
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset);
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- return(__fake_pread_write64(fd, (void*)buf, count, offset, 1));
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! __NR_pwrite */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/setjmp.S uClibc-git/libc/sysdeps/linux/powerpc/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -15,15 +15,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include "ppc_asm.h"
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
+ #define FP(x...) x
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/procfs.h uClibc-git/libc/sysdeps/linux/powerpc/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/ptrace.h uClibc-git/libc/sysdeps/linux/powerpc/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/ucontext.h uClibc-git/libc/sysdeps/linux/powerpc/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/user.h uClibc-git/libc/sysdeps/linux/powerpc/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/syscall.S uClibc-git/libc/sysdeps/linux/powerpc/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+@@ -30,6 +29,7 @@
+ mr 5,6
+ mr 6,7
+ mr 7,8
++ mr 8,9
+ sc
+ bnslr;
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sysdep.h uClibc-git/libc/sysdeps/linux/powerpc/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <common/sysdep.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/vfork.S uClibc-git/libc/sysdeps/linux/powerpc/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/powerpc/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -27,4 +27,4 @@
+ .size __vfork,.-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/README uClibc-git/libc/sysdeps/linux/README
+--- uClibc-0.9.33.2/libc/sysdeps/linux/README 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/README 2014-02-03 12:32:56.000000000 +0100
+@@ -4,4 +4,7 @@
+ to add that support.
+
+ All stuff that is not at all dependent on a particular Linux architecture
+-goes in the 'common' directory.
++goes in the 'common' directory. However, for new architectures which are
++using the generic syscalls in the Linux Kernel, the 'common-generic'
++directory should be used instead as they all use identical interfaces for
++the system calls.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/atomic.h uClibc-git/libc/sysdeps/linux/sh/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdint.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/fcntl.h uClibc-git/libc/sysdeps/linux/sh/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/fenv.h uClibc-git/libc/sysdeps/linux/sh/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/huge_val.h uClibc-git/libc/sysdeps/linux/sh/bits/huge_val.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/huge_val.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/huge_val.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/sh/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ typedef struct {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/mathdef.h uClibc-git/libc/sysdeps/linux/sh/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/setjmp.h uClibc-git/libc/sysdeps/linux/sh/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc.
++/* Copyright (C) 1999,2000,2003,2005,2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,19 +12,17 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. SH version. */
+ #ifndef _BITS_SETJMP_H
+-#define _BITS_SETJMP_H 1
++#define _BITS_SETJMP_H 1
+
+ #if !defined _SETJMP_H && !defined _PTHREAD_H
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ typedef struct
+ {
+ /* Callee-saved registers r8 through r15. */
+@@ -42,15 +40,5 @@
+ /* Callee-saved floating point registers fr12 through fr15. */
+ int __fpregs[4];
+ } __jmp_buf[1];
+-#endif
+-
+-#if defined __USE_MISC || defined _ASM
+-# define JB_SIZE (4 * 15)
+-#endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[0].__regs[7])
+
+-#endif /* bits/setjmp.h */
++#endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/shm.h uClibc-git/libc/sysdeps/linux/sh/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/sh/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT int _a2, int _a3, int _a4, struct sigcontext
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/sh/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/wordsize.h uClibc-git/libc/sysdeps/linux/sh/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/cacheflush.c uClibc-git/libc/sysdeps/linux/sh/cacheflush.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/cacheflush.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/cacheflush.c 2014-02-03 12:32:56.000000000 +0100
+@@ -6,10 +6,9 @@
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+-#include <errno.h>
+-#include <unistd.h>
+ #include <sys/syscall.h>
+
+ #ifdef __NR_cacheflush
+-_syscall3(int, cacheflush, char *, addr, int, nbytes, int, op)
++int cacheflush(void *addr, const int nbytes, int op);
++_syscall3(int, cacheflush, void *, addr, const int, nbytes, const int, op)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/clone.S uClibc-git/libc/sysdeps/linux/sh/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/crt1.S uClibc-git/libc/sysdeps/linux/sh/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ details.
+
+ You should have received a copy of the GNU Library General Public License
+- along with this program; if not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/___fpscr_values.S uClibc-git/libc/sysdeps/linux/sh/___fpscr_values.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/___fpscr_values.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/___fpscr_values.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+ details.
+
+ You should have received a copy of the GNU Library General Public License
+- along with this program; if not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/fpu_control.h uClibc-git/libc/sysdeps/linux/sh/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/sh/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sh/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,19 @@
++/* Private macros for accessing __jmp_buf contents. SH version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#define JB_SIZE (4 * 15)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/sh/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sh/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,22 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[0].__regs[7])
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(jmpbuf, address, adj) \
++ ((uintptr_t) (address) - (adj) < (uintptr_t) (jmpbuf)[0].__regs[7] - (adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/__longjmp.S uClibc-git/libc/sysdeps/linux/sh/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,12 +14,8 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+ #include <features.h>
+
+ /* __longjmp(jmpbuf, val) */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/Makefile.arch uClibc-git/libc/sysdeps/linux/sh/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -6,7 +6,10 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := \
+- mmap.c pipe.c __init_brk.c brk.c sbrk.c pread_write.c cacheflush.c
++CSRC-y := \
++ pipe.c __init_brk.c brk.c sbrk.c pread_write.c
+
+-SSRC := setjmp.S __longjmp.S ___fpscr_values.S vfork.S clone.S
++SSRC-y := setjmp.S __longjmp.S ___fpscr_values.S
++
++CSRC-$(UCLIBC_LINUX_SPECIFIC) += cacheflush.c
++SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += clone.S vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/mmap.c uClibc-git/libc/sysdeps/linux/sh/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,34 +0,0 @@
+-/* Copyright (C) 2001 Hewlett-Packard
+-
+- This program is free software; you can redistribute it and/or modify it under
+- the terms of the GNU Library General Public License as published by the Free
+- Software Foundation; either version 2 of the License, or (at your option) any
+- later version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
+- details.
+-
+- You should have received a copy of the GNU Library General Public License
+- along with this program; if not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+-
+- Derived in part from the Linux-8086 C library, the GNU C Library, and several
+- other sundry sources. Files within this library are copyright by their
+- respective copyright holders.
+-*/
+-
+-#include <unistd.h>
+-#include <errno.h>
+-#include <sys/mman.h>
+-
+-
+-#ifdef HIOS
+-# define __SH_SYSCALL6_TRAPA 0x2E
+-#endif
+-
+-#include <sys/syscall.h>
+-
+-_syscall6(__ptr_t, mmap, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, offset)
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/pread_write.c uClibc-git/libc/sysdeps/linux/sh/pread_write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/pread_write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/pread_write.c 2014-02-03 12:32:56.000000000 +0100
+@@ -4,122 +4,8 @@
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+-/*
+- * Based in part on the files
+- * ./sysdeps/unix/sysv/linux/pwrite.c,
+- * ./sysdeps/unix/sysv/linux/pread.c,
+- * sysdeps/posix/pread.c
+- * sysdeps/posix/pwrite.c
+- * from GNU libc 2.2.5, but reworked considerably...
+- */
+-
+-#include <sys/syscall.h>
+-#include <unistd.h>
+-#include <stdint.h>
+-#include <endian.h>
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+-#include <sysdep-cancel.h>
+-#else
+-#define SINGLE_THREAD_P 1
+-#endif
+-
+-
+-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */
+-# ifdef __NR_pread
+-# error "__NR_pread and __NR_pread64 both defined???"
+-# endif
+-# define __NR_pread __NR_pread64
+-#endif
+-
+-#ifdef __NR_pread
+-extern __typeof(pread) __libc_pread;
+-# define __NR___syscall_pread __NR_pread
+-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf,
+- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- if (SINGLE_THREAD_P)
+- return(__syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset)));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- ssize_t result = __syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset));
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pread64) __libc_pread64;
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+-
+- if (SINGLE_THREAD_P)
+- return __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR (high, low));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- ssize_t result = __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR (high, low));
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* __NR_pread */
+-
+-/**********************************************************************/
+-
+-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */
+-# ifdef __NR_pwrite
+-# error "__NR_pwrite and __NR_pwrite64 both defined???"
+-# endif
+-# define __NR_pwrite __NR_pwrite64
+-#endif
+-
+-#ifdef __NR_pwrite
+-extern __typeof(pwrite) __libc_pwrite;
+-# define __NR___syscall_pwrite __NR_pwrite
+-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
+- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- if (SINGLE_THREAD_P)
+- return __syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset));
+-
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- ssize_t result = __syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset));
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pwrite64) __libc_pwrite64;
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+-
+- if (SINGLE_THREAD_P)
+- return __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR (high, low));
+
+-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- int oldtype = LIBC_CANCEL_ASYNC ();
+- ssize_t result = __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR (high, low));
+- LIBC_CANCEL_RESET (oldtype);
+- return result;
+-#endif
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* __NR_pwrite */
++/* SuperH doesn't have this alignment issue. It just decided to copy
++ * the syscall interface from another arch for no good reason. */
++#define __UCLIBC_SYSCALL_ALIGN_64BIT__
++#include "../common/pread_write.c"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/setjmp.S uClibc-git/libc/sysdeps/linux/sh/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,13 +14,10 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ .text
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/io.h uClibc-git/libc/sysdeps/linux/sh/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+
+@@ -23,17 +22,18 @@
+
+ __BEGIN_DECLS
+
++#if defined __UCLIBC_LINUX_SPECIFIC__
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
+ permission to access any I/O port is granted. This call requires
+ root privileges. */
+ extern int iopl (int __level) __THROW;
++#endif /* __UCLIBC_LINUX_SPECIFIC__ */
+
+ /* The functions that actually perform reads and writes. */
+ extern unsigned char inb (unsigned long int port) __THROW;
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/procfs.h uClibc-git/libc/sysdeps/linux/sh/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/ucontext.h uClibc-git/libc/sysdeps/linux/sh/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Where is System V/SH ABI? */
+
+@@ -32,10 +31,10 @@
+ typedef int greg_t;
+
+ /* Number of general registers. */
+-#define NFPREG 16
++#define NGREG 16
+
+ /* Container for all general registers. */
+-typedef greg_t gregset_t[NFPREG];
++typedef greg_t gregset_t[NGREG];
+
+ #ifdef __USE_GNU
+ /* Number of each register is the `gregset_t' array. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/user.h uClibc-git/libc/sysdeps/linux/sh/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/sysdep.h uClibc-git/libc/sysdeps/linux/sh/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <common/sysdep.h>
+
+ #include <features.h>
+-#include <libc-internal.h>
+
+ #ifdef __ASSEMBLER__
+
+@@ -143,8 +141,6 @@
+ #define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
+-#define ret_ERRVAL ret
+-
+ #ifndef __PIC__
+ # define SYSCALL_ERROR_HANDLER \
+ mov.l 0f,r1; \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh/vfork.S uClibc-git/libc/sysdeps/linux/sh/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,19 +12,16 @@
+ details.
+
+ You should have received a copy of the GNU Library General Public License
+- along with this program; if not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ Derived in part from the Linux-8086 C library, the GNU C Library, and several
+ other sundry sources. Files within this library are copyright by their
+ respective copyright holders.
+ */
+
+-#include <features.h>
+ #include <sys/syscall.h>
+ #define _ERRNO_H
+ #include <bits/errno.h>
+-#include <bits/sysnum.h>
+
+ /* Clone the calling process, but without copying the whole address space.
+ The calling process is suspended until the new process exits or is
+@@ -109,6 +106,6 @@
+
+ .size __vfork, .-__vfork
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+
+ #include "syscall_error.S"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/fcntl.h uClibc-git/libc/sysdeps/linux/sh64/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/sh64/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -43,6 +43,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ typedef struct {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/setjmp.h uClibc-git/libc/sysdeps/linux/sh64/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. SH-5 version. */
+ #ifndef _BITS_SETJMP_H
+@@ -33,8 +32,6 @@
+ #define __SETJMP_TRG(x) (__SETJMP_NUM_INT+__SETJMP_NUM_DBL+(x))
+ #define __SETJMP_LR (__SETJMP_NUM_INT+__SETJMP_NUM_DBL+__SETJMP_NUM_TRG)
+
+-
+-#ifndef _ASM
+ typedef struct
+ {
+ /* Callee-saved registers. */
+@@ -45,6 +42,5 @@
+ unsigned long long __trgs[__SETJMP_NUM_TRG]; /* traget registers */
+ unsigned long long __lr; /* linkage register */
+ } __jmp_buf[1];
+-#endif
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/shm.h uClibc-git/libc/sysdeps/linux/sh64/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/sh64/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/crt1.S uClibc-git/libc/sysdeps/linux/sh64/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This is the canonical entry point, usually the first thing in the text
+ segment.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/__longjmp.S uClibc-git/libc/sysdeps/linux/sh64/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+
+ #define _SETJMP_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/Makefile.arch uClibc-git/libc/sysdeps/linux/sh64/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,6 +5,6 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := __init_brk.c brk.c sbrk.c syscall.c
++CSRC-y := __init_brk.c brk.c sbrk.c syscall.c
+
+-SSRC := setjmp.S __longjmp.S
++SSRC-y := setjmp.S __longjmp.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/setjmp.S uClibc-git/libc/sysdeps/linux/sh64/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+
+ #define _SETJMP_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/sys/procfs.h uClibc-git/libc/sysdeps/linux/sh64/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sh64/sys/ucontext.h uClibc-git/libc/sysdeps/linux/sh64/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sh64/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sh64/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* Where is System V/SH ABI? */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/atomic.h uClibc-git/libc/sysdeps/linux/sparc/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_ATOMIC_H
+ #define _BITS_ATOMIC_H 1
+@@ -290,11 +289,11 @@
+ __typeof (*(mem)) __acev_wval = (newval); \
+ do \
+ __acev_wret = *__acev_wmemp; \
+- while (__builtin_expect \
++ while (unlikely \
+ (__v9_compare_and_exchange_val_32_acq (__acev_wmemp,\
+ __acev_wval, \
+ __acev_wret) \
+- != __acev_wret, 0)); \
++ != __acev_wret)); \
+ } \
+ else \
+ __acev_wret = __v7_exchange_acq (mem, newval); \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/eventfd.h uClibc-git/libc/sysdeps/linux/sparc/bits/eventfd.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/eventfd.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/eventfd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2007-2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_EVENTFD_H
++# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
++#endif
++
++/* Flags for eventfd. */
++enum
++ {
++ EFD_SEMAPHORE = 1,
++#define EFD_SEMAPHORE EFD_SEMAPHORE
++ EFD_CLOEXEC = 0x400000,
++#define EFD_CLOEXEC EFD_CLOEXEC
++ EFD_NONBLOCK = 0x004000
++#define EFD_NONBLOCK EFD_NONBLOCK
++ };
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/fcntl.h uClibc-git/libc/sysdeps/linux/sparc/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/fenv.h uClibc-git/libc/sysdeps/linux/sparc/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -68,11 +67,11 @@
+ typedef unsigned long int fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) -1)
++#define FE_DFL_ENV ((const fenv_t *) -1)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where none of the exception is masked. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) -2)
++# define FE_NOMASK_ENV ((const fenv_t *) -2)
+ #endif
+
+ /* For internal use only: access the fp state register. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/huge_vall.h uClibc-git/libc/sysdeps/linux/sparc/bits/huge_vall.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/huge_vall.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/huge_vall.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,48 @@
++/* `HUGE_VALL' constant for IEEE 754 machines (where it is infinity).
++ Used by <stdlib.h> and <math.h> functions for overflow.
++ Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000, 2004
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _MATH_H
++# error "Never use <bits/huge_vall.h> directly; include <math.h> instead."
++#endif
++
++#if __GNUC_PREREQ(3,3)
++# define HUGE_VALL (__builtin_huge_vall())
++#else
++# include <bits/wordsize.h>
++# if __WORDSIZE == 32
++# define HUGE_VALL ((long double) HUGE_VAL)
++# elif __GNUC_PREREQ(2,96)
++# define HUGE_VALL (__extension__ 0x1.0p32767L)
++# elif defined __GNUC__
++
++# define HUGE_VALL \
++ (__extension__ \
++ ((union { struct { unsigned long __h, __l; } __i; long double __d; }) \
++ { __i: { __h: 0x7fff000000000000UL, __l: 0 } }).__d)
++
++# else /* not GCC */
++
++typedef union { unsigned char __c[16]; long double __d; } __huge_vall_t;
++# define __HUGE_VALL_bytes { 0x7f, 0xff, 0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
++static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
++# define HUGE_VALL (__huge_vall.__d)
++
++# endif /* GCC. */
++#endif /* GCC 3.3. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/ioctls.h uClibc-git/libc/sysdeps/linux/sparc/bits/ioctls.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/ioctls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/ioctls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IOCTL_H
+ # error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/ipc.h uClibc-git/libc/sysdeps/linux/sparc/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/sparc/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ typedef __kernel_uid_t __kernel_old_uid_t;
+ typedef __kernel_gid_t __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef __kernel_uid_t __kernel_uid32_t;
+ typedef __kernel_gid_t __kernel_gid32_t;
+ typedef int __kernel_suseconds_t;
+@@ -62,6 +64,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/local_lim.h uClibc-git/libc/sysdeps/linux/sparc/bits/local_lim.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/local_lim.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/local_lim.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,99 @@
++/* Minimum guaranteed maximum values for system limits. Linux/SPARC version.
++ Copyright (C) 1993-1998,2000,2002-2004,2008 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ see <http://www.gnu.org/licenses/>. */
++
++/* The kernel header pollutes the namespace with the NR_OPEN symbol
++ and defines LINK_MAX although filesystems have different maxima. A
++ similar thing is true for OPEN_MAX: the limit can be changed at
++ runtime and therefore the macro must not be defined. Remove this
++ after including the header if necessary. */
++#ifndef NR_OPEN
++# define __undef_NR_OPEN
++#endif
++#ifndef LINK_MAX
++# define __undef_LINK_MAX
++#endif
++#ifndef OPEN_MAX
++# define __undef_OPEN_MAX
++#endif
++#ifndef ARG_MAX
++# define __undef_ARG_MAX
++#endif
++
++/* The kernel sources contain a file with all the needed information. */
++#include <linux/limits.h>
++
++/* Have to remove NR_OPEN? */
++#ifdef __undef_NR_OPEN
++# undef NR_OPEN
++# undef __undef_NR_OPEN
++#endif
++/* Have to remove LINK_MAX? */
++#ifdef __undef_LINK_MAX
++# undef LINK_MAX
++# undef __undef_LINK_MAX
++#endif
++/* Have to remove OPEN_MAX? */
++#ifdef __undef_OPEN_MAX
++# undef OPEN_MAX
++# undef __undef_OPEN_MAX
++#endif
++/* Have to remove ARG_MAX? */
++#ifdef __undef_ARG_MAX
++# undef ARG_MAX
++# undef __undef_ARG_MAX
++#endif
++
++/* The number of data keys per process. */
++#define _POSIX_THREAD_KEYS_MAX 128
++/* This is the value this implementation supports. */
++#define PTHREAD_KEYS_MAX 1024
++
++/* Controlling the iterations of destructors for thread-specific data. */
++#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
++/* Number of iterations this implementation does. */
++#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
++
++/* The number of threads per process. */
++#define _POSIX_THREAD_THREADS_MAX 64
++/* We have no predefined limit on the number of threads. */
++#undef PTHREAD_THREADS_MAX
++
++/* Maximum amount by which a process can descrease its asynchronous I/O
++ priority level. */
++#define AIO_PRIO_DELTA_MAX 20
++
++/* Minimum size for a thread. We are free to choose a reasonable value. */
++#define PTHREAD_STACK_MIN 24576
++
++/* Maximum number of timer expiration overruns. */
++#define DELAYTIMER_MAX 2147483647
++
++/* Maximum tty name length. */
++#define TTY_NAME_MAX 32
++
++/* Maximum login name length. This is arbitrary. */
++#define LOGIN_NAME_MAX 256
++
++/* Maximum host name length. */
++#define HOST_NAME_MAX 64
++
++/* Maximum message queue priority level. */
++#define MQ_PRIO_MAX 32768
++
++/* Maximum value the semaphore can have. */
++#define SEM_VALUE_MAX (2147483647)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/mathdef.h uClibc-git/libc/sysdeps/linux/sparc/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/mathinline.h uClibc-git/libc/sysdeps/linux/sparc/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/mathinline.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/mman.h uClibc-git/libc/sysdeps/linux/sparc/bits/mman.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+@@ -65,7 +64,7 @@
+ # define _MAP_NEW 0x80000000 /* Binary compatibility with SunOS. */
+ # define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */
+ # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+-# define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/msq.h uClibc-git/libc/sysdeps/linux/sparc/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/poll.h uClibc-git/libc/sysdeps/linux/sparc/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/resource.h uClibc-git/libc/sysdeps/linux/sparc/bits/resource.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/resource.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/resource.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_RESOURCE_H
+ # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sem.h uClibc-git/libc/sysdeps/linux/sparc/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/setjmp.h uClibc-git/libc/sysdeps/linux/sparc/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1997,1999,2000,2003 Free Software Foundation, Inc.
++/* Copyright (C) 1997, 1999, 2000, 2003, 2005, 2006
++ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+@@ -27,7 +27,6 @@
+
+ #if 0 /*__WORDSIZE == 64*/
+
+-#ifndef _ASM
+ typedef struct __sparc64_jmp_buf
+ {
+ struct __sparc64_jmp_buf *uc_link;
+@@ -55,30 +54,8 @@
+ } mc_fpregs;
+ } uc_mcontext;
+ } __jmp_buf[1];
+-#endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp)
+-
+ #else
+-
+-#if defined __USE_MISC || defined _ASM
+-# define JB_SP 0
+-# define JB_FP 1
+-# define JB_PC 2
+-#endif
+-
+-#ifndef _ASM
+ typedef int __jmp_buf[3];
+ #endif
+
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((int) (address) < (jmpbuf)[JB_SP])
+-
+-#endif
+-
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/shm.h uClibc-git/libc/sysdeps/linux/sparc/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigaction.h uClibc-git/libc/sysdeps/linux/sparc/bits/sigaction.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigaction.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/sigaction.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/sparc/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigcontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+ # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/sparc/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/siginfo.h uClibc-git/libc/sysdeps/linux/sparc/bits/siginfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/siginfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/siginfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined __need_siginfo_t \
+ && !defined __need_sigevent_t
+@@ -289,6 +288,10 @@
+ {
+ int _pad[__SIGEV_PAD_SIZE];
+
++ /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
++ thread to receive the signal. */
++ __pid_t _tid;
++
+ struct
+ {
+ void (*_function) (sigval_t); /* Function to start. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/signum.h uClibc-git/libc/sysdeps/linux/sparc/bits/signum.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/signum.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/signum.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef _SIGNAL_H
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigstack.h uClibc-git/libc/sysdeps/linux/sparc/bits/sigstack.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/sigstack.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/sigstack.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SIGNAL_H
+ # error "Never include this file directly. Use <signal.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/socket.h uClibc-git/libc/sysdeps/linux/sparc/bits/socket.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/socket.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/socket.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,376 +0,0 @@
+-/* System-specific socket constants and types. Linux version.
+- Copyright (C) 1991,1992,1994-2001,2004,2006 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifndef __BITS_SOCKET_H
+-#define __BITS_SOCKET_H
+-
+-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
+-# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+-#endif
+-
+-#define __need_size_t
+-#define __need_NULL
+-#include <stddef.h>
+-
+-#include <limits.h>
+-#include <sys/types.h>
+-
+-/* Type for length arguments in socket calls. */
+-#ifndef __socklen_t_defined
+-typedef __socklen_t socklen_t;
+-# define __socklen_t_defined
+-#endif
+-
+-/* Types of sockets. */
+-enum __socket_type
+-{
+- SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
+- byte streams. */
+-#define SOCK_STREAM SOCK_STREAM
+- SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
+- of fixed maximum length. */
+-#define SOCK_DGRAM SOCK_DGRAM
+- SOCK_RAW = 3, /* Raw protocol interface. */
+-#define SOCK_RAW SOCK_RAW
+- SOCK_RDM = 4, /* Reliably-delivered messages. */
+-#define SOCK_RDM SOCK_RDM
+- SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
+- datagrams of fixed maximum length. */
+-#define SOCK_SEQPACKET SOCK_SEQPACKET
+- SOCK_PACKET = 10 /* Linux specific way of getting packets
+- at the dev level. For writing rarp and
+- other similar things on the user level. */
+-#define SOCK_PACKET SOCK_PACKET
+-};
+-
+-/* Protocol families. */
+-#define PF_UNSPEC 0 /* Unspecified. */
+-#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */
+-#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */
+-#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */
+-#define PF_INET 2 /* IP protocol family. */
+-#define PF_AX25 3 /* Amateur Radio AX.25. */
+-#define PF_IPX 4 /* Novell Internet Protocol. */
+-#define PF_APPLETALK 5 /* Appletalk DDP. */
+-#define PF_NETROM 6 /* Amateur radio NetROM. */
+-#define PF_BRIDGE 7 /* Multiprotocol bridge. */
+-#define PF_ATMPVC 8 /* ATM PVCs. */
+-#define PF_X25 9 /* Reserved for X.25 project. */
+-#define PF_INET6 10 /* IP version 6. */
+-#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */
+-#define PF_DECnet 12 /* Reserved for DECnet project. */
+-#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */
+-#define PF_SECURITY 14 /* Security callback pseudo AF. */
+-#define PF_KEY 15 /* PF_KEY key management API. */
+-#define PF_NETLINK 16
+-#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */
+-#define PF_PACKET 17 /* Packet family. */
+-#define PF_ASH 18 /* Ash. */
+-#define PF_ECONET 19 /* Acorn Econet. */
+-#define PF_ATMSVC 20 /* ATM SVCs. */
+-#define PF_SNA 22 /* Linux SNA Project */
+-#define PF_IRDA 23 /* IRDA sockets. */
+-#define PF_PPPOX 24 /* PPPoX sockets. */
+-#define PF_WANPIPE 25 /* Wanpipe API sockets. */
+-#define PF_LLC 26 /* Linux LLC. */
+-#define PF_CAN 29 /* Controller Area Network. */
+-#define PF_TIPC 30 /* TIPC sockets. */
+-#define PF_BLUETOOTH 31 /* Bluetooth sockets. */
+-#define PF_IUCV 32 /* IUCV sockets. */
+-#define PF_RXRPC 33 /* RxRPC sockets. */
+-#define PF_ISDN 34 /* mISDN sockets. */
+-#define PF_PHONET 35 /* Phonet sockets. */
+-#define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */
+-#define PF_CAIF 37 /* CAIF sockets. */
+-#define PF_ALG 38 /* Algorithm sockets. */
+-#define PF_MAX 39 /* For now.. */
+-
+-/* Address families. */
+-#define AF_UNSPEC PF_UNSPEC
+-#define AF_LOCAL PF_LOCAL
+-#define AF_UNIX PF_UNIX
+-#define AF_FILE PF_FILE
+-#define AF_INET PF_INET
+-#define AF_AX25 PF_AX25
+-#define AF_IPX PF_IPX
+-#define AF_APPLETALK PF_APPLETALK
+-#define AF_NETROM PF_NETROM
+-#define AF_BRIDGE PF_BRIDGE
+-#define AF_ATMPVC PF_ATMPVC
+-#define AF_X25 PF_X25
+-#define AF_INET6 PF_INET6
+-#define AF_ROSE PF_ROSE
+-#define AF_DECnet PF_DECnet
+-#define AF_NETBEUI PF_NETBEUI
+-#define AF_SECURITY PF_SECURITY
+-#define AF_KEY PF_KEY
+-#define AF_NETLINK PF_NETLINK
+-#define AF_ROUTE PF_ROUTE
+-#define AF_PACKET PF_PACKET
+-#define AF_ASH PF_ASH
+-#define AF_ECONET PF_ECONET
+-#define AF_ATMSVC PF_ATMSVC
+-#define AF_SNA PF_SNA
+-#define AF_IRDA PF_IRDA
+-#define AF_PPPOX PF_PPPOX
+-#define AF_WANPIPE PF_WANPIPE
+-#define AF_LLC PF_LLC
+-#define AF_CAN PF_CAN
+-#define AF_TIPC PF_TIPC
+-#define AF_BLUETOOTH PF_BLUETOOTH
+-#define AF_IUCV PF_IUCV
+-#define AF_RXRPC PF_RXRPC
+-#define AF_ISDN PF_ISDN
+-#define AF_PHONET PF_PHONET
+-#define AF_IEEE802154 PF_IEEE802154
+-#define AF_CAIF PF_CAIF
+-#define AF_ALG PF_ALG
+-#define AF_MAX PF_MAX
+-
+-/* Socket level values. Others are defined in the appropriate headers.
+-
+- XXX These definitions also should go into the appropriate headers as
+- far as they are available. */
+-#define SOL_RAW 255
+-#define SOL_DECNET 261
+-#define SOL_X25 262
+-#define SOL_PACKET 263
+-#define SOL_ATM 264 /* ATM layer (cell level). */
+-#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */
+-#define SOL_IRDA 266
+-
+-/* Maximum queue length specifiable by listen. */
+-#define SOMAXCONN 128
+-
+-/* Get the definition of the macro to define the common sockaddr members. */
+-#include <bits/sockaddr.h>
+-
+-/* Structure describing a generic socket address. */
+-struct sockaddr
+- {
+- __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
+- char sa_data[14]; /* Address data. */
+- };
+-
+-
+-/* Structure large enough to hold any socket address (with the historical
+- exception of AF_UNIX). We reserve 128 bytes. */
+-#if ULONG_MAX > 0xffffffff
+-# define __ss_aligntype __uint64_t
+-#else
+-# define __ss_aligntype __uint32_t
+-#endif
+-#define _SS_SIZE 128
+-#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+-
+-struct sockaddr_storage
+- {
+- __SOCKADDR_COMMON (ss_); /* Address family, etc. */
+- __ss_aligntype __ss_align; /* Force desired alignment. */
+- char __ss_padding[_SS_PADSIZE];
+- };
+-
+-
+-/* Bits in the FLAGS argument to `send', `recv', et al. */
+-enum
+- {
+- MSG_OOB = 0x01, /* Process out-of-band data. */
+-#define MSG_OOB MSG_OOB
+- MSG_PEEK = 0x02, /* Peek at incoming messages. */
+-#define MSG_PEEK MSG_PEEK
+- MSG_DONTROUTE = 0x04, /* Don't use local routing. */
+-#define MSG_DONTROUTE MSG_DONTROUTE
+-#ifdef __USE_GNU
+- /* DECnet uses a different name. */
+- MSG_TRYHARD = MSG_DONTROUTE,
+-# define MSG_TRYHARD MSG_DONTROUTE
+-#endif
+- MSG_CTRUNC = 0x08, /* Control data lost before delivery. */
+-#define MSG_CTRUNC MSG_CTRUNC
+- MSG_PROXY = 0x10, /* Supply or ask second address. */
+-#define MSG_PROXY MSG_PROXY
+- MSG_TRUNC = 0x20,
+-#define MSG_TRUNC MSG_TRUNC
+- MSG_DONTWAIT = 0x40, /* Nonblocking IO. */
+-#define MSG_DONTWAIT MSG_DONTWAIT
+- MSG_EOR = 0x80, /* End of record. */
+-#define MSG_EOR MSG_EOR
+- MSG_WAITALL = 0x100, /* Wait for a full request. */
+-#define MSG_WAITALL MSG_WAITALL
+- MSG_FIN = 0x200,
+-#define MSG_FIN MSG_FIN
+- MSG_SYN = 0x400,
+-#define MSG_SYN MSG_SYN
+- MSG_CONFIRM = 0x800, /* Confirm path validity. */
+-#define MSG_CONFIRM MSG_CONFIRM
+- MSG_RST = 0x1000,
+-#define MSG_RST MSG_RST
+- MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */
+-#define MSG_ERRQUEUE MSG_ERRQUEUE
+- MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */
+-#define MSG_NOSIGNAL MSG_NOSIGNAL
+- MSG_MORE = 0x8000 /* Sender will send more. */
+-#define MSG_MORE MSG_MORE
+- };
+-
+-
+-/* Structure describing messages sent by
+- `sendmsg' and received by `recvmsg'. */
+-/* Note: do not change these members to match glibc; these match the
+- SuSv3 spec already (e.g. msg_iovlen/msg_controllen).
+- http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html */
+-/* Note: linux kernel uses __kernel_size_t (which is 8bytes on 64bit
+- platforms, and 4bytes on 32bit platforms) for msg_iovlen/msg_controllen */
+-struct msghdr
+- {
+- void *msg_name; /* Address to send to/receive from. */
+- socklen_t msg_namelen; /* Length of address data. */
+-
+- struct iovec *msg_iov; /* Vector of data to send/receive into. */
+-#if __WORDSIZE == 32
+- int msg_iovlen; /* Number of elements in the vector. */
+-#else
+- size_t msg_iovlen; /* Number of elements in the vector. */
+-#endif
+-
+- void *msg_control; /* Ancillary data (eg BSD filedesc passing). */
+-#if __WORDSIZE == 32
+- socklen_t msg_controllen; /* Ancillary data buffer length. */
+-#else
+- size_t msg_controllen; /* Ancillary data buffer length. */
+-#endif
+-
+- int msg_flags; /* Flags on received message. */
+- };
+-
+-/* Structure used for storage of ancillary data object information. */
+-struct cmsghdr
+- {
+- size_t cmsg_len; /* Length of data in cmsg_data plus length
+- of cmsghdr structure. */
+- int cmsg_level; /* Originating protocol. */
+- int cmsg_type; /* Protocol specific type. */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+- __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
+-#endif
+- };
+-
+-/* Ancillary data object manipulation macros. */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+-#else
+-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+-#endif
+-#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+-#define CMSG_FIRSTHDR(mhdr) \
+- ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
+- ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
+-#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+- & (size_t) ~(sizeof (size_t) - 1))
+-#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+- + CMSG_ALIGN (sizeof (struct cmsghdr)))
+-#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+-
+-extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+- struct cmsghdr *__cmsg) __THROW;
+-libc_hidden_proto(__cmsg_nxthdr)
+-#ifdef __USE_EXTERN_INLINES
+-# ifndef _EXTERN_INLINE
+-# define _EXTERN_INLINE extern __inline
+-# endif
+-_EXTERN_INLINE struct cmsghdr *
+-__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+-{
+- if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+- /* The kernel header does this so there may be a reason. */
+- return 0;
+-
+- __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+- + CMSG_ALIGN (__cmsg->cmsg_len));
+- if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+- + __mhdr->msg_controllen)
+- || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+- > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+- /* No more entries. */
+- return 0;
+- return __cmsg;
+-}
+-#endif /* Use `extern inline'. */
+-
+-/* Socket level message types. This must match the definitions in
+- <linux/socket.h>. */
+-enum
+- {
+- SCM_RIGHTS = 0x01 /* Transfer file descriptors. */
+-#define SCM_RIGHTS SCM_RIGHTS
+-#ifdef __USE_BSD
+- , SCM_CREDENTIALS = 0x02 /* Credentials passing. */
+-# define SCM_CREDENTIALS SCM_CREDENTIALS
+-#endif
+- };
+-
+-/* User visible structure for SCM_CREDENTIALS message */
+-
+-struct ucred
+-{
+- pid_t pid; /* PID of sending process. */
+- uid_t uid; /* UID of sending process. */
+- gid_t gid; /* GID of sending process. */
+-};
+-
+-/* Get socket manipulation related informations from kernel headers. */
+-#ifndef __GLIBC__
+-#define __GLIBC__ 2
+-#include <asm/socket.h>
+-#undef __GLIBC__
+-#else
+-#include <asm/socket.h>
+-#endif
+-
+-
+-/* Structure used to manipulate the SO_LINGER option. */
+-struct linger
+- {
+- int l_onoff; /* Nonzero to linger on close. */
+- int l_linger; /* Time to linger. */
+- };
+-
+-/* Prefer socketcall over all these for sparc32,
+- since it only has socketcall */
+-#ifndef __arch64__
+- #undef __NR_accept
+- #undef __NR_bind
+- #undef __NR_connect
+- #undef __NR_getpeername
+- #undef __NR_getsockname
+- #undef __NR_getsockopt
+- #undef __NR_listen
+- #undef __NR_recv
+- #undef __NR_recvfrom
+- #undef __NR_recvmsg
+- #undef __NR_send
+- #undef __NR_sendmsg
+- #undef __NR_sendto
+- #undef __NR_setsockopt
+- #undef __NR_shutdown
+- #undef __NR_socket
+- #undef __NR_socketpair
+-#endif
+-
+-#endif /* bits/socket.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/socket_type.h uClibc-git/libc/sysdeps/linux/sparc/bits/socket_type.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/socket_type.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/socket_type.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,54 @@
++/* System-specific socket constants and types. Linux version.
++ Copyright (C) 1991,1992,1994-2001,2004,2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets. */
++enum __socket_type
++{
++ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
++ byte streams. */
++#define SOCK_STREAM SOCK_STREAM
++ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
++ of fixed maximum length. */
++#define SOCK_DGRAM SOCK_DGRAM
++ SOCK_RAW = 3, /* Raw protocol interface. */
++#define SOCK_RAW SOCK_RAW
++ SOCK_RDM = 4, /* Reliably-delivered messages. */
++#define SOCK_RDM SOCK_RDM
++ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
++ datagrams of fixed maximum length. */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
++#define SOCK_DCCP SOCK_DCCP
++ SOCK_PACKET = 10, /* Linux specific way of getting packets
++ at the dev level. For writing rarp and
++ other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++ /* Flags to be ORed into the type parameter of socket and socketpair. */
++
++ SOCK_CLOEXEC = 0x400000, /* Atomically set close-on-exec flag for the
++ new descriptor(s). */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++ SOCK_NONBLOCK = 0x004000 /* Atomically mark descriptor(s) as
++ non-blocking. */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/sparc/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/stat.h uClibc-git/libc/sysdeps/linux/sparc/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/termios.h uClibc-git/libc/sysdeps/linux/sparc/bits/termios.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TERMIOS_H
+ # error "Never include <bits/termios.h> directly; use <termios.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/typesizes.h uClibc-git/libc/sysdeps/linux/sparc/bits/typesizes.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/typesizes.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/brk.c uClibc-git/libc/sysdeps/linux/sparc/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/clone.S uClibc-git/libc/sysdeps/linux/sparc/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/crt1.S uClibc-git/libc/sysdeps/linux/sparc/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -31,9 +31,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Originally based on glibc's sysdeps/sparc/sparc{32,64}/elf/start.S */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/fork.S uClibc-git/libc/sysdeps/linux/sparc/fork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/fork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/fork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */
+
+@@ -23,11 +22,14 @@
+ #include <sys/syscall.h>
+
+ .text
+-.global __libc_fork
+-.type __libc_fork,%function
++.global fork
++#ifdef __UCLIBC_HAS_THREADS__
++.weak fork
++#endif
++.type fork,%function
+ .align 4
+
+-__libc_fork:
++fork:
+ mov __NR_fork, %g1
+ ta 0x10
+ bcc,a 9000f
+@@ -44,6 +46,8 @@
+ retl
+ and %o0, %o1, %o0
+
+-.size __libc_fork,.-__libc_fork
+-weak_alias(__libc_fork,fork)
+-libc_hidden_weak(fork)
++.size fork,.-fork
++#ifdef __UCLIBC_HAS_THREADS__
++strong_alias(fork,__libc_fork)
++#endif
++libc_hidden_def(fork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/fpu_control.h uClibc-git/libc/sysdeps/linux/sparc/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/sparc/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sparc/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Private macros for accessing __jmp_buf contents. SPARC version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <bits/wordsize.h>
++
++#if __WORDSIZE == 64
++#define O_mask_was_saved 512
++#define O_gregs 32
++#define O_g1 (O_gregs + 4*8)
++#else
++#define JB_SP 0
++#define JB_FP 1
++#define JB_PC 2
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/sparc/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/sparc/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++#if __WORDSIZE == 64
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp)
++
++#else
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((int) (address) < (jmpbuf)[JB_SP])
++
++#endif
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#if defined(__arch64__)
++#include "sparc64/jmpbuf-unwind.h"
++#else
++#include "sparc32/jmpbuf-unwind.h"
++#endif
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/__longjmp.S uClibc-git/libc/sysdeps/linux/sparc/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,16 +12,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#include <sys/syscall.h>
++#include <jmpbuf-offsets.h>
+
+-#define _ASM 1
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+ #define ENV(base,reg) [%base + (reg * 4)]
+ #define ST_FLUSH_WINDOWS 3
+ #define RW_FP [%fp + 0x48]
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/Makefile.arch uClibc-git/libc/sysdeps/linux/sparc/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,25 +5,23 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c sigaction.c
++CSRC-y := brk.c __syscall_error.c sigaction.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
+ syscall.S urem.S udiv.S umul.S sdiv.S rem.S pipe.S
+
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-SSRC += fork.S vfork.S clone.S
+-endif
++SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += fork.S vfork.S clone.S
+
+ # check weather __LONG_DOUBLE_128__ is defined (long double support)
+ UCLIBC_SPARC_HAS_LONG_DOUBLE=$(shell if [ "x`$(CC) -E -dM -xc /dev/null 2>&1 | grep __LONG_DOUBLE_128__`" != "x" ]; then echo "y"; fi)
+ ifeq ($(UCLIBC_SPARC_HAS_LONG_DOUBLE),y)
+-CSRC += $(foreach f, \
++CSRC-y += $(addprefix soft-fp/, \
+ q_div.c q_fle.c q_mul.c q_qtoll.c q_stoq.c \
+ mp_clz_tab.c q_dtoq.c q_flt.c q_neg.c q_qtos.c q_sub.c \
+ q_add.c q_feq.c q_fne.c q_qtod.c q_qtou.c q_ulltoq.c \
+ q_cmp.c q_fge.c q_itoq.c q_qtoull.c q_util.c \
+- q_cmpe.c q_fgt.c q_lltoq.c q_qtoi.c q_sqrt.c q_utoq.c, soft-fp/$(f))
++ q_cmpe.c q_fgt.c q_lltoq.c q_qtoi.c q_sqrt.c q_utoq.c)
+ else
+-CSRC += qp_ops.c
++CSRC-y += qp_ops.c
+ endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/pipe.S uClibc-git/libc/sysdeps/linux/sparc/pipe.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/pipe.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/pipe.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,10 +13,9 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
+-
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
++
+ Ported to uClibc by:
+ Austin Foxley, Ceton Corporation <austinf@cetoncorp.com>
+ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/setjmp.S uClibc-git/libc/sysdeps/linux/sparc/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,15 +12,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <sys/syscall.h>
++#include <jmpbuf-offsets.h>
+
+-#define _ASM 1
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+ #define ST_FLUSH_WINDOWS 3
+
+ .global _setjmp
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sigaction.c uClibc-git/libc/sysdeps/linux/sparc/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>.
+
+ Ported to uClibc from glibc: 090520:
+ Jan Buchholz, KIP, Uni Heidelberg <jan.buchholz@kip.uni-heidelberg.de>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/double.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/double.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/double.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/double.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if _FP_W_TYPE_SIZE < 32
+ #error "Here's a nickel kid. Go buy yourself a real computer."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/extended.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/extended.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/extended.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/extended.h 2014-02-03 12:32:56.000000000 +0100
+@@ -24,9 +24,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if _FP_W_TYPE_SIZE < 32
+ #error "Here's a nickel, kid. Go buy yourself a real computer."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/longlong.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/longlong.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/longlong.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/longlong.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* You have to define the following before including this file:
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/mp_clz_tab.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/mp_clz_tab.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/mp_clz_tab.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/mp_clz_tab.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if 0
+ #include <gmp.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-1.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-1.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-1.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-1.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _FP_FRAC_DECL_1(X) _FP_W_TYPE X##_f
+ #define _FP_FRAC_COPY_1(D,S) (D##_f = S##_f)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-2.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-2.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-2.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-2.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _FP_FRAC_DECL_2(X) _FP_W_TYPE X##_f0, X##_f1
+ #define _FP_FRAC_COPY_2(D,S) (D##_f0 = S##_f0, D##_f1 = S##_f1)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-4.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-4.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-4.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-4.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _FP_FRAC_DECL_4(X) _FP_W_TYPE X##_f[4]
+ #define _FP_FRAC_COPY_4(D,S) \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-8.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-8.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-8.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-8.h 2014-02-03 12:32:56.000000000 +0100
+@@ -26,9 +26,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* We need just a few things from here for op-4, if we ever need some
+ other macros, they can be added. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-common.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-common.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/op-common.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/op-common.h 2014-02-03 12:32:56.000000000 +0100
+@@ -26,9 +26,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _FP_DECL(wc, X) \
+ _FP_I_TYPE X##_c __attribute__((unused)), X##_s, X##_e; \
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_add.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_add.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_add.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_add.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_cmp.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_cmp.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_cmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_cmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_cmpe.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_cmpe.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_cmpe.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_cmpe.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_div.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_div.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_div.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_div.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_dtoq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_dtoq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_dtoq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_dtoq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "double.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_feq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_feq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_feq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_feq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fge.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fge.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fge.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fge.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fgt.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fgt.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fgt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fgt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fle.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fle.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fle.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fle.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_flt.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_flt.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_flt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_flt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fne.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fne.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_fne.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_fne.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_itoq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_itoq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_itoq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_itoq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_lltoq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_lltoq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_lltoq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_lltoq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_mul.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_mul.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_mul.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_mul.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_neg.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_neg.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_neg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_neg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtod.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtod.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtod.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "double.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtoi.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtoi.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtoi.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtoi.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FP_ROUNDMODE FP_RND_ZERO
+ #include "soft-fp.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtoll.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtoll.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtoll.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtoll.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FP_ROUNDMODE FP_RND_ZERO
+ #include "soft-fp.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtos.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtos.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtos.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtos.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "single.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtou.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtou.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtou.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtou.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FP_ROUNDMODE FP_RND_ZERO
+ #include "soft-fp.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtoull.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtoull.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_qtoull.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_qtoull.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FP_ROUNDMODE FP_RND_ZERO
+ #include "soft-fp.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_sqrt.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_sqrt.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_sqrt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_sqrt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_stoq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_stoq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_stoq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_stoq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "single.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_sub.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_sub.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_sub.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_sub.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/quad.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/quad.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/quad.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/quad.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if _FP_W_TYPE_SIZE < 32
+ #error "Here's a nickel, kid. Go buy yourself a real computer."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_ulltoq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_ulltoq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_ulltoq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_ulltoq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_util.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_util.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_util.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_util.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_utoq.c uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_utoq.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/q_utoq.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/q_utoq.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "soft-fp.h"
+ #include "quad.h"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/sfp-machine.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/sfp-machine.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/sfp-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/sfp-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fpu_control.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/single.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/single.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/single.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/single.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if _FP_W_TYPE_SIZE < 32
+ #error "Here's a nickel kid. Go buy yourself a real computer."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/soft-fp.h uClibc-git/libc/sysdeps/linux/sparc/soft-fp/soft-fp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/soft-fp/soft-fp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/soft-fp/soft-fp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -27,9 +27,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+- MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef SOFT_FP_H
+ #define SOFT_FP_H
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sparcv9/clone.S uClibc-git/libc/sysdeps/linux/sparc/sparcv9/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sparcv9/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/sparcv9/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/procfs.h uClibc-git/libc/sysdeps/linux/sparc/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/ptrace.h uClibc-git/libc/sysdeps/linux/sparc/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/ucontext.h uClibc-git/libc/sysdeps/linux/sparc/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/user.h uClibc-git/libc/sysdeps/linux/sparc/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/syscall.S uClibc-git/libc/sysdeps/linux/sparc/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/sparc/vfork.S uClibc-git/libc/sysdeps/linux/sparc/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/sparc/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/sparc/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */
+
+@@ -52,4 +51,4 @@
+ .size __vfork,.-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/fcntl.h uClibc-git/libc/sysdeps/linux/v850/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/v850/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -41,6 +41,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+
+ typedef struct {
+ #ifdef __USE_ALL
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/poll.h uClibc-git/libc/sysdeps/linux/v850/bits/poll.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/poll.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/bits/poll.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_POLL_H
+ # error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/setjmp.h uClibc-git/libc/sysdeps/linux/v850/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -18,7 +18,6 @@
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+-#ifndef _ASM
+ typedef struct
+ {
+ /* Stack pointer. */
+@@ -30,13 +29,5 @@
+ /* Callee-saved registers r2 and r20-r29. */
+ int __regs[11];
+ } __jmp_buf[1];
+-#endif
+-
+-#define JB_SIZE (4 * 13)
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[0].__sp)
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -10,10 +10,10 @@
+ #undef __UCLIBC_ABORT_INSTRUCTION__
+
+ /* can your target use syscall6() for mmap ? */
+-#undef __UCLIBC_MMAP_HAS_6_ARGS__
++#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/wordsize.h uClibc-git/libc/sysdeps/linux/v850/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/v850/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/v850/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,6 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#define JB_SIZE (4 * 13)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/v850/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/v850/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[0].__sp)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/__longjmp.S uClibc-git/libc/sysdeps/linux/v850/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -11,11 +11,6 @@
+ * Written by Miles Bader <miles@gnu.org>
+ */
+
+-#include <features.h>
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+-
+ #include <clinkage.h>
+
+ .text
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/Makefile uClibc-git/libc/sysdeps/linux/v850/Makefile
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/Makefile 2014-02-03 12:32:56.000000000 +0100
+@@ -20,7 +20,7 @@
+ SSRC := setjmp.S __longjmp.S vfork.S
+ SOBJ := $(patsubst %.S,%.o, $(SSRC))
+
+-CSRC := mmap.c syscall.c clone.c
++CSRC := syscall.c clone.c
+ COBJ := $(patsubst %.c,%.o, $(CSRC))
+
+ OBJS := $(SOBJ) $(COBJ)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/mmap.c uClibc-git/libc/sysdeps/linux/v850/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,16 +0,0 @@
+-/* Use new style mmap for v850 */
+-/*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <unistd.h>
+-#include <errno.h>
+-#include <sys/mman.h>
+-#include <sys/syscall.h>
+-
+-
+-_syscall6 (__ptr_t, mmap, __ptr_t, addr, size_t, len, int, prot,
+- int, flags, int, fd, __off_t, offset)
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/setjmp.S uClibc-git/libc/sysdeps/linux/v850/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -11,10 +11,6 @@
+ * Written by Miles Bader <miles@gnu.org>
+ */
+
+-#define _SETJMP_H
+-#define _ASM
+-#include <bits/setjmp.h>
+-
+ #include <clinkage.h>
+
+ .text
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/sys/procfs.h uClibc-git/libc/sysdeps/linux/v850/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/sys/ptrace.h uClibc-git/libc/sysdeps/linux/v850/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/sys/ptrace.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PTRACE_H
+ #define _SYS_PTRACE_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/sys/ucontext.h uClibc-git/libc/sysdeps/linux/v850/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/v850/vfork.S uClibc-git/libc/sysdeps/linux/v850/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/v850/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/v850/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -11,12 +11,7 @@
+ * Written by Miles Bader <miles@gnu.org>
+ */
+
+-#include <features.h>
+-#define _ERRNO_H 1
+-#include <bits/errno.h>
+-#define _SYSCALL_H
+-#include <bits/sysnum.h>
+-
++#include <sys/syscall.h>
+ #include <clinkage.h>
+
+ /* Clone the calling process, but without copying the whole address space.
+@@ -24,8 +19,7 @@
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+
+-.global C_SYMBOL_NAME(errno)
+-
++/* this should be made hidden */
+ C_ENTRY (__vfork):
+ addi SYS_vfork, r0, r12
+ trap 0
+@@ -39,4 +33,4 @@
+ jmp [lp] /* error return */
+ C_END(__vfork)
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/fcntl.h uClibc-git/libc/sysdeps/linux/vax/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/huge_val.h uClibc-git/libc/sysdeps/linux/vax/bits/huge_val.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/huge_val.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/vax/bits/huge_val.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,25 @@
++/* `HUGE_VAL' constant for Vaxen.
++ Used by <stdlib.h> and <math.h> functions for overflow.
++ Copyright (C) 1992, 1996, 1997 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _MATH_H
++# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
++#endif
++
++
++#define HUGE_VAL 1.70141182460469227e38
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/ipc.h uClibc-git/libc/sysdeps/linux/vax/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/machine-gmon.h uClibc-git/libc/sysdeps/linux/vax/bits/machine-gmon.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/machine-gmon.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/machine-gmon.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,41 +0,0 @@
+-/* i386-specific implementation of profiling support.
+- Copyright (C) 1997, 2002 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <sysdep.h>
+-
+-/* We need a special version of the `mcount' function since for ix86 it
+- must not clobber any register. This has several reasons:
+- - there is a bug in gcc as of version 2.7.2.2 which prohibits the
+- use of profiling together with nested functions
+- - the ELF `fixup' function uses GCC's regparm feature
+- - some (future) systems might want to pass parameters in registers. */
+-
+-/* We must not pollute the global namespace. */
+-#define mcount_internal __mcount_internal
+-
+-extern void mcount_internal (u_long frompc, u_long selfpc);
+-
+-#define _MCOUNT_DECL(frompc, selfpc) \
+-void __attribute__ (( regparm (2) )) mcount_internal (u_long frompc, u_long selfpc)
+-
+-
+-/* Define MCOUNT as empty since we have the implementation in another
+- file. */
+-#define MCOUNT
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/sem.h uClibc-git/libc/sysdeps/linux/vax/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/setjmp.h uClibc-git/libc/sysdeps/linux/vax/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -6,14 +6,8 @@
+
+ /* we want to save enough that we can use this to fool RET,
+ * So we basically save all of the CALLS stack frame. Plus regs. */
+-#ifndef _ASM
+ typedef int __jmp_buf[16];
+-#endif
+
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf[4]))
+ /*
+ jmp_buf layout. jmp_buf[0]
+ void *__cond; The condition handler
+@@ -34,4 +28,3 @@
+ void *__rA; regs, r0->r11.
+ void *__rB; regs, r0->r11.
+ */
+-
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/shm.h uClibc-git/libc/sysdeps/linux/vax/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/vax/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/sigcontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,8 +13,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+ # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/statfs.h uClibc-git/libc/sysdeps/linux/vax/bits/statfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/statfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/statfs.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,61 +0,0 @@
+-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Library General Public License as
+- published by the Free Software Foundation; either version 2 of the
+- License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Library General Public License for more details.
+-
+- You should have received a copy of the GNU Library General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
+-
+-#ifndef _SYS_STATFS_H
+-# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
+-#endif
+-
+-#include <bits/types.h> /* for __fsid_t and __fsblkcnt_t*/
+-
+-struct statfs
+- {
+- int f_type;
+- int f_bsize;
+-#ifndef __USE_FILE_OFFSET64
+- __fsblkcnt_t f_blocks;
+- __fsblkcnt_t f_bfree;
+- __fsblkcnt_t f_bavail;
+- __fsfilcnt_t f_files;
+- __fsfilcnt_t f_ffree;
+-#else
+- __fsblkcnt64_t f_blocks;
+- __fsblkcnt64_t f_bfree;
+- __fsblkcnt64_t f_bavail;
+- __fsfilcnt64_t f_files;
+- __fsfilcnt64_t f_ffree;
+-#endif
+- __fsid_t f_fsid;
+- int f_namelen;
+- int f_spare[6];
+- };
+-
+-#ifdef __USE_LARGEFILE64
+-struct statfs64
+- {
+- int f_type;
+- int f_bsize;
+- __fsblkcnt64_t f_blocks;
+- __fsblkcnt64_t f_bfree;
+- __fsblkcnt64_t f_bavail;
+- __fsfilcnt64_t f_files;
+- __fsfilcnt64_t f_ffree;
+- __fsid_t f_fsid;
+- int f_namelen;
+- int f_spare[6];
+- };
+-#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/vax/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/wordsize.h uClibc-git/libc/sysdeps/linux/vax/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,7 +13,6 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/brk.c uClibc-git/libc/sysdeps/linux/vax/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/clone.S uClibc-git/libc/sysdeps/linux/vax/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/vax/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/vax/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf[4]))
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/Makefile.arch uClibc-git/libc/sysdeps/linux/vax/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -6,5 +6,5 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c mmap.c
+-SSRC := __longjmp.S setjmp.S _setjmp.S clone.S
++CSRC-y := brk.c
++SSRC-y := __longjmp.S setjmp.S _setjmp.S clone.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/mmap.c uClibc-git/libc/sysdeps/linux/vax/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,10 +0,0 @@
+-
+-#include <unistd.h>
+-#include <sys/mman.h>
+-#include <errno.h>
+-#include <sys/syscall.h>
+-
+-_syscall6 (void *, mmap, void *, start, size_t, length, int, prot, int, flags,
+- int, fd, off_t, offset)
+-libc_hidden_def(mmap)
+-
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/sys/procfs.h uClibc-git/libc/sysdeps/linux/vax/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/vax/sys/ucontext.h uClibc-git/libc/sysdeps/linux/vax/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/vax/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/vax/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Don't rely on this, the interface is currently messed up and may need to
+ be broken to be fixed. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/atomic.h uClibc-git/libc/sysdeps/linux/x86_64/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdint.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/byteswap.h uClibc-git/libc/sysdeps/linux/x86_64/bits/byteswap.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/byteswap.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/byteswap.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _ASM_BITS_BYTESWAP_H
+ #define _ASM_BITS_BYTESWAP_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/environments.h uClibc-git/libc/sysdeps/linux/x86_64/bits/environments.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/environments.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/environments.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _UNISTD_H
+ # error "Never include this file directly. Use <unistd.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/fcntl.h uClibc-git/libc/sysdeps/linux/x86_64/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/fenv.h uClibc-git/libc/sysdeps/linux/x86_64/bits/fenv.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/fenv.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/fenv.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_H
+ # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+@@ -89,9 +88,9 @@
+ fenv_t;
+
+ /* If the default argument is used we use this value. */
+-#define FE_DFL_ENV ((__const fenv_t *) -1)
++#define FE_DFL_ENV ((const fenv_t *) -1)
+
+ #ifdef __USE_GNU
+ /* Floating-point environment where none of the exception is masked. */
+-# define FE_NOMASK_ENV ((__const fenv_t *) -2)
++# define FE_NOMASK_ENV ((const fenv_t *) -2)
+ #endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/x86_64/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -40,6 +40,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef __kernel_dev_t __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ typedef struct {
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/mathdef.h uClibc-git/libc/sysdeps/linux/x86_64/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/mathinline.h uClibc-git/libc/sysdeps/linux/x86_64/bits/mathinline.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/mathinline.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/mathinline.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MATH_H
+ # error "Never use <bits/mathinline.h> directly; include <math.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/msq.h uClibc-git/libc/sysdeps/linux/x86_64/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/sem.h uClibc-git/libc/sysdeps/linux/x86_64/bits/sem.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/sem.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/sem.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SEM_H
+ # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/setjmp.h uClibc-git/libc/sysdeps/linux/x86_64/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Copyright (C) 2001,2002,2003,2005,2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -12,13 +12,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. x86-64 version. */
+ #ifndef _BITS_SETJMP_H
+-#define _BITS_SETJMP_H 1
++#define _BITS_SETJMP_H 1
+
+ #if !defined _SETJMP_H && !defined _PTHREAD_H
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+@@ -27,52 +26,9 @@
+ #include <bits/wordsize.h>
+
+ #if __WORDSIZE == 64
+-
+-/* We only need to save callee-saved registers plus stackpointer and
+- program counter. */
+-# if defined __USE_MISC || defined _ASM
+-# define JB_RBX 0
+-# define JB_RBP 1
+-# define JB_R12 2
+-# define JB_R13 3
+-# define JB_R14 4
+-# define JB_R15 5
+-# define JB_RSP 6
+-# define JB_PC 7
+-# define JB_SIZE (8*8)
+-# endif
+-
+-#else
+-
+-# if defined __USE_MISC || defined _ASM
+-# define JB_BX 0
+-# define JB_SI 1
+-# define JB_DI 2
+-# define JB_BP 3
+-# define JB_SP 4
+-# define JB_PC 5
+-# define JB_SIZE 24
+-# endif
+-
+-#endif
+-
+-#ifndef _ASM
+-
+-# if __WORDSIZE == 64
+ typedef long int __jmp_buf[8];
+-# else
++#else
+ typedef int __jmp_buf[6];
+-# endif
+-
+-/* Test if longjmp to JMPBUF would unwind the frame
+- containing a local variable at ADDRESS. */
+-# if __WORDSIZE == 64
+-# define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[JB_RSP])
+-# else
+-# define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[JB_SP])
+-# endif
+ #endif
+
+-#endif /* bits/setjmp.h */
++#endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/shm.h uClibc-git/libc/sysdeps/linux/x86_64/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/x86_64/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/sigcontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_SIGCONTEXT_H
+ #define _BITS_SIGCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/x86_64/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define SIGCONTEXT siginfo_t *_si, struct ucontext *
+ #define SIGCONTEXT_EXTRA_ARGS _si,
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/x86_64/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/stat.h uClibc-git/libc/sysdeps/linux/x86_64/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/brk.c uClibc-git/libc/sysdeps/linux/x86_64/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bsd-_setjmp.S uClibc-git/libc/sysdeps/linux/x86_64/bsd-_setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bsd-_setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bsd-_setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bsd-setjmp.S uClibc-git/libc/sysdeps/linux/x86_64/bsd-setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/bsd-setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/bsd-setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+-#include <sysdep.h>
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .global setjmp
+ .type setjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/clone.S uClibc-git/libc/sysdeps/linux/x86_64/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/crt1.S uClibc-git/libc/sysdeps/linux/x86_64/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -31,9 +31,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Originally based on glibc's sysdeps/x86_64/elf/start.S */
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/fpu_control.h uClibc-git/libc/sysdeps/linux/x86_64/fpu_control.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/fpu_control.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/fpu_control.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FPU_CONTROL_H
+ #define _FPU_CONTROL_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/getcontext.S uClibc-git/libc/sysdeps/linux/x86_64/getcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/getcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/getcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,88 @@
++/* Save current context.
++ Copyright (C) 2002-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Andreas Jaeger <aj@suse.de>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++/* int __getcontext (ucontext_t *ucp)
++
++ Saves the machine context in UCP such that when it is activated,
++ it appears as if __getcontext() returned again.
++
++ This implementation is intended to be used for *synchronous* context
++ switches only. Therefore, it does not have to save anything
++ other than the PRESERVED state. */
++
++
++ENTRY(__getcontext)
++ /* Save the preserved registers, the registers used for passing
++ args, and the return address. */
++ movq %rbx, oRBX(%rdi)
++ movq %rbp, oRBP(%rdi)
++ movq %r12, oR12(%rdi)
++ movq %r13, oR13(%rdi)
++ movq %r14, oR14(%rdi)
++ movq %r15, oR15(%rdi)
++
++ movq %rdi, oRDI(%rdi)
++ movq %rsi, oRSI(%rdi)
++ movq %rdx, oRDX(%rdi)
++ movq %rcx, oRCX(%rdi)
++ movq %r8, oR8(%rdi)
++ movq %r9, oR9(%rdi)
++
++ movq (%rsp), %rcx
++ movq %rcx, oRIP(%rdi)
++ leaq 8(%rsp), %rcx /* Exclude the return address. */
++ movq %rcx, oRSP(%rdi)
++
++ /* We have separate floating-point register content memory on the
++ stack. We use the __fpregs_mem block in the context. Set the
++ links up correctly. */
++
++ leaq oFPREGSMEM(%rdi), %rcx
++ movq %rcx, oFPREGS(%rdi)
++ /* Save the floating-point environment. */
++ fnstenv (%rcx)
++ fldenv (%rcx)
++ stmxcsr oMXCSR(%rdi)
++
++ /* Save the current signal mask with
++ rt_sigprocmask (SIG_BLOCK, NULL, set,_NSIG/8). */
++ leaq oSIGMASK(%rdi), %rdx
++ xorl %esi,%esi
++#if SIG_BLOCK == 0
++ xorl %edi, %edi
++#else
++ movl $SIG_BLOCK, %edi
++#endif
++ movl $_NSIG8,%r10d
++ movl $__NR_rt_sigprocmask, %eax
++ syscall
++ cmpq $-4095, %rax /* Check %rax for error. */
++ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
++
++ /* All done, return 0 for success. */
++ xorl %eax, %eax
++L(pseudo_end):
++ ret
++PSEUDO_END(__getcontext)
++
++weak_alias (__getcontext, getcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/x86_64/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,45 @@
++/* Private macros for accessing __jmp_buf contents. x86-64 version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <bits/wordsize.h>
++
++#if __WORDSIZE == 64
++
++/* We only need to save callee-saved registers plus stackpointer and
++ program counter. */
++# define JB_RBX 0
++# define JB_RBP 1
++# define JB_R12 2
++# define JB_R13 3
++# define JB_R14 4
++# define JB_R15 5
++# define JB_RSP 6
++# define JB_PC 7
++# define JB_SIZE (8*8)
++
++#else
++
++# define JB_BX 0
++# define JB_SI 1
++# define JB_DI 2
++# define JB_BP 3
++# define JB_SP 4
++# define JB_PC 5
++# define JB_SIZE 24
++
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/x86_64/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#if __WORDSIZE == 64
++# define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_RSP])
++#else
++# define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_SP])
++#endif
++
++#ifdef __UCLIBC_HAS_THREADS_NATIVE__
++#include <stdint.h>
++#include <unwind.h>
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_RSP] - (_adj))
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/__longjmp.S uClibc-git/libc/sysdeps/linux/x86_64/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,14 +12,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
++#include <jmpbuf-offsets.h>
+
+ /* Jump to the position specified by ENV, causing the
+ setjmp call there to return VAL, or 1 if VAL is 0.
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/makecontext.c uClibc-git/libc/sysdeps/linux/x86_64/makecontext.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/makecontext.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/makecontext.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,121 @@
++/* Create new context.
++ Copyright (C) 2002, 2004, 2005, 2008 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Andreas Jaeger <aj@suse.de>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <stdarg.h>
++#include <stdint.h>
++#include <ucontext.h>
++
++#include "ucontext_i.h"
++
++/* This implementation can handle any ARGC value but only
++ normal integer parameters.
++ makecontext sets up a stack and the registers for the
++ user context. The stack looks like this:
++ +-----------------------+
++ | next context |
++ +-----------------------+
++ | parameter 7-n |
++ +-----------------------+
++ | trampoline address |
++ %rsp -> +-----------------------+
++
++ The registers are set up like this:
++ %rdi,%rsi,%rdx,%rcx,%r8,%r9: parameter 1 to 6
++ %rbx : address of next context
++ %rsp : stack pointer.
++*/
++
++/* XXX: This implementation currently only handles integer arguments.
++ To handle long int and pointer arguments the va_arg arguments needs
++ to be changed to long and also the stdlib/tst-setcontext.c file needs
++ to be changed to pass long arguments to makecontext. */
++
++
++void
++__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
++{
++ extern void __start_context (void);
++ greg_t *sp;
++ unsigned int idx_uc_link;
++ va_list ap;
++ int i;
++
++ /* Generate room on stack for parameter if needed and uc_link. */
++ sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp
++ + ucp->uc_stack.ss_size);
++ sp -= (argc > 6 ? argc - 6 : 0) + 1;
++ /* Align stack and make space for trampoline address. */
++ sp = (greg_t *) ((((uintptr_t) sp) & -16L) - 8);
++
++ idx_uc_link = (argc > 6 ? argc - 6 : 0) + 1;
++
++ /* Setup context ucp. */
++ /* Address to jump to. */
++ ucp->uc_mcontext.gregs[REG_RIP] = (uintptr_t) func;
++ /* Setup rbx.*/
++ ucp->uc_mcontext.gregs[REG_RBX] = (uintptr_t) &sp[idx_uc_link];
++ ucp->uc_mcontext.gregs[REG_RSP] = (uintptr_t) sp;
++
++ /* Setup stack. */
++ sp[0] = (uintptr_t) &__start_context;
++ sp[idx_uc_link] = (uintptr_t) ucp->uc_link;
++
++ va_start (ap, argc);
++ /* Handle arguments.
++
++ The standard says the parameters must all be int values. This is
++ an historic accident and would be done differently today. For
++ x86-64 all integer values are passed as 64-bit values and
++ therefore extending the API to copy 64-bit values instead of
++ 32-bit ints makes sense. It does not break existing
++ functionality and it does not violate the standard which says
++ that passing non-int values means undefined behavior. */
++ for (i = 0; i < argc; ++i)
++ switch (i)
++ {
++ case 0:
++ ucp->uc_mcontext.gregs[REG_RDI] = va_arg (ap, greg_t);
++ break;
++ case 1:
++ ucp->uc_mcontext.gregs[REG_RSI] = va_arg (ap, greg_t);
++ break;
++ case 2:
++ ucp->uc_mcontext.gregs[REG_RDX] = va_arg (ap, greg_t);
++ break;
++ case 3:
++ ucp->uc_mcontext.gregs[REG_RCX] = va_arg (ap, greg_t);
++ break;
++ case 4:
++ ucp->uc_mcontext.gregs[REG_R8] = va_arg (ap, greg_t);
++ break;
++ case 5:
++ ucp->uc_mcontext.gregs[REG_R9] = va_arg (ap, greg_t);
++ break;
++ default:
++ /* Put value on stack. */
++ sp[i - 5] = va_arg (ap, greg_t);
++ break;
++ }
++ va_end (ap);
++
++}
++
++
++weak_alias (__makecontext, makecontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/Makefile.arch uClibc-git/libc/sysdeps/linux/x86_64/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,18 +5,15 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c sigaction.c mmap.c
++CSRC-y := brk.c __syscall_error.c sigaction.c
+
+-SSRC := \
++SSRC-y := \
+ __longjmp.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S
+
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-SSRC += vfork.S clone.S
+-endif
+-
++SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += vfork.S clone.S
++ARCH_OBJ_FILTEROUT-$(UCLIBC_LINUX_SPECIFIC) := sched_getcpu.c
+ ifeq ($(UCLIBC_LINUX_SPECIFIC),y)
+-ARCH_OBJ_FILTEROUT = sched_getcpu.c
+-ifeq ($(UCLIBC_HAS_TLS),y)
+-SSRC += sched_getcpu.S
+-endif
++SSRC-$(UCLIBC_HAS_TLS) += sched_getcpu.S
+ endif
++CSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.c
++SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += setcontext.S getcontext.S swapcontext.S __start_context.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/mmap.c uClibc-git/libc/sysdeps/linux/x86_64/mmap.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/mmap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/mmap.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,19 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * mmap() for uClibc/x86_64
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- * Copyright (C) 2005 by Mike Frysinger <vapier@gentoo.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <errno.h>
+-#include <unistd.h>
+-#include <sys/mman.h>
+-#include <sys/syscall.h>
+-
+-
+-_syscall6(void *, mmap, void *, start, size_t, length, int, prot,
+- int, flags, int, fd, off_t, offset)
+-libc_hidden_def(mmap)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sched_getcpu.S uClibc-git/libc/sysdeps/linux/x86_64/sched_getcpu.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sched_getcpu.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sched_getcpu.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/setcontext.S uClibc-git/libc/sysdeps/linux/x86_64/setcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/setcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/setcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,103 @@
++/* Install given context.
++ Copyright (C) 2002-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Andreas Jaeger <aj@suse.de>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++/* int __setcontext (const ucontext_t *ucp)
++
++ Restores the machine context in UCP and thereby resumes execution
++ in that context.
++
++ This implementation is intended to be used for *synchronous* context
++ switches only. Therefore, it does not have to restore anything
++ other than the PRESERVED state. */
++
++ENTRY(__setcontext)
++ /* Save argument since syscall will destroy it. */
++ pushq %rdi
++ cfi_adjust_cfa_offset(8)
++
++ /* Set the signal mask with
++ rt_sigprocmask (SIG_SETMASK, mask, NULL, _NSIG/8). */
++ leaq oSIGMASK(%rdi), %rsi
++ xorl %edx, %edx
++ movl $SIG_SETMASK, %edi
++ movl $_NSIG8,%r10d
++ movl $__NR_rt_sigprocmask, %eax
++ syscall
++ popq %rdi /* Reload %rdi, adjust stack. */
++ cfi_adjust_cfa_offset(-8)
++ cmpq $-4095, %rax /* Check %rax for error. */
++ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
++
++ /* Restore the floating-point context. Not the registers, only the
++ rest. */
++ movq oFPREGS(%rdi), %rcx
++ fldenv (%rcx)
++ ldmxcsr oMXCSR(%rdi)
++
++
++ /* Load the new stack pointer, the preserved registers and
++ registers used for passing args. */
++ cfi_def_cfa(%rdi, 0)
++ cfi_offset(%rbx,oRBX)
++ cfi_offset(%rbp,oRBP)
++ cfi_offset(%r12,oR12)
++ cfi_offset(%r13,oR13)
++ cfi_offset(%r14,oR14)
++ cfi_offset(%r15,oR15)
++ cfi_offset(%rsp,oRSP)
++ cfi_offset(%rip,oRIP)
++
++ movq oRSP(%rdi), %rsp
++ movq oRBX(%rdi), %rbx
++ movq oRBP(%rdi), %rbp
++ movq oR12(%rdi), %r12
++ movq oR13(%rdi), %r13
++ movq oR14(%rdi), %r14
++ movq oR15(%rdi), %r15
++
++ /* The following ret should return to the address set with
++ getcontext. Therefore push the address on the stack. */
++ movq oRIP(%rdi), %rcx
++ pushq %rcx
++
++ movq oRSI(%rdi), %rsi
++ movq oRDX(%rdi), %rdx
++ movq oRCX(%rdi), %rcx
++ movq oR8(%rdi), %r8
++ movq oR9(%rdi), %r9
++
++ /* Setup finally %rdi. */
++ movq oRDI(%rdi), %rdi
++
++ /* End FDE here, we fall into another context. */
++ cfi_endproc
++ cfi_startproc
++
++ /* Clear rax to indicate success. */
++ xorl %eax, %eax
++L(pseudo_end):
++ ret
++PSEUDO_END(__setcontext)
++
++weak_alias (__setcontext, setcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/setjmp.S uClibc-git/libc/sysdeps/linux/x86_64/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+-#include <sysdep.h>
++#include <jmpbuf-offsets.h>
+
+ .global __sigsetjmp
+ .type __sigsetjmp,%function
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sigaction.c uClibc-git/libc/sysdeps/linux/x86_64/sigaction.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sigaction.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include <errno.h>
+@@ -30,9 +29,6 @@
+ /* We do not globally define the SA_RESTORER flag so do it here. */
+ #define SA_RESTORER 0x04000000
+
+-extern __typeof(sigaction) __libc_sigaction;
+-
+-
+ #ifdef __NR_rt_sigaction
+
+ /* Using the hidden attribute here does not change the code but it
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/__start_context.S uClibc-git/libc/sysdeps/linux/x86_64/__start_context.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/__start_context.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/__start_context.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,49 @@
++/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Andreas Jaeger <aj@suse.de>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++/* This is the helper code which gets called if a function which is
++ registered with 'makecontext' returns. In this case we have to
++ install the context listed in the uc_link element of the context
++ 'makecontext' manipulated at the time of the 'makecontext' call.
++ If the pointer is NULL the process must terminate. */
++
++
++ENTRY(__start_context)
++ /* This removes the parameters passed to the function given to
++ 'makecontext' from the stack. RBX contains the address
++ on the stack pointer for the next context. */
++ movq %rbx, %rsp
++
++ popq %rdi /* This is the next context. */
++ cfi_adjust_cfa_offset(-8)
++ testq %rdi, %rdi
++ je 2f /* If it is zero exit. */
++
++ call JUMPTARGET(__setcontext)
++ /* If this returns (which can happen if the syscall fails) we'll
++ exit the program with the return error value (-1). */
++ movq %rax,%rdi
++
++2:
++ call HIDDEN_JUMPTARGET(exit)
++ /* The 'exit' call should never return. In case it does cause
++ the process to terminate. */
++ hlt
++END(__start_context)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/swapcontext.S uClibc-git/libc/sysdeps/linux/x86_64/swapcontext.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/swapcontext.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/swapcontext.S 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,121 @@
++/* Save current context and install the given one.
++ Copyright (C) 2002-2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Andreas Jaeger <aj@suse.de>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++/* int __swapcontext (ucontext_t *oucp, const ucontext_t *ucp);
++
++ Saves the machine context in oucp such that when it is activated,
++ it appears as if __swapcontextt() returned again, restores the
++ machine context in ucp and thereby resumes execution in that
++ context.
++
++ This implementation is intended to be used for *synchronous* context
++ switches only. Therefore, it does not have to save anything
++ other than the PRESERVED state. */
++
++ENTRY(__swapcontext)
++ /* Save the preserved registers, the registers used for passing args,
++ and the return address. */
++ movq %rbx, oRBX(%rdi)
++ movq %rbp, oRBP(%rdi)
++ movq %r12, oR12(%rdi)
++ movq %r13, oR13(%rdi)
++ movq %r14, oR14(%rdi)
++ movq %r15, oR15(%rdi)
++
++ movq %rdi, oRDI(%rdi)
++ movq %rsi, oRSI(%rdi)
++ movq %rdx, oRDX(%rdi)
++ movq %rcx, oRCX(%rdi)
++ movq %r8, oR8(%rdi)
++ movq %r9, oR9(%rdi)
++
++ movq (%rsp), %rcx
++ movq %rcx, oRIP(%rdi)
++ leaq 8(%rsp), %rcx /* Exclude the return address. */
++ movq %rcx, oRSP(%rdi)
++
++ /* We have separate floating-point register content memory on the
++ stack. We use the __fpregs_mem block in the context. Set the
++ links up correctly. */
++ leaq oFPREGSMEM(%rdi), %rcx
++ movq %rcx, oFPREGS(%rdi)
++ /* Save the floating-point environment. */
++ fnstenv (%rcx)
++ stmxcsr oMXCSR(%rdi)
++
++
++ /* The syscall destroys some registers, save them. */
++ movq %rsi, %r12
++
++ /* Save the current signal mask and install the new one with
++ rt_sigprocmask (SIG_BLOCK, newset, oldset,_NSIG/8). */
++ leaq oSIGMASK(%rdi), %rdx
++ leaq oSIGMASK(%rsi), %rsi
++ movl $SIG_SETMASK, %edi
++ movl $_NSIG8,%r10d
++ movl $__NR_rt_sigprocmask, %eax
++ syscall
++ cmpq $-4095, %rax /* Check %rax for error. */
++ jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
++
++ /* Restore destroyed registers. */
++ movq %r12, %rsi
++
++ /* Restore the floating-point context. Not the registers, only the
++ rest. */
++ movq oFPREGS(%rsi), %rcx
++ fldenv (%rcx)
++ ldmxcsr oMXCSR(%rsi)
++
++ /* Load the new stack pointer and the preserved registers. */
++ movq oRSP(%rsi), %rsp
++ movq oRBX(%rsi), %rbx
++ movq oRBP(%rsi), %rbp
++ movq oR12(%rsi), %r12
++ movq oR13(%rsi), %r13
++ movq oR14(%rsi), %r14
++ movq oR15(%rsi), %r15
++
++ /* The following ret should return to the address set with
++ getcontext. Therefore push the address on the stack. */
++ movq oRIP(%rsi), %rcx
++ pushq %rcx
++
++ /* Setup registers used for passing args. */
++ movq oRDI(%rsi), %rdi
++ movq oRDX(%rsi), %rdx
++ movq oRCX(%rsi), %rcx
++ movq oR8(%rsi), %r8
++ movq oR9(%rsi), %r9
++
++ /* Setup finally %rsi. */
++ movq oRSI(%rsi), %rsi
++
++ /* Clear rax to indicate success. */
++ xorl %eax, %eax
++L(pseudo_end):
++ ret
++PSEUDO_END(__swapcontext)
++
++weak_alias (__swapcontext, swapcontext)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/debugreg.h uClibc-git/libc/sysdeps/linux/x86_64/sys/debugreg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/debugreg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/debugreg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_DEBUGREG_H
+ #define _SYS_DEBUGREG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/io.h uClibc-git/libc/sysdeps/linux/x86_64/sys/io.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/io.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/io.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IO_H
+ #define _SYS_IO_H 1
+@@ -23,6 +22,7 @@
+
+ __BEGIN_DECLS
+
++#if defined __UCLIBC_LINUX_SPECIFIC__
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges.
+@@ -32,12 +32,12 @@
+ E.g., Linux/Alpha for Alpha PCs supports this. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to
+ access any I/O port is granted. This call requires root
+ privileges. */
+ extern int iopl (int __level) __THROW;
++#endif /* __UCLIBC_LINUX_SPECIFIC__ */
+
+ #if defined __GNUC__ && __GNUC__ >= 2
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/perm.h uClibc-git/libc/sysdeps/linux/x86_64/sys/perm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/perm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/perm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PERM_H
+
+@@ -26,7 +25,6 @@
+ /* Set port input/output permissions. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+-libc_hidden_proto(ioperm)
+
+
+ /* Change I/O privilege level. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/procfs.h uClibc-git/libc/sysdeps/linux/x86_64/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/reg.h uClibc-git/libc/sysdeps/linux/x86_64/sys/reg.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/reg.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/reg.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_REG_H
+ #define _SYS_REG_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/ucontext.h uClibc-git/libc/sysdeps/linux/x86_64/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/user.h uClibc-git/libc/sysdeps/linux/x86_64/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sys/user.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/syscall.S uClibc-git/libc/sysdeps/linux/x86_64/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Please consult the file sysdeps/unix/sysv/linux/x86-64/sysdep.h for
+ more information about the value -4095 used below. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sysdep.h uClibc-git/libc/sysdeps/linux/x86_64/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINUX_X86_64_SYSDEP_H
+ #define _LINUX_X86_64_SYSDEP_H 1
+@@ -183,8 +182,6 @@
+ # define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
+-# define ret_ERRVAL ret
+-
+ # ifndef __PIC__
+ # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
+ # elif defined(RTLD_PRIVATE_ERRNO)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/ucontext_i.sym uClibc-git/libc/sysdeps/linux/x86_64/ucontext_i.sym
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/ucontext_i.sym 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/x86_64/ucontext_i.sym 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,37 @@
++#include <stddef.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++
++--
++
++SIG_BLOCK
++SIG_SETMASK
++
++_NSIG8 (_NSIG / 8)
++
++#define ucontext(member) offsetof (ucontext_t, member)
++#define mcontext(member) ucontext (uc_mcontext.member)
++#define mreg(reg) mcontext (gregs[REG_##reg])
++
++oRBP mreg (RBP)
++oRSP mreg (RSP)
++oRBX mreg (RBX)
++oR8 mreg (R8)
++oR9 mreg (R9)
++oR10 mreg (R10)
++oR11 mreg (R11)
++oR12 mreg (R12)
++oR13 mreg (R13)
++oR14 mreg (R14)
++oR15 mreg (R15)
++oRDI mreg (RDI)
++oRSI mreg (RSI)
++oRDX mreg (RDX)
++oRAX mreg (RAX)
++oRCX mreg (RCX)
++oRIP mreg (RIP)
++oEFL mreg (EFL)
++oFPREGS mcontext (fpregs)
++oSIGMASK ucontext (uc_sigmask)
++oFPREGSMEM ucontext (__fpregs_mem)
++oMXCSR ucontext (__fpregs_mem.mxcsr)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/vfork.S uClibc-git/libc/sysdeps/linux/x86_64/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/x86_64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/x86_64/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/syscall.h>
+
+@@ -63,4 +62,4 @@
+ .size __vfork,.-__vfork
+
+ weak_alias(__vfork,vfork)
+-libc_hidden_weak(vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/atomic.h uClibc-git/libc/sysdeps/linux/xtensa/bits/atomic.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/atomic.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/atomic.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,232 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef _BITS_ATOMIC_H
++#define _BITS_ATOMIC_H 1
++
++#include <inttypes.h>
++
++typedef int32_t atomic32_t;
++typedef uint32_t uatomic32_t;
++typedef int_fast32_t atomic_fast32_t;
++typedef uint_fast32_t uatomic_fast32_t;
++
++typedef int64_t atomic64_t;
++typedef uint64_t uatomic64_t;
++typedef int_fast64_t atomic_fast64_t;
++typedef uint_fast64_t uatomic_fast64_t;
++
++typedef intptr_t atomicptr_t;
++typedef uintptr_t uatomicptr_t;
++typedef intmax_t atomic_max_t;
++typedef uintmax_t uatomic_max_t;
++
++
++/* Xtensa has only a 32-bit form of a store-conditional instruction. */
++
++#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
++ (abort (), 0)
++
++#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \
++ (abort (), 0)
++
++#define __arch_compare_and_exchange_bool_8_rel(mem, newval, oldval) \
++ (abort (), 0)
++
++#define __arch_compare_and_exchange_bool_16_rel(mem, newval, oldval) \
++ (abort (), 0)
++
++/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL.
++ Return the old *MEM value. */
++
++#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
++ ({__typeof__(*(mem)) __tmp, __value; \
++ __asm__ __volatile__( \
++ "1: l32i %1, %2, 0 \n" \
++ " bne %1, %4, 2f \n" \
++ " wsr %1, SCOMPARE1 \n" \
++ " mov %0, %1 \n" \
++ " mov %1, %3 \n" \
++ " s32c1i %1, %2, 0 \n" \
++ " bne %0, %1, 1b \n" \
++ "2: \n" \
++ : "=&a" (__value), "=&a" (__tmp) \
++ : "a" (mem), "a" (newval), "a" (oldval) \
++ : "memory" ); \
++ __tmp; \
++ })
++
++/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL.
++ Return zero if *MEM was changed or non-zero if no exchange happened. */
++
++#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
++ ({__typeof__(*(mem)) __tmp, __value; \
++ __asm__ __volatile__( \
++ "1: l32i %0, %2, 0 \n" \
++ " sub %1, %4, %0 \n" \
++ " bnez %1, 2f \n" \
++ " wsr %0, SCOMPARE1 \n" \
++ " mov %1, %3 \n" \
++ " s32c1i %1, %2, 0 \n" \
++ " bne %0, %1, 1b \n" \
++ " movi %1, 0 \n" \
++ "2: \n" \
++ : "=&a" (__value), "=&a" (__tmp) \
++ : "a" (mem), "a" (newval), "a" (oldval) \
++ : "memory" ); \
++ __tmp != 0; \
++ })
++
++/* Store NEWVALUE in *MEM and return the old value. */
++
++#define __arch_exchange_32_acq(mem, newval) \
++ ({__typeof__(*(mem)) __tmp, __value; \
++ __asm__ __volatile__( \
++ "1: l32i %0, %2, 0 \n" \
++ " wsr %0, SCOMPARE1 \n" \
++ " mov %1, %3 \n" \
++ " s32c1i %1, %2, 0 \n" \
++ " bne %0, %1, 1b \n" \
++ : "=&a" (__value), "=&a" (__tmp) \
++ : "a" (mem), "a" (newval) \
++ : "memory" ); \
++ __tmp; \
++ })
++
++/* Add VALUE to *MEM and return the old value of *MEM. */
++
++#define __arch_atomic_exchange_and_add_32(mem, value) \
++ ({__typeof__(*(mem)) __tmp, __value; \
++ __asm__ __volatile__( \
++ "1: l32i %0, %2, 0 \n" \
++ " wsr %0, SCOMPARE1 \n" \
++ " add %1, %0, %3 \n" \
++ " s32c1i %1, %2, 0 \n" \
++ " bne %0, %1, 1b \n" \
++ : "=&a" (__value), "=&a" (__tmp) \
++ : "a" (mem), "a" (value) \
++ : "memory" ); \
++ __tmp; \
++ })
++
++/* Subtract VALUE from *MEM and return the old value of *MEM. */
++
++#define __arch_atomic_exchange_and_sub_32(mem, value) \
++ ({__typeof__(*(mem)) __tmp, __value; \
++ __asm__ __volatile__( \
++ "1: l32i %0, %2, 0 \n" \
++ " wsr %0, SCOMPARE1 \n" \
++ " sub %1, %0, %3 \n" \
++ " s32c1i %1, %2, 0 \n" \
++ " bne %0, %1, 1b \n" \
++ : "=&a" (__value), "=&a" (__tmp) \
++ : "a" (mem), "a" (value) \
++ : "memory" ); \
++ __tmp; \
++ })
++
++/* Decrement *MEM if it is > 0, and return the old value. */
++
++#define __arch_atomic_decrement_if_positive_32(mem) \
++ ({__typeof__(*(mem)) __tmp, __value; \
++ __asm__ __volatile__( \
++ "1: l32i %0, %2, 0 \n" \
++ " blti %0, 1, 2f \n" \
++ " wsr %0, SCOMPARE1 \n" \
++ " addi %1, %0, -1 \n" \
++ " s32c1i %1, %2, 0 \n" \
++ " bne %0, %1, 1b \n" \
++ "2: \n" \
++ : "=&a" (__value), "=&a" (__tmp) \
++ : "a" (mem) \
++ : "memory" ); \
++ __value; \
++ })
++
++
++/* These are the preferred public interfaces: */
++
++#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
++ ({ \
++ if (sizeof (*mem) != 4) \
++ abort(); \
++ __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \
++ })
++
++#define atomic_exchange_acq(mem, newval) \
++ ({ \
++ if (sizeof(*(mem)) != 4) \
++ abort(); \
++ __arch_exchange_32_acq(mem, newval); \
++ })
++
++#define atomic_exchange_and_add(mem, newval) \
++ ({ \
++ if (sizeof(*(mem)) != 4) \
++ abort(); \
++ __arch_atomic_exchange_and_add_32(mem, newval); \
++ })
++
++#define atomic_exchange_and_sub(mem, newval) \
++ ({ \
++ if (sizeof(*(mem)) != 4) \
++ abort(); \
++ __arch_atomic_exchange_and_sub_32(mem, newval); \
++ })
++
++#define atomic_decrement_if_positive(mem) \
++ ({ \
++ if (sizeof(*(mem)) != 4) \
++ abort(); \
++ __arch_atomic_decrement_if_positive_32(mem); \
++ })
++
++
++# define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
++ (abort (), 0)
++
++# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
++ (abort (), (__typeof (*mem)) 0)
++
++# define __arch_compare_and_exchange_bool_64_rel(mem, newval, oldval) \
++ (abort (), 0)
++
++# define __arch_compare_and_exchange_val_64_rel(mem, newval, oldval) \
++ (abort (), (__typeof (*mem)) 0)
++
++# define __arch_atomic_exchange_64_acq(mem, value) \
++ ({ abort (); (*mem) = (value); })
++
++# define __arch_atomic_exchange_64_rel(mem, value) \
++ ({ abort (); (*mem) = (value); })
++
++# define __arch_atomic_exchange_and_add_64(mem, value) \
++ ({ abort (); (*mem) = (value); })
++
++# define __arch_atomic_increment_val_64(mem) \
++ ({ abort (); (*mem)++; })
++
++# define __arch_atomic_decrement_val_64(mem) \
++ ({ abort (); (*mem)--; })
++
++# define __arch_atomic_decrement_if_positive_64(mem) \
++ ({ abort (); (*mem)--; })
++
++
++
++#endif /* _BITS_ATOMIC_H */
++
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/fcntl.h uClibc-git/libc/sysdeps/linux/xtensa/bits/fcntl.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/fcntl.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/fcntl.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/ipc.h uClibc-git/libc/sysdeps/linux/xtensa/bits/ipc.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/ipc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/ipc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_IPC_H
+ # error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/kernel_types.h uClibc-git/libc/sysdeps/linux/xtensa/bits/kernel_types.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/kernel_types.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/kernel_types.h 2014-02-03 12:32:56.000000000 +0100
+@@ -33,6 +33,8 @@
+ typedef unsigned short __kernel_old_uid_t;
+ typedef unsigned short __kernel_old_gid_t;
+ typedef unsigned short __kernel_old_dev_t;
++typedef long __kernel_long_t;
++typedef unsigned long __kernel_ulong_t;
+ typedef long long __kernel_loff_t;
+
+ /* Beginning in 2.6 kernels, which is the first version that includes the
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/mathdef.h uClibc-git/libc/sysdeps/linux/xtensa/bits/mathdef.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/mathdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/mathdef.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if !defined _MATH_H && !defined _COMPLEX_H
+ # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/mman.h uClibc-git/libc/sysdeps/linux/xtensa/bits/mman.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/mman.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/mman.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+@@ -64,7 +63,7 @@
+ # define MAP_NORESERVE 0x0400 /* Don't check for reservations. */
+ # define MAP_POPULATE 0x10000 /* Populate (prefault) pagetables. */
+ # define MAP_NONBLOCK 0x20000 /* Do not block on IO. */
+-# define MAP_UNINITIALIZE 0x4000000 /* For anonymous mmap, memory could
++# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could
+ be uninitialized. */
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/msq.h uClibc-git/libc/sysdeps/linux/xtensa/bits/msq.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/msq.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/msq.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_MSG_H
+ # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/setjmp.h uClibc-git/libc/sysdeps/linux/xtensa/bits/setjmp.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/setjmp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/setjmp.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Define the machine-dependent type `jmp_buf'. Xtensa version. */
+ #ifndef _BITS_SETJMP_H
+@@ -30,17 +29,6 @@
+ subsequent alloca in proc moves $sp), and the return address within
+ proc. Everything else is saved on the stack in the normal save areas. */
+
+-#ifndef _ASM
+ typedef int __jmp_buf[17];
+-#endif
+-
+-#define JB_SP 1
+-#define JB_PC 16
+-
+-/* Test if longjmp to JMPBUF would unwind the frame containing a local
+- variable at ADDRESS. */
+-
+-#define _JMPBUF_UNWINDS(jmpbuf, address) \
+- ((void *) (address) < (void *) (jmpbuf)[JB_SP])
+
+ #endif /* bits/setjmp.h */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/shm.h uClibc-git/libc/sysdeps/linux/xtensa/bits/shm.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/shm.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/shm.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_SHM_H
+ # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/sigcontext.h uClibc-git/libc/sysdeps/linux/xtensa/bits/sigcontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/sigcontext.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/sigcontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
++# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
++#endif
++
++#ifndef _BITS_SIGCONTEXT_H
++#define _BITS_SIGCONTEXT_H 1
++
++struct sigcontext
++{
++ unsigned long sc_pc;
++ unsigned long sc_ps;
++ unsigned long sc_lbeg;
++ unsigned long sc_lend;
++ unsigned long sc_lcount;
++ unsigned long sc_sar;
++ unsigned long sc_acclo;
++ unsigned long sc_acchi;
++ unsigned long sc_a[16];
++ void *sc_xtregs;
++};
++
++#endif /* _BITS_SIGCONTEXT_H */
++
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/sigcontextinfo.h uClibc-git/libc/sysdeps/linux/xtensa/bits/sigcontextinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/sigcontextinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/sigcontextinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Also see register-dump.h, where we spill live registers to the
+ stack so that we can trace the stack backward. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/stackinfo.h uClibc-git/libc/sysdeps/linux/xtensa/bits/stackinfo.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/stackinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/stackinfo.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/stat.h uClibc-git/libc/sysdeps/linux/xtensa/bits/stat.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/stat.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/stat.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_STAT_H
+ # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/uClibc_arch_features.h uClibc-git/libc/sysdeps/linux/xtensa/bits/uClibc_arch_features.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/uClibc_arch_features.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/uClibc_arch_features.h 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ /* can your target use syscall6() for mmap ? */
+ #define __UCLIBC_MMAP_HAS_6_ARGS__
+
+-/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+-#define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
++/* does your target align 64bit values in register pairs ? (32bit arches only) */
++#define __UCLIBC_SYSCALL_ALIGN_64BIT__
+
+ /* does your target have a broken create_module() ? */
+ #undef __UCLIBC_BROKEN_CREATE_MODULE__
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/uClibc_page.h uClibc-git/libc/sysdeps/linux/xtensa/bits/uClibc_page.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/uClibc_page.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/uClibc_page.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,31 +0,0 @@
+-/* Copyright (C) 2004 Erik Andersen
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * The GNU C Library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with the GNU C Library; if not, write to the Free
+- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- * 02111-1307 USA.
+- */
+-
+-/* Supply an architecture specific value for PAGE_SIZE and friends. */
+-
+-#ifndef _UCLIBC_PAGE_H
+-#define _UCLIBC_PAGE_H
+-
+-#include <bits/xtensa-config.h>
+-
+-/* PAGE_SHIFT determines the page size -- in this case 4096 */
+-#define PAGE_SHIFT XCHAL_MMU_MIN_PTE_PAGE_SIZE
+-#define PAGE_SIZE (1UL << PAGE_SHIFT)
+-#define PAGE_MASK (~(PAGE_SIZE-1))
+-
+-#endif /* _UCLIBC_PAGE_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/wordsize.h uClibc-git/libc/sysdeps/linux/xtensa/bits/wordsize.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/wordsize.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/wordsize.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __WORDSIZE 32
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/xtensa-config.h uClibc-git/libc/sysdeps/linux/xtensa/bits/xtensa-config.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/bits/xtensa-config.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/bits/xtensa-config.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef XTENSA_CONFIG_H
+ #define XTENSA_CONFIG_H
+@@ -44,10 +43,4 @@
+ #undef XCHAL_NUM_AREGS
+ #define XCHAL_NUM_AREGS 64
+
+-/* Set a default page size. This is currently needed when bootstrapping
+- the runtime linker. See comments in dl-machine.h where this is used. */
+-
+-#undef XCHAL_MMU_MIN_PTE_PAGE_SIZE
+-#define XCHAL_MMU_MIN_PTE_PAGE_SIZE 12
+-
+ #endif /* !XTENSA_CONFIG_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/brk.c uClibc-git/libc/sysdeps/linux/xtensa/brk.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/brk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/brk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/clone.S uClibc-git/libc/sysdeps/linux/xtensa/clone.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/clone.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/clone.S 2014-02-03 12:32:56.000000000 +0100
+@@ -11,9 +11,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* clone is even more special than fork as it mucks with stacks
+ and invokes a function in the right context after it's all over. */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/crt1.S uClibc-git/libc/sysdeps/linux/xtensa/crt1.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/crt1.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/crt1.S 2014-02-03 12:32:56.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/fork.c uClibc-git/libc/sysdeps/linux/xtensa/fork.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/fork.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,19 +7,19 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <unistd.h>
+-#include <sys/syscall.h>
+-#define _SIGNAL_H
+-#include <bits/signum.h>
+
+ /* Xtensa doesn't provide a 'fork' system call, so we use 'clone'. */
++#include <sys/syscall.h>
+
+-extern __typeof(fork) __libc_fork;
++#if defined __NR_clone && defined __ARCH_USE_MMU__
++# include <unistd.h>
++# include <signal.h>
++# include <cancel.h>
+
+-libc_hidden_proto(fork)
+-pid_t __libc_fork(void)
++pid_t fork(void)
+ {
+ return (pid_t) INLINE_SYSCALL(clone, 2, SIGCHLD, 0);
+ }
+-weak_alias(__libc_fork, fork)
+-libc_hidden_weak(fork)
++lt_strong_alias(fork)
++lt_libc_hidden(fork)
++#endif
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/jmpbuf-offsets.h uClibc-git/libc/sysdeps/linux/xtensa/jmpbuf-offsets.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/xtensa/jmpbuf-offsets.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,20 @@
++/* Private macros for accessing __jmp_buf contents. Xtensa version.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#define JB_SP 1
++#define JB_PC 16
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h uClibc-git/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/xtensa/jmpbuf-unwind.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,25 @@
++/* Copyright (C) 1997, 1998, 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++
++#include <setjmp.h>
++#include <jmpbuf-offsets.h>
++
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_SP])
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/__longjmp.S uClibc-git/libc/sysdeps/linux/xtensa/__longjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/__longjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/__longjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This implementation relies heavily on the Xtensa register window
+ mechanism. Setjmp flushes all the windows except its own to the
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/Makefile.arch uClibc-git/libc/sysdeps/linux/xtensa/Makefile.arch
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -5,11 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c fork.c pread_write.c sigaction.c __syscall_error.c
++CSRC-y := brk.c fork.c sigaction.c __syscall_error.c
+
+-ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
+- CSRC += posix_fadvise.c posix_fadvise64.c
+-endif
+-
+-SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S \
++SSRC-y := bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S \
+ sigrestorer.S syscall.S mmap.S windowspill.S __longjmp.S vfork.S
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/mmap.S uClibc-git/libc/sysdeps/linux/xtensa/mmap.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/mmap.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/mmap.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+ #include <sys/syscall.h>
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/posix_fadvise64.c uClibc-git/libc/sysdeps/linux/xtensa/posix_fadvise64.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/posix_fadvise64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/posix_fadvise64.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,39 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * posix_fadvise64() for Xtensa uClibc
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- * Copyright (C) 2007 Tensilica Inc.
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <features.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <endian.h>
+-#include <stdint.h>
+-#include <sys/types.h>
+-#include <sys/syscall.h>
+-#include <fcntl.h>
+-
+-#ifdef __UCLIBC_HAS_LFS__
+-
+-int posix_fadvise64 (int fd, __off64_t offset, __off64_t len, int advice)
+-{
+-#ifdef __NR_fadvise64_64
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, advice,
+- __LONG_LONG_PAIR ((long) (offset >> 32),
+- (long) offset),
+- __LONG_LONG_PAIR ((long) (len >> 32),
+- (long) len));
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+-#else
+- return ENOSYS;
+-#endif
+-}
+-
+-#endif /* __UCLIBC_HAS_LFS__ */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/posix_fadvise.c uClibc-git/libc/sysdeps/linux/xtensa/posix_fadvise.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/posix_fadvise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/posix_fadvise.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,29 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * posix_fadvise() for Xtensa uClibc
+- *
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- * Copyright (C) 2007 Tensilica Inc.
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-
+-#include <sys/syscall.h>
+-#include <fcntl.h>
+-
+-int posix_fadvise (int fd, off_t offset, off_t len, int advice)
+-{
+-#ifdef __NR_fadvise64_64
+- INTERNAL_SYSCALL_DECL (err);
+- int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, advice,
+- __LONG_LONG_PAIR ((long) (offset >> 31),
+- (long) offset),
+- __LONG_LONG_PAIR ((long) (len >> 31),
+- (long) len));
+- if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+- return 0;
+- return INTERNAL_SYSCALL_ERRNO (ret, err);
+-#else
+- return ENOSYS;
+-#endif
+-}
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/pread_write.c uClibc-git/libc/sysdeps/linux/xtensa/pread_write.c
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/pread_write.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/pread_write.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,189 +0,0 @@
+-/* vi: set sw=4 ts=4: */
+-/*
+- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
+- *
+- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+- */
+-/*
+- * Based in part on the files
+- * ./sysdeps/unix/sysv/linux/pwrite.c,
+- * ./sysdeps/unix/sysv/linux/pread.c,
+- * sysdeps/posix/pread.c
+- * sysdeps/posix/pwrite.c
+- * from GNU libc 2.2.5, but reworked considerably...
+- */
+-
+-#include <sys/syscall.h>
+-#include <unistd.h>
+-#include <stdint.h>
+-#include <endian.h>
+-
+-extern __typeof(pread) __libc_pread;
+-extern __typeof(pwrite) __libc_pwrite;
+-#ifdef __UCLIBC_HAS_LFS__
+-extern __typeof(pread64) __libc_pread64;
+-extern __typeof(pwrite64) __libc_pwrite64;
+-#endif
+-
+-#include <bits/kernel_types.h>
+-
+-#ifdef __NR_pread
+-
+-# define __NR___syscall_pread __NR_pread
+-/* On Xtensa, 64-bit values are aligned in even/odd register pairs. */
+-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf,
+- size_t, count, int, pad, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset));
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(high, low));
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-
+-#endif /* __NR_pread */
+-
+-#ifdef __NR_pwrite
+-
+-# define __NR___syscall_pwrite __NR_pwrite
+-/* On Xtensa, 64-bit values are aligned in even/odd register pairs. */
+-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf,
+- size_t, count, int, pad, off_t, offset_hi, off_t, offset_lo)
+-
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- return __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset));
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- uint32_t low = offset & 0xffffffff;
+- uint32_t high = offset >> 32;
+- return __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(high, low));
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* __NR_pwrite */
+-
+-#if ! defined __NR_pread || ! defined __NR_pwrite
+-
+-static ssize_t __fake_pread_write(int fd, void *buf,
+- size_t count, off_t offset, int do_pwrite)
+-{
+- int save_errno;
+- ssize_t result;
+- off_t old_offset;
+-
+- /* Since we must not change the file pointer preserve the
+- * value so that we can restore it later. */
+- if ((old_offset=lseek(fd, 0, SEEK_CUR)) == (off_t) -1)
+- return -1;
+-
+- /* Set to wanted position. */
+- if (lseek(fd, offset, SEEK_SET) == (off_t) -1)
+- return -1;
+-
+- if (do_pwrite == 1) {
+- /* Write the data. */
+- result = write(fd, buf, count);
+- } else {
+- /* Read the data. */
+- result = read(fd, buf, count);
+- }
+-
+- /* Now we have to restore the position. If this fails we
+- * have to return this as an error. */
+- save_errno = errno;
+- if (lseek(fd, old_offset, SEEK_SET) == (off_t) -1)
+- {
+- if (result == -1)
+- __set_errno(save_errno);
+- return -1;
+- }
+- __set_errno(save_errno);
+- return(result);
+-}
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-
+-static ssize_t __fake_pread_write64(int fd, void *buf,
+- size_t count, off64_t offset, int do_pwrite)
+-{
+- int save_errno;
+- ssize_t result;
+- off64_t old_offset;
+-
+- /* Since we must not change the file pointer preserve the
+- * value so that we can restore it later. */
+- if ((old_offset=lseek64(fd, 0, SEEK_CUR)) == (off64_t) -1)
+- return -1;
+-
+- /* Set to wanted position. */
+- if (lseek64(fd, offset, SEEK_SET) == (off64_t) -1)
+- return -1;
+-
+- if (do_pwrite == 1) {
+- /* Write the data. */
+- result = write(fd, buf, count);
+- } else {
+- /* Read the data. */
+- result = read(fd, buf, count);
+- }
+-
+- /* Now we have to restore the position. */
+- save_errno = errno;
+- if (lseek64(fd, old_offset, SEEK_SET) == (off64_t) -1) {
+- if (result == -1)
+- __set_errno (save_errno);
+- return -1;
+- }
+- __set_errno (save_errno);
+- return result;
+-}
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! defined __NR_pread || ! defined __NR_pwrite */
+-
+-#ifndef __NR_pread
+-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset)
+-{
+- return __fake_pread_write(fd, buf, count, offset, 0);
+-}
+-weak_alias(__libc_pread,pread)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset)
+-{
+- return __fake_pread_write64(fd, buf, count, offset, 0);
+-}
+-weak_alias(__libc_pread64,pread64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! __NR_pread */
+-
+-#ifndef __NR_pwrite
+-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset)
+-{
+- /* we won't actually be modifying the buffer,
+- *just cast it to get rid of warnings */
+- return __fake_pread_write(fd, (void*)buf, count, offset, 1);
+-}
+-weak_alias(__libc_pwrite,pwrite)
+-
+-# ifdef __UCLIBC_HAS_LFS__
+-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset)
+-{
+- return __fake_pread_write64(fd, (void*)buf, count, offset, 1);
+-}
+-weak_alias(__libc_pwrite64,pwrite64)
+-# endif /* __UCLIBC_HAS_LFS__ */
+-#endif /* ! __NR_pwrite */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/setjmp.S uClibc-git/libc/sysdeps/linux/xtensa/setjmp.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/setjmp.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/setjmp.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This implementation relies heavily on the Xtensa register window
+ mechanism. Setjmp flushes all the windows except its own to the
+@@ -25,24 +24,52 @@
+ then sets things up so that it will return to the right place,
+ using a window underflow to automatically restore the registers.
+
+- Note that it would probably be sufficient to only copy the
+- registers from setjmp's caller into jmp_buf. However, we also copy
+- the save area located at the stack pointer of setjmp's caller.
+- This save area will typically remain intact until the longjmp call.
+- The one exception is when there is an intervening alloca in
+- setjmp's caller. This is certainly an unusual situation and is
+- likely to cause problems in any case (the storage allocated on the
+- stack cannot be safely accessed following the longjmp). As bad as
+- it is, on most systems this situation would not necessarily lead to
+- a catastrophic failure. If we did not preserve the extra save area
+- on Xtensa, however, it would. When setjmp's caller returns after a
+- longjmp, there will be a window underflow; an invalid return
+- address or stack pointer in the save area will almost certainly
+- lead to a crash. Keeping a copy of the extra save area in the
+- jmp_buf avoids this with only a small additional cost. If setjmp
+- and longjmp are ever time-critical, this could be removed. */
++ Note that we also save the area located just below the stack pointer
++ of the caller. This save area could get overwritten by alloca
++ following the call to setjmp. The alloca moves the stack pointer
++ to allocate memory on the stack. This newly allocated memory
++ includes(!) the original save area (alloca copies the save area
++ before it moves that stack pointer).
++
++
++ previous caller SP -> |------------------------------| <-----+
++ | caller-2 registers a0-a3 | | p
++ |------------------------------| | o
++ | caller registers a4-a8/a12 | | i
++ |------------------------------| | n
++ | caller local stack | | t
++ caller SP -> |------------------------------| <-+ | s
++ | caller-1 registers a0-a3 | -:---+
++ callee (setjmp) SP -> |==============================| |
++ | caller registers a0-a3 | --+
++ |------------------------------|
++
++ In case of an alloca, registers a0-a3 of the previous caller (caller-1)
++ are copied (*), and the original location get likely overwritten.
++
++ previous caller SP -> |------------------------------| <-----+
++ | caller-2 registers a0-a3 | | p
++ |------------------------------| | o
++ | caller registers a4-a8/a12 | | i
++ |------------------------------| | n
++ | caller local stack | | t
++ caller SP before alloca-> |------------------------------| | s
++ | alloca area (overwrites old | |
++ | copy of caller-1 registers) | |
++ caller SP after alloca -> |------------------------------| <-+ |
++ | caller-1 registers a0-a3 (*) | -:---+
++ callee (setjmp) SP -> |==============================| |
++ | caller registers a0-a3 | --+
++ |------------------------------|
++
++ So, when longcall returns to the original caller SP, it also needs
++ to restore the save area below the SP.
++
++ */
+
+ #include "sysdep.h"
++
++/* NOTE: The ENTRY macro must allocate exactly 16 bytes (entry a1, 16) */
+
+ /* int setjmp (a2 = jmp_buf env) */
+
+@@ -57,8 +84,7 @@
+ j 1f
+ END (setjmp)
+
+-/* int __sigsetjmp (a2 = jmp_buf env,
+- a3 = int savemask) */
++/* int __sigsetjmp (a2 = jmp_buf env, a3 = int savemask) */
+
+ ENTRY (__sigsetjmp)
+ 1:
+@@ -66,61 +92,56 @@
+ movi a4, __window_spill
+ callx4 a4
+
+- /* Preserve the second argument (savemask) in a15. The selection
+- of a15 is arbitrary, except it's otherwise unused. There is no
+- risk of triggering a window overflow since we just returned
+- from __window_spill(). */
+- mov a15, a3
+-
+- /* Copy the register save area at (sp - 16). */
+- addi a5, a1, -16
+- l32i a3, a5, 0
+- l32i a4, a5, 4
+- s32i a3, a2, 0
+- s32i a4, a2, 4
+- l32i a3, a5, 8
+- l32i a4, a5, 12
+- s32i a3, a2, 8
+- s32i a4, a2, 12
+-
+- /* Copy 0-8 words from the register overflow area. */
+- extui a3, a0, 30, 2
+- blti a3, 2, .Lendsj
+- l32i a7, a1, 4
+- slli a4, a3, 4
+- sub a5, a7, a4
+- addi a6, a2, 16
+- addi a7, a7, -16 /* a7 = end of register overflow area */
++ /* Copy the caller register a0-a3 at (sp - 16) to jmpbuf. */
++ addi a7, a1, -16
++ l32i a4, a7, 0
++ l32i a5, a7, 4
++ s32i a4, a2, 0
++ s32i a5, a2, 4
++ l32i a4, a7, 8
++ l32i a5, a7, 12
++ s32i a4, a2, 8
++ s32i a5, a2, 12
++
++ /* Copy the caller registers a4-a8/a12 from the overflow area. */
++ /* Note that entry moved the SP by 16B, so SP of caller-1 is at 4(sp) */
++ extui a7, a0, 30, 2
++ blti a7, 2, .Lendsj
++ l32i a8, a1, 4 /* a8: SP of 'caller-1' */
++ slli a4, a7, 4
++ sub a6, a8, a4
++ addi a5, a2, 16
++ addi a8, a8, -16 /* a8: end of register overflow area */
+ .Lsjloop:
+- l32i a3, a5, 0
+- l32i a4, a5, 4
+- s32i a3, a6, 0
+- s32i a4, a6, 4
+- l32i a3, a5, 8
+- l32i a4, a5, 12
+- s32i a3, a6, 8
+- s32i a4, a6, 12
+- addi a5, a5, 16
++ l32i a7, a6, 0
++ l32i a4, a6, 4
++ s32i a7, a5, 0
++ s32i a4, a5, 4
++ l32i a7, a6, 8
++ l32i a4, a6, 12
++ s32i a7, a5, 8
++ s32i a4, a5, 12
++ addi a5, a6, 16
+ addi a6, a6, 16
+- blt a5, a7, .Lsjloop
++ blt a6, a8, .Lsjloop
+ .Lendsj:
+
+- /* Copy the register save area at sp. */
+- l32i a3, a1, 0
+- l32i a4, a1, 4
+- s32i a3, a2, 48
+- s32i a4, a2, 52
+- l32i a3, a1, 8
+- l32i a4, a1, 12
+- s32i a3, a2, 56
+- s32i a4, a2, 60
++ /* Copy previous caller registers (this is assuming 'entry a1,16') */
++ l32i a4, a1, 0
++ l32i a5, a1, 4
++ s32i a4, a2, 48
++ s32i a5, a2, 52
++ l32i a4, a1, 8
++ l32i a5, a1, 12
++ s32i a4, a2, 56
++ s32i a5, a2, 60
+
+ /* Save the return address, including the window size bits. */
+ s32i a0, a2, 64
+
+- /* a2 still addresses jmp_buf. a15 contains savemask. */
++ /* a2 still points to jmp_buf. a3 contains savemask. */
+ mov a6, a2
+- mov a7, a15
++ mov a7, a3
+ movi a3, __sigjmp_save
+ callx4 a3
+ mov a2, a6
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/procfs.h uClibc-git/libc/sysdeps/linux/xtensa/sys/procfs.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/procfs.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/sys/procfs.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_PROCFS_H
+ #define _SYS_PROCFS_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/ptrace.h uClibc-git/libc/sysdeps/linux/xtensa/sys/ptrace.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/ptrace.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/sys/ptrace.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,156 +0,0 @@
+-/* `ptrace' debugger support interface. Linux version.
+- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007
+- Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
+-
+-#ifndef _SYS_PTRACE_H
+-#define _SYS_PTRACE_H 1
+-
+-#include <features.h>
+-
+-/* Kludge away careless namespace pollution from the kernel. */
+-
+-#undef PTRACE_GETREGS
+-#undef PTRACE_SETREGS
+-#undef PTRACE_GETFPREGS
+-#undef PTRACE_SETFPREGS
+-#undef PTRACE_GETFPREGSIZE
+-
+-
+-__BEGIN_DECLS
+-
+-/* Type of the REQUEST argument to `ptrace.' */
+-enum __ptrace_request
+-{
+- /* Indicate that the process making this request should be traced.
+- All signals received by this process can be intercepted by its
+- parent, and its parent can use the other `ptrace' requests. */
+- PTRACE_TRACEME = 0,
+-#define PT_TRACE_ME PTRACE_TRACEME
+-
+- /* Return the word in the process's text space at address ADDR. */
+- PTRACE_PEEKTEXT = 1,
+-#define PT_READ_I PTRACE_PEEKTEXT
+-
+- /* Return the word in the process's data space at address ADDR. */
+- PTRACE_PEEKDATA = 2,
+-#define PT_READ_D PTRACE_PEEKDATA
+-
+- /* Return the word in the process's user area at offset ADDR. */
+- PTRACE_PEEKUSER = 3,
+-#define PT_READ_U PTRACE_PEEKUSER
+-
+- /* Write the word DATA into the process's text space at address ADDR. */
+- PTRACE_POKETEXT = 4,
+-#define PT_WRITE_I PTRACE_POKETEXT
+-
+- /* Write the word DATA into the process's data space at address ADDR. */
+- PTRACE_POKEDATA = 5,
+-#define PT_WRITE_D PTRACE_POKEDATA
+-
+- /* Write the word DATA into the process's user area at offset ADDR. */
+- PTRACE_POKEUSER = 6,
+-#define PT_WRITE_U PTRACE_POKEUSER
+-
+- /* Continue the process. */
+- PTRACE_CONT = 7,
+-#define PT_CONTINUE PTRACE_CONT
+-
+- /* Kill the process. */
+- PTRACE_KILL = 8,
+-#define PT_KILL PTRACE_KILL
+-
+- /* Single step the process.
+- This is not supported on all machines. */
+- PTRACE_SINGLESTEP = 9,
+-#define PT_STEP PTRACE_SINGLESTEP
+-
+- /* Get all general purpose registers used by a processes.
+- This is not supported on all machines. */
+- PTRACE_GETREGS = 12,
+-#define PT_GETREGS PTRACE_GETREGS
+-
+- /* Set all general purpose registers used by a processes.
+- This is not supported on all machines. */
+- PTRACE_SETREGS = 13,
+-#define PT_SETREGS PTRACE_SETREGS
+-
+- /* Get all floating point registers used by a processes.
+- This is not supported on all machines. */
+- PTRACE_GETFPREGS = 14,
+-#define PT_GETFPREGS PTRACE_GETFPREGS
+-
+- /* Set all floating point registers used by a processes.
+- This is not supported on all machines. */
+- PTRACE_SETFPREGS = 15,
+-#define PT_SETFPREGS PTRACE_SETFPREGS
+-
+- /* Attach to a process that is already running. */
+- PTRACE_ATTACH = 16,
+-#define PT_ATTACH PTRACE_ATTACH
+-
+- /* Detach from a process attached to with PTRACE_ATTACH. */
+- PTRACE_DETACH = 17,
+-#define PT_DETACH PTRACE_DETACH
+-
+- /* Get size required for the buffer holding the floating point registers.
+- This is not supported on all machines. */
+- PTRACE_GETFPREGSIZE = 18,
+-#define PT_GETFPREGSIZE PTRACE_GETFPREGSIZE
+-
+- /* Continue and stop at the next (return from) syscall. */
+- PTRACE_SYSCALL = 24
+-#define PT_SYSCALL PTRACE_SYSCALL
+-};
+-
+-/* Options set using PTRACE_SETOPTIONS. */
+-enum __ptrace_setoptions {
+- PTRACE_O_TRACESYSGOOD = 0x00000001,
+- PTRACE_O_TRACEFORK = 0x00000002,
+- PTRACE_O_TRACEVFORK = 0x00000004,
+- PTRACE_O_TRACECLONE = 0x00000008,
+- PTRACE_O_TRACEEXEC = 0x00000010,
+- PTRACE_O_TRACEVFORKDONE = 0x00000020,
+- PTRACE_O_TRACEEXIT = 0x00000040,
+- PTRACE_O_MASK = 0x0000007f
+-};
+-
+-/* Wait extended result codes for the above trace options. */
+-enum __ptrace_eventcodes {
+- PTRACE_EVENT_FORK = 1,
+- PTRACE_EVENT_VFORK = 2,
+- PTRACE_EVENT_CLONE = 3,
+- PTRACE_EVENT_EXEC = 4,
+- PTRACE_EVENT_VFORK_DONE = 5,
+- PTRACE_EVENT_EXIT = 6
+-};
+-
+-/* Perform process tracing functions. REQUEST is one of the values
+- above, and determines the action to be taken.
+- For all requests except PTRACE_TRACEME, PID specifies the process to be
+- traced.
+-
+- PID and the other arguments described above for the various requests should
+- appear (those that are used for the particular request) as:
+- pid_t PID, void *ADDR, int DATA, void *ADDR2
+- after REQUEST. */
+-extern long int ptrace (enum __ptrace_request __request, ...) __THROW;
+-
+-__END_DECLS
+-
+-#endif /* _SYS_PTRACE_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/ucontext.h uClibc-git/libc/sysdeps/linux/xtensa/sys/ucontext.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/ucontext.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/sys/ucontext.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/user.h uClibc-git/libc/sysdeps/linux/xtensa/sys/user.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sys/user.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/sysdeps/linux/xtensa/sys/user.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,20 @@
++/*
++ * include/asm-xtensa/user.h
++ *
++ * Xtensa Processor version.
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ *
++ * Copyright (C) 2001 - 2005 Tensilica Inc.
++ */
++
++#ifndef _XTENSA_USER_H
++#define _XTENSA_USER_H
++
++/* This file usually defines a 'struct user' structure. However, it it only
++ * used for a.out file, which are not supported on Xtensa.
++ */
++
++#endif /* _XTENSA_USER_H */
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/syscall.S uClibc-git/libc/sysdeps/linux/xtensa/syscall.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/syscall.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/syscall.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sysdep.h uClibc-git/libc/sysdeps/linux/xtensa/sysdep.h
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/sysdep.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sys/syscall.h>
+
+ #ifdef __ASSEMBLER__
+
+@@ -38,6 +39,16 @@
+ entry sp, FRAMESIZE; \
+ CALL_MCOUNT
+
++#define HIDDEN_ENTRY(name) \
++ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
++ .hidden C_SYMBOL_NAME(name); \
++ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name), @function); \
++ .align ALIGNARG(2); \
++ LITERAL_POSITION; \
++ C_LABEL(name) \
++ entry sp, FRAMESIZE; \
++ CALL_MCOUNT
++
+ #undef END
+ #define END(name) ASM_SIZE_DIRECTIVE(name)
+
+@@ -112,6 +123,7 @@
+ #define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
++#undef ret_ERRVAL
+ #define ret_ERRVAL retw
+
+ #if defined RTLD_PRIVATE_ERRNO
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/vfork.S uClibc-git/libc/sysdeps/linux/xtensa/vfork.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/vfork.S 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "sysdep.h"
+ #include <sys/syscall.h>
+@@ -49,7 +48,7 @@
+ /* pid_t vfork(void);
+ Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
+
+-ENTRY (__vfork)
++HIDDEN_ENTRY (__vfork)
+
+ movi a6, .Ljumptable
+ extui a2, a0, 30, 2 /* call-size: call4/8/12 = 1/2/3 */
+@@ -165,6 +164,5 @@
+ .Lpseudo_end:
+ retw
+
+-libc_hidden_def (__vfork)
+-
+ weak_alias (__vfork, vfork)
++libc_hidden_def(vfork)
+diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/windowspill.S uClibc-git/libc/sysdeps/linux/xtensa/windowspill.S
+--- uClibc-0.9.33.2/libc/sysdeps/linux/xtensa/windowspill.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/sysdeps/linux/xtensa/windowspill.S 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <bits/xtensa-config.h>
+
+diff -Nur uClibc-0.9.33.2/libc/termios/cfmakeraw.c uClibc-git/libc/termios/cfmakeraw.c
+--- uClibc-0.9.33.2/libc/termios/cfmakeraw.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/cfmakeraw.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <termios.h>
+
+diff -Nur uClibc-0.9.33.2/libc/termios/cfsetspeed.c uClibc-git/libc/termios/cfsetspeed.c
+--- uClibc-0.9.33.2/libc/termios/cfsetspeed.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/cfsetspeed.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <termios.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/isatty.c uClibc-git/libc/termios/isatty.c
+--- uClibc-0.9.33.2/libc/termios/isatty.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/isatty.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/kernel_termios.h uClibc-git/libc/termios/kernel_termios.h
+--- uClibc-0.9.33.2/libc/termios/kernel_termios.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/kernel_termios.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _KERNEL_TERMIOS_H
+ #define _KERNEL_TERMIOS_H 1
+diff -Nur uClibc-0.9.33.2/libc/termios/speed.c uClibc-git/libc/termios/speed.c
+--- uClibc-0.9.33.2/libc/termios/speed.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/speed.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcdrain.c uClibc-git/libc/termios/tcdrain.c
+--- uClibc-0.9.33.2/libc/termios/tcdrain.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcdrain.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcflow.c uClibc-git/libc/termios/tcflow.c
+--- uClibc-0.9.33.2/libc/termios/tcflow.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcflow.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcflush.c uClibc-git/libc/termios/tcflush.c
+--- uClibc-0.9.33.2/libc/termios/tcflush.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcflush.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcgetattr.c uClibc-git/libc/termios/tcgetattr.c
+--- uClibc-0.9.33.2/libc/termios/tcgetattr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcgetattr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcgetpgrp.c uClibc-git/libc/termios/tcgetpgrp.c
+--- uClibc-0.9.33.2/libc/termios/tcgetpgrp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcgetpgrp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/ioctl.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcgetsid.c uClibc-git/libc/termios/tcgetsid.c
+--- uClibc-0.9.33.2/libc/termios/tcgetsid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcgetsid.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcsendbrk.c uClibc-git/libc/termios/tcsendbrk.c
+--- uClibc-0.9.33.2/libc/termios/tcsendbrk.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcsendbrk.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stddef.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcsetattr.c uClibc-git/libc/termios/tcsetattr.c
+--- uClibc-0.9.33.2/libc/termios/tcsetattr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcsetattr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/termios/tcsetpgrp.c uClibc-git/libc/termios/tcsetpgrp.c
+--- uClibc-0.9.33.2/libc/termios/tcsetpgrp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/termios/tcsetpgrp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+diff -Nur uClibc-0.9.33.2/libc/unistd/confstr.c uClibc-git/libc/unistd/confstr.c
+--- uClibc-0.9.33.2/libc/unistd/confstr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/confstr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libc/unistd/daemon.c uClibc-git/libc/unistd/daemon.c
+--- uClibc-0.9.33.2/libc/unistd/daemon.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/daemon.c 2014-02-03 12:32:56.000000000 +0100
+@@ -118,7 +118,7 @@
+ {
+ struct STAT st;
+
+- if ((fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1
++ if ((fd = open_not_cancel_2(_PATH_DEVNULL, O_RDWR)) != -1
+ && (__builtin_expect (FSTAT (fd, &st), 0) == 0))
+ {
+ if (__builtin_expect (S_ISCHR (st.st_mode), 1) != 0) {
+diff -Nur uClibc-0.9.33.2/libc/unistd/exec.c uClibc-git/libc/unistd/exec.c
+--- uClibc-0.9.33.2/libc/unistd/exec.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/exec.c 2014-02-03 12:32:56.000000000 +0100
+@@ -32,6 +32,8 @@
+ /**********************************************************************/
+ #define EXEC_FUNC_COMMON 0
+ #define EXEC_FUNC_EXECVP 1
++#define EXEC_FUNC_EXECVPE 2
++
+ #if defined(__ARCH_USE_MMU__)
+
+ /* We have an MMU, so use alloca() to grab space for buffers and arg lists. */
+@@ -58,6 +60,7 @@
+ * execle(a) -> execve(-)
+ * execv(-) -> execve(-)
+ * execvp(a) -> execve(-)
++ * execvpe(a) -> execve(-)
+ */
+
+ # define EXEC_ALLOC_SIZE(VAR) /* nothing to do */
+@@ -68,7 +71,7 @@
+
+ # ifdef L___exec_alloc
+
+-void attribute_hidden *__exec_alloc(size_t size, int func)
++void *__exec_alloc(size_t size, int func)
+ {
+ static void *common_cache, *execvp_cache;
+ static size_t common_size, execvp_size;
+@@ -135,7 +138,7 @@
+ /**********************************************************************/
+ #ifdef L_execv
+
+-int execv(__const char *path, char *__const argv[])
++int execv(const char *path, char *const argv[])
+ {
+ return execve(path, argv, __environ);
+ }
+@@ -219,15 +222,18 @@
+
+ #endif
+ /**********************************************************************/
+-#ifdef L_execvp
++#if defined (L_execvp) || defined(L_execvpe)
+
+
+ /* Use a default path that matches glibc behavior, since SUSv3 says
+ * this is implementation-defined. The default is current working dir,
+ * /bin, and then /usr/bin. */
+ static const char default_path[] = ":/bin:/usr/bin";
+-
++#if defined (L_execvp)
+ int execvp(const char *path, char *const argv[])
++#elif defined (L_execvpe)
++int execvpe(const char *path, char *const argv[], char *const envp[])
++#endif
+ {
+ char *buf = NULL;
+ char *p;
+@@ -245,7 +251,11 @@
+ }
+
+ if (strchr(path, '/')) {
++#if defined (L_execvp)
+ execve(path, argv, __environ);
++#elif defined (L_execvpe)
++ execve(path, argv, envp);
++#endif
+ if (errno == ENOEXEC) {
+ char **nargv;
+ EXEC_ALLOC_SIZE(size2) /* Do NOT add a semicolon! */
+@@ -254,11 +264,19 @@
+ /* Need the dimension - 1. We omit counting the trailing
+ * NULL but we actually omit the first entry. */
+ for (n=0 ; argv[n] ; n++) {}
++#if defined (L_execvp)
+ nargv = (char **) EXEC_ALLOC((n+2) * sizeof(char *), size2, EXEC_FUNC_EXECVP);
++#elif defined (L_execvpe)
++ nargv = (char **) EXEC_ALLOC((n+2) * sizeof(char *), size2, EXEC_FUNC_EXECVPE);
++#endif
+ nargv[0] = argv[0];
+ nargv[1] = (char *)path;
+ memcpy(nargv+2, argv+1, n*sizeof(char *));
++#if defined (L_execvp)
+ execve("/bin/sh", nargv, __environ);
++#elif defined (L_execvpe)
++ execve("/bin/sh", nargv, envp);
++#endif
+ EXEC_FREE(nargv, size2);
+ }
+ } else {
+@@ -277,8 +295,11 @@
+ return -1;
+ }
+ len = (FILENAME_MAX - 1) - plen;
+-
++#if defined (L_execvp)
+ buf = EXEC_ALLOC(FILENAME_MAX, size, EXEC_FUNC_EXECVP);
++#elif defined (L_execvpe)
++ buf = EXEC_ALLOC(FILENAME_MAX, size, EXEC_FUNC_EXECVPE);
++#endif
+ {
+ int seen_small = 0;
+ s0 = buf + len;
+@@ -300,8 +321,11 @@
+ s[plen-1] = '/';
+ }
+
++#if defined (L_execvp)
+ execve(s, argv, __environ);
+-
++#elif defined (L_execvpe)
++ execve(s, argv, envp);
++#endif
+ seen_small = 1;
+
+ if (errno == ENOEXEC) {
+@@ -325,7 +349,11 @@
+
+ return -1;
+ }
++#if defined (L_execvp)
+ libc_hidden_def(execvp)
+-
++#elif defined (L_execvpe)
++libc_hidden_def(execvpe)
+ #endif
++
++#endif /* #if defined (L_execvp) || defined(L_execvpe) */
+ /**********************************************************************/
+diff -Nur uClibc-0.9.33.2/libc/unistd/execvpe.c uClibc-git/libc/unistd/execvpe.c
+--- uClibc-0.9.33.2/libc/unistd/execvpe.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libc/unistd/execvpe.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/* Copyright (C) 2011-2013 Hennning Heinold <heinold@inf.fu-berlin.de>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#define L_execvpe
++#include "exec.c"
+diff -Nur uClibc-0.9.33.2/libc/unistd/fpathconf.c uClibc-git/libc/unistd/fpathconf.c
+--- uClibc-0.9.33.2/libc/unistd/fpathconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/fpathconf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libc/unistd/getopt.c uClibc-git/libc/unistd/getopt.c
+--- uClibc-0.9.33.2/libc/unistd/getopt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/getopt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -17,9 +17,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /*
+ * Modified for uClibc by Manuel Novoa III on 1/5/01.
+@@ -36,9 +35,6 @@
+ # include <config.h>
+ #endif
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+-
+ #include <stdio.h>
+
+ /* Comment out all this code if we are using the GNU C Library, and are not
+@@ -62,7 +58,7 @@
+
+ /* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+-#ifdef __GNU_LIBRARY__
++#if defined __GNU_LIBRARY__ || defined __UCLIBC__
+ /* Don't include stdlib.h for non-GNU C libraries because some of them
+ contain conflicting prototypes for getopt. */
+ # include <stdlib.h>
+@@ -75,22 +71,12 @@
+ # include <unixlib.h>
+ #endif
+
+-#if !defined __UCLIBC__ && !defined __UCLIBC_HAS_GETTEXT_AWARENESS__
+ #ifdef _LIBC
+ # include <libintl.h>
+ #else
+ # include "gettext.h"
+ # define _(msgid) gettext (msgid)
+ #endif
+-#else
+-#ifdef __UCLIBC_MJN3_ONLY__
+-#warning TODO: Enable gettext awareness.
+-#endif /* __UCLIBC_MJN3_ONLY__ */
+-
+-#undef _
+-#define _(X) X
+-
+-#endif
+
+ /* Treat '-W foo' the same as the long option '--foo',
+ * disabled for the moment since it costs about 2k... */
+@@ -161,7 +147,7 @@
+ static struct _getopt_data getopt_data;
+
+
+-#ifndef __GNU_LIBRARY__
++#if !defined __GNU_LIBRARY__ && !defined __UCLIBC__
+
+ /* Avoid depending on library functions or files
+ whose names are inconsistent. */
+@@ -235,7 +221,7 @@
+ d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
+ else
+ {
+- memset (__mempcpy (new_str, __getopt_nonoption_flags,
++ memset (mempcpy (new_str, __getopt_nonoption_flags,
+ d->__nonoption_flags_max_len),
+ '\0', top + 1 - d->__nonoption_flags_max_len);
+ d->__nonoption_flags_max_len = top + 1;
+@@ -341,7 +327,7 @@
+ if (__getopt_nonoption_flags == NULL)
+ d->__nonoption_flags_max_len = -1;
+ else
+- memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
++ memset (mempcpy (__getopt_nonoption_flags, orig_str, len),
+ '\0', d->__nonoption_flags_max_len - len);
+ }
+ }
+diff -Nur uClibc-0.9.33.2/libc/unistd/getopt_int.h uClibc-git/libc/unistd/getopt_int.h
+--- uClibc-0.9.33.2/libc/unistd/getopt_int.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/getopt_int.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GETOPT_INT_H
+ #define _GETOPT_INT_H 1
+diff -Nur uClibc-0.9.33.2/libc/unistd/getopt-susv3.c uClibc-git/libc/unistd/getopt-susv3.c
+--- uClibc-0.9.33.2/libc/unistd/getopt-susv3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/getopt-susv3.c 2014-02-03 12:32:56.000000000 +0100
+@@ -22,14 +22,7 @@
+ #include <string.h>
+ #include <stdio.h>
+ #include <getopt.h>
+-
+-
+-#ifdef __UCLIBC_MJN3_ONLY__
+-#warning TODO: Enable gettext awareness.
+-#endif /* __UCLIBC_MJN3_ONLY__ */
+-
+-#undef _
+-#define _(X) X
++#include <libintl.h>
+
+ #ifdef __BCC__
+ static const char missing[] = "option requires an argument";
+diff -Nur uClibc-0.9.33.2/libc/unistd/getpass.c uClibc-git/libc/unistd/getpass.c
+--- uClibc-0.9.33.2/libc/unistd/getpass.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/getpass.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/unistd/getsubopt.c uClibc-git/libc/unistd/getsubopt.c
+--- uClibc-0.9.33.2/libc/unistd/getsubopt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/getsubopt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libc/unistd/Makefile.in uClibc-git/libc/unistd/Makefile.in
+--- uClibc-0.9.33.2/libc/unistd/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -10,39 +10,21 @@
+ UNISTD_DIR := $(top_srcdir)libc/unistd
+ UNISTD_OUT := $(top_builddir)libc/unistd
+
+-CSRC := $(notdir $(wildcard $(UNISTD_DIR)/*.c))
+-# multi source
+-CSRC := $(filter-out exec.c,$(CSRC))
+-
+-ifeq ($(ARCH_USE_MMU),y)
+-CSRC := $(filter-out __exec_alloc.c,$(CSRC))
+-endif
+-
+-ifeq ($(UCLIBC_HAS_GNU_GETOPT),y)
+-CSRC := $(filter-out getopt-susv3.c getopt_long-simple.c,$(CSRC))
+-else
+-CSRC := $(filter-out getopt.c,$(CSRC))
+-ifneq ($(UCLIBC_HAS_GETOPT_LONG),y)
+-CSRC := $(filter-out getopt_long-simple.c,$(CSRC))
+-endif
+-endif
+-
+-ifeq ($(UCLIBC_HAS_GNU_GETSUBOPT),y)
+-CSRC := $(filter-out getsubopt-susv3.c,$(CSRC))
+-else
+-CSRC := $(filter-out getsubopt.c,$(CSRC))
+-endif
+-
+-ifneq ($(UCLIBC_SUSV3_LEGACY),y)
+-CSRC := $(filter-out ualarm.c usleep.c,$(CSRC))
+-endif
+-
+-ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC := $(filter-out sleep.c,$(CSRC))
+-endif
++CSRC-y := $(notdir $(wildcard $(UNISTD_DIR)/*.c))
++OMIT-y := exec.c # multi source
++OMIT-$(ARCH_USE_MMU) += __exec_alloc.c
++OMIT-$(if $(UCLIBC_SUSV3_LEGACY),,y) += ualarm.c usleep.c
++#OMIT-$(UCLIBC_HAS_THREADS_NATIVE) += sleep.c
++
++# XXX: GNU_GETOPT comes with getopt_long unconditionally, which is wrong
++GO_LONG := $(if $(UCLIBC_HAS_GNU_GETOPT),getopt_long-simple.c)
++OMIT-y += $(if $(UCLIBC_HAS_GNU_GETOPT),getopt-susv3.c $(GO_LONG),getopt.c)
++OMIT-y += $(if $(UCLIBC_HAS_GNU_GETSUBOPT),getsubopt-susv3.c,getsubopt.c)
+
+-UNISTD_SRC := $(patsubst %.c,$(UNISTD_DIR)/%.c,$(CSRC))
+-UNISTD_OBJ := $(patsubst %.c,$(UNISTD_OUT)/%.o,$(CSRC))
++CSRC-y := $(filter-out $(OMIT-y),$(CSRC-y))
++
++UNISTD_SRC := $(patsubst %.c,$(UNISTD_DIR)/%.c,$(CSRC-y))
++UNISTD_OBJ := $(patsubst %.c,$(UNISTD_OUT)/%.o,$(CSRC-y))
+
+ libc-y += $(UNISTD_OBJ)
+
+diff -Nur uClibc-0.9.33.2/libc/unistd/pathconf.c uClibc-git/libc/unistd/pathconf.c
+--- uClibc-0.9.33.2/libc/unistd/pathconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/pathconf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* pathconf -- adjusted for busybox */
+
+diff -Nur uClibc-0.9.33.2/libc/unistd/sleep.c uClibc-git/libc/unistd/sleep.c
+--- uClibc-0.9.33.2/libc/unistd/sleep.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/sleep.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <time.h>
+@@ -99,6 +98,7 @@
+ /* This is not necessary but some buggy programs depend on this. */
+ if (seconds == 0) {
+ # ifdef CANCELLATION_P
++ int cancelhandling;
+ CANCELLATION_P (THREAD_SELF);
+ # endif
+ return 0;
+diff -Nur uClibc-0.9.33.2/libc/unistd/sysconf.c uClibc-git/libc/unistd/sysconf.c
+--- uClibc-0.9.33.2/libc/unistd/sysconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libc/unistd/sysconf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,11 +14,11 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #define _XOPEN_SOURCE 500
+ #include <features.h>
++#include <ctype.h>
+ #include <errno.h>
+ #include <limits.h>
+ #include <grp.h>
+@@ -981,20 +981,9 @@
+ #endif
+
+ case _SC_MONOTONIC_CLOCK:
+-#ifdef __NR_clock_getres
+- /* Check using the clock_getres system call. */
+-# ifdef __UCLIBC_HAS_THREADS_NATIVE__
+- {
+- struct timespec ts;
+- INTERNAL_SYSCALL_DECL (err);
+- int r;
+- r = INTERNAL_SYSCALL (clock_getres, err, 2, CLOCK_MONOTONIC, &ts);
+- return INTERNAL_SYSCALL_ERROR_P (r, err) ? -1 : _POSIX_VERSION;
+- }
+-# elif defined __UCLIBC_HAS_REALTIME__
++#if defined __UCLIBC_HAS_REALTIME__ && defined __NR_clock_getres
+ if (clock_getres(CLOCK_MONOTONIC, NULL) >= 0)
+ return _POSIX_VERSION;
+-# endif
+ #endif
+ RETURN_NEG_1;
+
+diff -Nur uClibc-0.9.33.2/libcrypt/crypt.c uClibc-git/libcrypt/crypt.c
+--- uClibc-0.9.33.2/libcrypt/crypt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/crypt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define __FORCE_GLIBC
+ #include <unistd.h>
+ #include <crypt.h>
+ #include "libcrypt.h"
+diff -Nur uClibc-0.9.33.2/libcrypt/crypt_stub.c uClibc-git/libcrypt/crypt_stub.c
+--- uClibc-0.9.33.2/libcrypt/crypt_stub.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/crypt_stub.c 2014-02-03 12:32:56.000000000 +0100
+@@ -5,7 +5,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#define __FORCE_GLIBC
+ #include <crypt.h>
+ #include <unistd.h>
+ #include "libcrypt.h"
+diff -Nur uClibc-0.9.33.2/libcrypt/des.c uClibc-git/libcrypt/des.c
+--- uClibc-0.9.33.2/libcrypt/des.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/des.c 2014-02-03 12:32:56.000000000 +0100
+@@ -56,7 +56,6 @@
+ * alignment).
+ */
+
+-#define __FORCE_GLIBC
+ #include <sys/cdefs.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+diff -Nur uClibc-0.9.33.2/libcrypt/sha256.c uClibc-git/libcrypt/sha256.c
+--- uClibc-0.9.33.2/libcrypt/sha256.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/sha256.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Written by Ulrich Drepper <drepper@redhat.com>, 2007. */
+
+diff -Nur uClibc-0.9.33.2/libcrypt/sha256-crypt.c uClibc-git/libcrypt/sha256-crypt.c
+--- uClibc-0.9.33.2/libcrypt/sha256-crypt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/sha256-crypt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libcrypt/sha256.h uClibc-git/libcrypt/sha256.h
+--- uClibc-0.9.33.2/libcrypt/sha256.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/sha256.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SHA256_H
+ #define _SHA256_H 1
+diff -Nur uClibc-0.9.33.2/libcrypt/sha512.c uClibc-git/libcrypt/sha512.c
+--- uClibc-0.9.33.2/libcrypt/sha512.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/sha512.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Written by Ulrich Drepper <drepper@redhat.com>, 2007. */
+
+diff -Nur uClibc-0.9.33.2/libcrypt/sha512-crypt.c uClibc-git/libcrypt/sha512-crypt.c
+--- uClibc-0.9.33.2/libcrypt/sha512-crypt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/sha512-crypt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libcrypt/sha512.h uClibc-git/libcrypt/sha512.h
+--- uClibc-0.9.33.2/libcrypt/sha512.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libcrypt/sha512.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SHA512_H
+ #define _SHA512_H 1
+diff -Nur uClibc-0.9.33.2/libm/carg.c uClibc-git/libm/carg.c
+--- uClibc-0.9.33.2/libm/carg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/carg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <complex.h>
+ #include <math.h>
+diff -Nur uClibc-0.9.33.2/libm/e_acos.c uClibc-git/libm/e_acos.c
+--- uClibc-0.9.33.2/libm/e_acos.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_acos.c 2014-02-03 12:32:56.000000000 +0100
+@@ -52,7 +52,7 @@
+ qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
+ qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
+
+-double attribute_hidden __ieee754_acos(double x)
++double __ieee754_acos(double x)
+ {
+ double z,p,q,r,w,s,c,df;
+ int32_t hx,ix;
+diff -Nur uClibc-0.9.33.2/libm/e_acosh.c uClibc-git/libm/e_acosh.c
+--- uClibc-0.9.33.2/libm/e_acosh.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_acosh.c 2014-02-03 12:32:56.000000000 +0100
+@@ -30,7 +30,7 @@
+ one = 1.0,
+ ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */
+
+-double attribute_hidden __ieee754_acosh(double x)
++double __ieee754_acosh(double x)
+ {
+ double t;
+ int32_t hx;
+diff -Nur uClibc-0.9.33.2/libm/e_asin.c uClibc-git/libm/e_asin.c
+--- uClibc-0.9.33.2/libm/e_asin.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_asin.c 2014-02-03 12:32:56.000000000 +0100
+@@ -60,7 +60,7 @@
+ qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
+ qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
+
+-double attribute_hidden __ieee754_asin(double x)
++double __ieee754_asin(double x)
+ {
+ double t=0.0,w,p,q,c,r,s;
+ int32_t hx,ix;
+diff -Nur uClibc-0.9.33.2/libm/e_atan2.c uClibc-git/libm/e_atan2.c
+--- uClibc-0.9.33.2/libm/e_atan2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_atan2.c 2014-02-03 12:32:56.000000000 +0100
+@@ -47,7 +47,7 @@
+ pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
+ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
+
+-double attribute_hidden __ieee754_atan2(double y, double x)
++double __ieee754_atan2(double y, double x)
+ {
+ double z;
+ int32_t k,m,hx,hy,ix,iy;
+diff -Nur uClibc-0.9.33.2/libm/e_atanh.c uClibc-git/libm/e_atanh.c
+--- uClibc-0.9.33.2/libm/e_atanh.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_atanh.c 2014-02-03 12:32:56.000000000 +0100
+@@ -34,7 +34,7 @@
+
+ static const double zero = 0.0;
+
+-double attribute_hidden __ieee754_atanh(double x)
++double __ieee754_atanh(double x)
+ {
+ double t;
+ int32_t hx,ix;
+diff -Nur uClibc-0.9.33.2/libm/e_cosh.c uClibc-git/libm/e_cosh.c
+--- uClibc-0.9.33.2/libm/e_cosh.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_cosh.c 2014-02-03 12:32:56.000000000 +0100
+@@ -35,7 +35,7 @@
+
+ static const double one = 1.0, half=0.5, huge = 1.0e300;
+
+-double attribute_hidden __ieee754_cosh(double x)
++double __ieee754_cosh(double x)
+ {
+ double t,w;
+ int32_t ix;
+diff -Nur uClibc-0.9.33.2/libm/e_exp.c uClibc-git/libm/e_exp.c
+--- uClibc-0.9.33.2/libm/e_exp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_exp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -93,7 +93,7 @@
+ P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
+ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
+
+-double attribute_hidden __ieee754_exp(double x) /* default IEEE double exp */
++double __ieee754_exp(double x) /* default IEEE double exp */
+ {
+ double y;
+ double hi = 0.0;
+diff -Nur uClibc-0.9.33.2/libm/e_fmod.c uClibc-git/libm/e_fmod.c
+--- uClibc-0.9.33.2/libm/e_fmod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_fmod.c 2014-02-03 12:32:56.000000000 +0100
+@@ -20,7 +20,7 @@
+
+ static const double one = 1.0, Zero[] = {0.0, -0.0,};
+
+-double attribute_hidden __ieee754_fmod(double x, double y)
++double __ieee754_fmod(double x, double y)
+ {
+ int32_t n,hx,hy,hz,ix,iy,sx,i;
+ u_int32_t lx,ly,lz;
+diff -Nur uClibc-0.9.33.2/libm/e_hypot.c uClibc-git/libm/e_hypot.c
+--- uClibc-0.9.33.2/libm/e_hypot.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_hypot.c 2014-02-03 12:32:56.000000000 +0100
+@@ -44,9 +44,9 @@
+ #include "math.h"
+ #include "math_private.h"
+
+-double attribute_hidden __ieee754_hypot(double x, double y)
++double __ieee754_hypot(double x, double y)
+ {
+- double a=x,b=y,t1,t2,y1,y2,w;
++ double a=x,b=y,t1,t2,_y1,y2,w;
+ int32_t j,k,ha,hb;
+
+ GET_HIGH_WORD(ha,x);
+@@ -100,13 +100,13 @@
+ w = __ieee754_sqrt(t1*t1-(b*(-b)-t2*(a+t1)));
+ } else {
+ a = a+a;
+- y1 = 0;
+- SET_HIGH_WORD(y1,hb);
+- y2 = b - y1;
++ _y1 = 0;
++ SET_HIGH_WORD(_y1,hb);
++ y2 = b - _y1;
+ t1 = 0;
+ SET_HIGH_WORD(t1,ha+0x00100000);
+ t2 = a - t1;
+- w = __ieee754_sqrt(t1*y1-(w*(-w)-(t1*y2+t2*b)));
++ w = __ieee754_sqrt(t1*_y1-(w*(-w)-(t1*y2+t2*b)));
+ }
+ if(k!=0) {
+ u_int32_t high;
+diff -Nur uClibc-0.9.33.2/libm/e_j0.c uClibc-git/libm/e_j0.c
+--- uClibc-0.9.33.2/libm/e_j0.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_j0.c 2014-02-03 12:32:56.000000000 +0100
+@@ -76,7 +76,7 @@
+
+ static const double zero = 0.0;
+
+-double attribute_hidden __ieee754_j0(double x)
++double __ieee754_j0(double x)
+ {
+ double z, s,c,ss,cc,r,u,v;
+ int32_t hx,ix;
+@@ -153,7 +153,7 @@
+ v03 = 2.59150851840457805467e-07, /* 0x3E91642D, 0x7FF202FD */
+ v04 = 4.41110311332675467403e-10; /* 0x3DFE5018, 0x3BD6D9EF */
+
+-double attribute_hidden __ieee754_y0(double x)
++double __ieee754_y0(double x)
+ {
+ double z, s,c,ss,cc,u,v;
+ int32_t hx,ix,lx;
+diff -Nur uClibc-0.9.33.2/libm/e_j1.c uClibc-git/libm/e_j1.c
+--- uClibc-0.9.33.2/libm/e_j1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_j1.c 2014-02-03 12:32:56.000000000 +0100
+@@ -77,7 +77,7 @@
+
+ static const double zero = 0.0;
+
+-double attribute_hidden __ieee754_j1(double x)
++double __ieee754_j1(double x)
+ {
+ double z, s,c,ss,cc,r,u,v,y;
+ int32_t hx,ix;
+@@ -150,7 +150,7 @@
+ 1.66559246207992079114e-11, /* 0x3DB25039, 0xDACA772A */
+ };
+
+-double attribute_hidden __ieee754_y1(double x)
++double __ieee754_y1(double x)
+ {
+ double z, s,c,ss,cc,u,v;
+ int32_t hx,ix,lx;
+diff -Nur uClibc-0.9.33.2/libm/e_jn.c uClibc-git/libm/e_jn.c
+--- uClibc-0.9.33.2/libm/e_jn.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_jn.c 2014-02-03 12:32:56.000000000 +0100
+@@ -45,7 +45,7 @@
+
+ static const double zero = 0.00000000000000000000e+00;
+
+-double attribute_hidden __ieee754_jn(int n, double x)
++double __ieee754_jn(int n, double x)
+ {
+ int32_t i,hx,ix,lx, sgn;
+ double a, b, temp=0, di;
+@@ -217,7 +217,7 @@
+ strong_alias(__ieee754_jn, jn)
+ #endif
+
+-double attribute_hidden __ieee754_yn(int n, double x)
++double __ieee754_yn(int n, double x)
+ {
+ int32_t i,hx,ix,lx;
+ int32_t sign;
+diff -Nur uClibc-0.9.33.2/libm/e_lgamma_r.c uClibc-git/libm/e_lgamma_r.c
+--- uClibc-0.9.33.2/libm/e_lgamma_r.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_lgamma_r.c 2014-02-03 12:32:56.000000000 +0100
+@@ -197,7 +197,7 @@
+ return -y;
+ }
+
+-double attribute_hidden __ieee754_lgamma_r(double x, int *signgamp)
++double __ieee754_lgamma_r(double x, int *signgamp)
+ {
+ double t,y,z,nadj=0,p,p1,p2,p3,q,r,w;
+ int i,hx,lx,ix;
+@@ -314,11 +314,12 @@
+ #else
+ strong_alias(__ieee754_lgamma_r, lgamma_r)
+ #endif
++libm_hidden_def(lgamma_r)
+
+ /* __ieee754_lgamma(x)
+ * Return the logarithm of the Gamma function of x.
+ */
+-double attribute_hidden __ieee754_lgamma(double x)
++double __ieee754_lgamma(double x)
+ {
+ return __ieee754_lgamma_r(x, &signgam);
+ }
+@@ -358,6 +359,7 @@
+ strong_alias(__ieee754_lgamma_r, gamma_r)
+ strong_alias(__ieee754_lgamma, gamma)
+ #endif
++libm_hidden_def(gamma)
+
+
+ /* double tgamma(double x)
+diff -Nur uClibc-0.9.33.2/libm/e_log10.c uClibc-git/libm/e_log10.c
+--- uClibc-0.9.33.2/libm/e_log10.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_log10.c 2014-02-03 12:32:56.000000000 +0100
+@@ -53,7 +53,7 @@
+
+ static const double zero = 0.0;
+
+-double attribute_hidden __ieee754_log10(double x)
++double __ieee754_log10(double x)
+ {
+ double y,z;
+ int32_t i,k,hx;
+diff -Nur uClibc-0.9.33.2/libm/e_log2.c uClibc-git/libm/e_log2.c
+--- uClibc-0.9.33.2/libm/e_log2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_log2.c 2014-02-03 12:32:56.000000000 +0100
+@@ -116,3 +116,4 @@
+ }
+ }
+ strong_alias(__ieee754_log2,log2)
++libm_hidden_def(log2)
+diff -Nur uClibc-0.9.33.2/libm/e_log.c uClibc-git/libm/e_log.c
+--- uClibc-0.9.33.2/libm/e_log.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_log.c 2014-02-03 12:32:56.000000000 +0100
+@@ -77,7 +77,7 @@
+
+ static const double zero = 0.0;
+
+-double attribute_hidden __ieee754_log(double x)
++double __ieee754_log(double x)
+ {
+ double hfsq,f,s,z,R,w,t1,t2,dk;
+ int32_t k,hx,i,j;
+diff -Nur uClibc-0.9.33.2/libm/e_pow.c uClibc-git/libm/e_pow.c
+--- uClibc-0.9.33.2/libm/e_pow.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_pow.c 2014-02-03 12:32:56.000000000 +0100
+@@ -91,10 +91,10 @@
+ ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/
+ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/
+
+-double attribute_hidden __ieee754_pow(double x, double y)
++double __ieee754_pow(double x, double y)
+ {
+ double z,ax,z_h,z_l,p_h,p_l;
+- double y1,t1,t2,r,s,t,u,v,w;
++ double _y1,t1,t2,r,s,t,u,v,w;
+ int32_t i,j,k,yisint,n;
+ int32_t hx,hy,ix,iy;
+ u_int32_t lx,ly;
+@@ -249,10 +249,10 @@
+ s = -one;/* (-ve)**(odd int) */
+
+ /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
+- y1 = y;
+- SET_LOW_WORD(y1,0);
+- p_l = (y-y1)*t1+y*t2;
+- p_h = y1*t1;
++ _y1 = y;
++ SET_LOW_WORD(_y1,0);
++ p_l = (y-_y1)*t1+y*t2;
++ p_h = _y1*t1;
+ z = p_l+p_h;
+ EXTRACT_WORDS(j,i,z);
+ if (j>=0x40900000) { /* z >= 1024 */
+diff -Nur uClibc-0.9.33.2/libm/e_remainder.c uClibc-git/libm/e_remainder.c
+--- uClibc-0.9.33.2/libm/e_remainder.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_remainder.c 2014-02-03 12:32:56.000000000 +0100
+@@ -23,7 +23,7 @@
+
+ static const double zero = 0.0;
+
+-double attribute_hidden __ieee754_remainder(double x, double p)
++double __ieee754_remainder(double x, double p)
+ {
+ int32_t hx,hp;
+ u_int32_t sx,lx,lp;
+diff -Nur uClibc-0.9.33.2/libm/e_rem_pio2.c uClibc-git/libm/e_rem_pio2.c
+--- uClibc-0.9.33.2/libm/e_rem_pio2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_rem_pio2.c 2014-02-03 12:32:56.000000000 +0100
+@@ -66,7 +66,7 @@
+ pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */
+ pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */
+
+-int32_t attribute_hidden __ieee754_rem_pio2(double x, double *y)
++int32_t __ieee754_rem_pio2(double x, double *y)
+ {
+ double z=0.0,w,t,r,fn;
+ double tx[3];
+diff -Nur uClibc-0.9.33.2/libm/e_scalb.c uClibc-git/libm/e_scalb.c
+--- uClibc-0.9.33.2/libm/e_scalb.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_scalb.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,7 +19,7 @@
+ #include "math_private.h"
+ #include <errno.h>
+
+-double attribute_hidden __ieee754_scalb(double x, double fn)
++double __ieee754_scalb(double x, double fn)
+ {
+ if (isnan(x)||isnan(fn)) return x*fn;
+ if (!isfinite(fn)) {
+@@ -55,5 +55,6 @@
+ #else
+ strong_alias(__ieee754_scalb, scalb)
+ #endif
++libm_hidden_def(scalb)
+
+ #endif /* UCLIBC_SUSV3_LEGACY */
+diff -Nur uClibc-0.9.33.2/libm/e_sinh.c uClibc-git/libm/e_sinh.c
+--- uClibc-0.9.33.2/libm/e_sinh.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_sinh.c 2014-02-03 12:32:56.000000000 +0100
+@@ -32,7 +32,7 @@
+
+ static const double one = 1.0, shuge = 1.0e307;
+
+-double attribute_hidden __ieee754_sinh(double x)
++double __ieee754_sinh(double x)
+ {
+ double t,w,h;
+ int32_t ix,jx;
+diff -Nur uClibc-0.9.33.2/libm/e_sqrt.c uClibc-git/libm/e_sqrt.c
+--- uClibc-0.9.33.2/libm/e_sqrt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/e_sqrt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -84,7 +84,7 @@
+
+ static const double one = 1.0, tiny = 1.0e-300;
+
+-double attribute_hidden __ieee754_sqrt(double x)
++double __ieee754_sqrt(double x)
+ {
+ double z;
+ int32_t sign = (int)0x80000000;
+diff -Nur uClibc-0.9.33.2/libm/i386/fclrexcpt.c uClibc-git/libm/i386/fclrexcpt.c
+--- uClibc-0.9.33.2/libm/i386/fclrexcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fclrexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/fedisblxcpt.c uClibc-git/libm/i386/fedisblxcpt.c
+--- uClibc-0.9.33.2/libm/i386/fedisblxcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fedisblxcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/feenablxcpt.c uClibc-git/libm/i386/feenablxcpt.c
+--- uClibc-0.9.33.2/libm/i386/feenablxcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/feenablxcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/fegetenv.c uClibc-git/libm/i386/fegetenv.c
+--- uClibc-0.9.33.2/libm/i386/fegetenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fegetenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+
+diff -Nur uClibc-0.9.33.2/libm/i386/fegetexcept.c uClibc-git/libm/i386/fegetexcept.c
+--- uClibc-0.9.33.2/libm/i386/fegetexcept.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fegetexcept.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+
+diff -Nur uClibc-0.9.33.2/libm/i386/fegetround.c uClibc-git/libm/i386/fegetround.c
+--- uClibc-0.9.33.2/libm/i386/fegetround.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fegetround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+
+diff -Nur uClibc-0.9.33.2/libm/i386/feholdexcpt.c uClibc-git/libm/i386/feholdexcpt.c
+--- uClibc-0.9.33.2/libm/i386/feholdexcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/feholdexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/fesetenv.c uClibc-git/libm/i386/fesetenv.c
+--- uClibc-0.9.33.2/libm/i386/fesetenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fesetenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <assert.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/fesetround.c uClibc-git/libm/i386/fesetround.c
+--- uClibc-0.9.33.2/libm/i386/fesetround.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fesetround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/feupdateenv.c uClibc-git/libm/i386/feupdateenv.c
+--- uClibc-0.9.33.2/libm/i386/feupdateenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/feupdateenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/fgetexcptflg.c uClibc-git/libm/i386/fgetexcptflg.c
+--- uClibc-0.9.33.2/libm/i386/fgetexcptflg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fgetexcptflg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+
+diff -Nur uClibc-0.9.33.2/libm/i386/fraiseexcpt.c uClibc-git/libm/i386/fraiseexcpt.c
+--- uClibc-0.9.33.2/libm/i386/fraiseexcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fraiseexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <math.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/fsetexcptflg.c uClibc-git/libm/i386/fsetexcptflg.c
+--- uClibc-0.9.33.2/libm/i386/fsetexcptflg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/fsetexcptflg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <math.h>
+diff -Nur uClibc-0.9.33.2/libm/i386/ftestexcept.c uClibc-git/libm/i386/ftestexcept.c
+--- uClibc-0.9.33.2/libm/i386/ftestexcept.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/i386/ftestexcept.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libm/k_cos.c uClibc-git/libm/k_cos.c
+--- uClibc-0.9.33.2/libm/k_cos.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/k_cos.c 2014-02-03 12:32:56.000000000 +0100
+@@ -56,7 +56,7 @@
+ C5 = 2.08757232129817482790e-09, /* 0x3E21EE9E, 0xBDB4B1C4 */
+ C6 = -1.13596475577881948265e-11; /* 0xBDA8FAE9, 0xBE8838D4 */
+
+-double attribute_hidden __kernel_cos(double x, double y)
++double __kernel_cos(double x, double y)
+ {
+ double a,hz,z,r,qx;
+ int32_t ix;
+diff -Nur uClibc-0.9.33.2/libm/k_rem_pio2.c uClibc-git/libm/k_rem_pio2.c
+--- uClibc-0.9.33.2/libm/k_rem_pio2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/k_rem_pio2.c 2014-02-03 12:32:56.000000000 +0100
+@@ -147,7 +147,7 @@
+ two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
+ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */
+
+-int attribute_hidden __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2)
++int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2)
+ {
+ int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
+ double z,fw,f[20],fq[20],q[20];
+diff -Nur uClibc-0.9.33.2/libm/k_sin.c uClibc-git/libm/k_sin.c
+--- uClibc-0.9.33.2/libm/k_sin.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/k_sin.c 2014-02-03 12:32:56.000000000 +0100
+@@ -49,7 +49,7 @@
+ S5 = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */
+ S6 = 1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */
+
+-double attribute_hidden __kernel_sin(double x, double y, int iy)
++double __kernel_sin(double x, double y, int iy)
+ {
+ double z,r,v;
+ int32_t ix;
+diff -Nur uClibc-0.9.33.2/libm/k_standard.c uClibc-git/libm/k_standard.c
+--- uClibc-0.9.33.2/libm/k_standard.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/k_standard.c 2014-02-03 12:32:56.000000000 +0100
+@@ -598,6 +598,7 @@
+ errno = EDOM;
+ }
+ break;
++# ifdef __UCLIBC_SUSV3_LEGACY__
+ case 32:
+ case 132:
+ /* scalb overflow; SVID also returns +-HUGE_VAL */
+@@ -622,6 +623,7 @@
+ errno = ERANGE;
+ }
+ break;
++# endif
+ case 34:
+ case 134:
+ /* j0(|x|>X_TLOSS) */
+diff -Nur uClibc-0.9.33.2/libm/k_tan.c uClibc-git/libm/k_tan.c
+--- uClibc-0.9.33.2/libm/k_tan.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/k_tan.c 2014-02-03 12:32:56.000000000 +0100
+@@ -66,7 +66,7 @@
+ 2.59073051863633712884e-05, /* 0x3EFB2A70, 0x74BF7AD4 */
+ };
+
+-double attribute_hidden __kernel_tan(double x, double y, int iy)
++double __kernel_tan(double x, double y, int iy)
+ {
+ double z,r,v,w,s;
+ int32_t ix,hx;
+diff -Nur uClibc-0.9.33.2/libm/metag/fclrexcpt.c uClibc-git/libm/metag/fclrexcpt.c
+--- uClibc-0.9.33.2/libm/metag/fclrexcpt.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fclrexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,44 @@
++/* Clear given exceptions in current floating-point environment.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++#include "internal.h"
++
++int
++feclearexcept (int excepts)
++{
++ unsigned int temp;
++
++ /* Get the current exceptions. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (temp));
++
++ /* Mask out unsupported bits/exceptions. */
++ excepts &= FE_ALL_EXCEPT;
++
++ excepts <<= 16;
++
++ temp &= ~excepts;
++
++ metag_set_fpu_flags(temp);
++
++ /* Success. */
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fedisblxcpt.c uClibc-git/libm/metag/fedisblxcpt.c
+--- uClibc-0.9.33.2/libm/metag/fedisblxcpt.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fedisblxcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Disable floating-point exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++#include "internal.h"
++
++int
++fedisableexcept (int excepts)
++{
++ unsigned int old_exc;
++
++ /* Get the current control word. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (old_exc));
++
++ old_exc &= FE_ALL_EXCEPT;
++
++ excepts = old_exc & ~excepts;
++
++ metag_set_fpu_flags(excepts);
++
++ return old_exc;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/feenablxcpt.c uClibc-git/libm/metag/feenablxcpt.c
+--- uClibc-0.9.33.2/libm/metag/feenablxcpt.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/feenablxcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Enable floating-point exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++#include "internal.h"
++
++int
++feenableexcept (int excepts)
++{
++ unsigned int old_exc;
++
++ /* Get the current control word. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (old_exc));
++
++ old_exc &= FE_ALL_EXCEPT;
++
++ excepts |= old_exc;
++
++ metag_set_fpu_flags(excepts);
++
++ return old_exc;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fegetenv.c uClibc-git/libm/metag/fegetenv.c
+--- uClibc-0.9.33.2/libm/metag/fegetenv.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fegetenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,36 @@
++/* Store current floating-point environment.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++
++int
++fegetenv (fenv_t *envp)
++{
++ unsigned int txdefr;
++ unsigned int txmode;
++
++ __asm__ ("MOV %0,TXDEFR" : "=r" (txdefr));
++ __asm__ ("MOV %0,TXMODE" : "=r" (txmode));
++
++ envp->txdefr = txdefr;
++ envp->txmode = txmode;
++
++ /* Success. */
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fegetexcept.c uClibc-git/libm/metag/fegetexcept.c
+--- uClibc-0.9.33.2/libm/metag/fegetexcept.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fegetexcept.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Get enabled floating-point exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++
++int
++fegetexcept (void)
++{
++ unsigned int exc;
++
++ /* Get the current control word. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (exc));
++
++ return exc & FE_ALL_EXCEPT;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fegetround.c uClibc-git/libm/metag/fegetround.c
+--- uClibc-0.9.33.2/libm/metag/fegetround.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fegetround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,30 @@
++/* Return current rounding direction.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++
++int
++fegetround (void)
++{
++ unsigned int txmode;
++
++ __asm__ ("MOV %0,TXMODE" : "=r" (txmode));
++
++ return (txmode >> 16) & 0x3;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/feholdexcpt.c uClibc-git/libm/metag/feholdexcpt.c
+--- uClibc-0.9.33.2/libm/metag/feholdexcpt.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/feholdexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,41 @@
++/* Store current floating-point environment and clear exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++#include "internal.h"
++
++int
++feholdexcept (fenv_t *envp)
++{
++ unsigned int txdefr;
++ unsigned int txmode;
++
++ __asm__ ("MOV %0,TXDEFR" : "=r" (txdefr));
++ __asm__ ("MOV %0,TXMODE" : "=r" (txmode));
++
++ envp->txdefr = txdefr;
++ envp->txmode = txmode;
++
++ metag_set_fpu_flags(0);
++
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fesetenv.c uClibc-git/libm/metag/fesetenv.c
+--- uClibc-0.9.33.2/libm/metag/fesetenv.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fesetenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,60 @@
++/* Install given floating-point environment.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <assert.h>
++
++#include "internal.h"
++
++libm_hidden_proto(fesetenv)
++
++int
++fesetenv (const fenv_t *envp)
++{
++ unsigned int exc;
++ unsigned int txmode;
++
++ __asm__ ("MOV %0,TXMODE" : "=r" (txmode));
++
++ /* Clear rounding mode bits (round to nearest). */
++ txmode &= ~(0x3 << 16);
++
++ if (envp == FE_DFL_ENV)
++ {
++ exc = 0;
++ }
++ else if (envp == FE_NOMASK_ENV)
++ {
++ exc = 0x1f;
++ }
++ else
++ {
++ exc = envp->txdefr & (FE_ALL_EXCEPT | (FE_ALL_EXCEPT << 16));
++ /* Write rounding mode and guard bit. */
++ txmode |= (0x1 << 18 ) | (envp->txmode & (0x3 << 16));
++ }
++
++ __asm__ ("MOV TXMODE,%0" : : "r" (txmode));
++
++ metag_set_fpu_flags(exc);
++
++ /* Success. */
++ return 0;
++}
++libm_hidden_def(fesetenv)
+diff -Nur uClibc-0.9.33.2/libm/metag/fesetround.c uClibc-git/libm/metag/fesetround.c
+--- uClibc-0.9.33.2/libm/metag/fesetround.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fesetround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,41 @@
++/* Set current rounding direction.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++int
++fesetround (int round)
++{
++ unsigned int txmode;
++
++ if ((round & ~0x3) != 0)
++ /* ROUND is no valid rounding mode. */
++ return 1;
++
++ __asm__ ("MOV %0,TXMODE" : "=r" (txmode));
++
++ txmode &= ~(0x3 << 16);
++ /* Write rounding mode and guard bit. */
++ txmode |= (0x1 << 18 ) | (round << 16);
++
++ __asm__ ("MOV TXMODE,%0" : : "r" (txmode));
++
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/feupdateenv.c uClibc-git/libm/metag/feupdateenv.c
+--- uClibc-0.9.33.2/libm/metag/feupdateenv.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/feupdateenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,45 @@
++/* Install given floating-point environment and raise exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++libm_hidden_proto(fesetenv)
++libm_hidden_proto(feraiseexcept)
++
++int
++feupdateenv (const fenv_t *envp)
++{
++ unsigned int temp;
++
++ /* Save current exceptions. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (temp));
++
++ temp >>= 16;
++ temp &= FE_ALL_EXCEPT;
++
++ /* Install new environment. */
++ fesetenv (envp);
++
++ /* Raise the saved exception. */
++ feraiseexcept ((int) temp);
++
++ /* Success. */
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fgetexcptflg.c uClibc-git/libm/metag/fgetexcptflg.c
+--- uClibc-0.9.33.2/libm/metag/fgetexcptflg.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fgetexcptflg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,34 @@
++/* Store current representation for exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++
++int
++fegetexceptflag (fexcept_t *flagp, int excepts)
++{
++ unsigned int temp;
++
++ /* Get the current exceptions. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (temp));
++
++ *flagp = temp & excepts & FE_ALL_EXCEPT;
++
++ /* Success. */
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/fraiseexcpt.c uClibc-git/libm/metag/fraiseexcpt.c
+--- uClibc-0.9.33.2/libm/metag/fraiseexcpt.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fraiseexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,92 @@
++/* Raise given exceptions.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <math.h>
++
++libm_hidden_proto(feraiseexcept)
++
++int
++feraiseexcept (int excepts)
++{
++ /* Raise exceptions represented by EXPECTS. But we must raise only
++ one signal at a time. It is important that if the overflow/underflow
++ exception and the inexact exception are given at the same time,
++ the overflow/underflow exception follows the inexact exception. */
++
++ /* First: invalid exception. */
++ if ((FE_INVALID & excepts) != 0)
++ {
++ /* Reciprocal square root of a negative number is invalid. */
++ __asm__ volatile(
++ "F MOV FX.0,#0xc000 ! -2\n"
++ "F RSQ FX.1,FX.0\n"
++ );
++ }
++
++ /* Next: division by zero. */
++ if ((FE_DIVBYZERO & excepts) != 0)
++ {
++ __asm__ volatile(
++ "F MOV FX.0,#0\n"
++ "F RCP FX.1,FX.0\n"
++ );
++ }
++
++ /* Next: overflow. */
++ if ((FE_OVERFLOW & excepts) != 0)
++ {
++ /* Adding a large number in single precision can cause overflow. */
++ __asm__ volatile(
++ " MOVT D0.0,#0x7f7f\n"
++ " ADD D0.0,D0.0,#0xffff\n"
++ "F MOV FX.0,D0.0\n"
++ "F ADD FX.1,FX.0,FX.0\n"
++ );
++ }
++
++ /* Next: underflow. */
++ if ((FE_UNDERFLOW & excepts) != 0)
++ {
++ /* Multiplying a small value by 0.5 will cause an underflow. */
++ __asm__ volatile(
++ " MOV D0.0,#1\n"
++ "F MOV FX.0,D0.0\n"
++ " MOVT D0.0,#0x3f00\n"
++ "F MOV FX.1,D0.0\n"
++ "F MUL FX.2,FX.1,FX.0\n"
++ );
++ }
++
++ /* Last: inexact. */
++ if ((FE_INEXACT & excepts) != 0)
++ {
++ /* Converting a small single precision value to half precision
++ can cause an inexact exception. */
++ __asm__ volatile(
++ " MOV D0.0,#0x0001\n"
++ "F MOV FX.0,D0.0\n"
++ "F FTOH FX.1,FX.0\n"
++ );
++ }
++
++ /* Success. */
++ return 0;
++}
++libm_hidden_def(feraiseexcept)
+diff -Nur uClibc-0.9.33.2/libm/metag/fsetexcptflg.c uClibc-git/libm/metag/fsetexcptflg.c
+--- uClibc-0.9.33.2/libm/metag/fsetexcptflg.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/fsetexcptflg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,44 @@
++/* Set floating-point environment exception handling.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <math.h>
++#include <unistd.h>
++
++#include "internal.h"
++
++int
++fesetexceptflag (const fexcept_t *flagp, int excepts)
++{
++ unsigned int temp;
++
++ /* Get the current exceptions. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (temp));
++
++ excepts &= FE_ALL_EXCEPT;
++ excepts <<= 16;
++
++ temp &= ~excepts;
++ temp |= *flagp & excepts;
++
++ metag_set_fpu_flags(temp);
++
++ /* Success. */
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/ftestexcept.c uClibc-git/libm/metag/ftestexcept.c
+--- uClibc-0.9.33.2/libm/metag/ftestexcept.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/ftestexcept.c 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,32 @@
++/* Test exception in current environment.
++ Copyright (C) 2013 Imagination Technologies Ltd.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <unistd.h>
++
++int
++fetestexcept (int excepts)
++{
++ unsigned int temp;
++
++ /* Get the current exceptions. */
++ __asm__ ("MOV %0,TXDEFR" : "=r" (temp));
++
++ return (temp >> 16) & excepts & FE_ALL_EXCEPT;
++}
+diff -Nur uClibc-0.9.33.2/libm/metag/internal.h uClibc-git/libm/metag/internal.h
+--- uClibc-0.9.33.2/libm/metag/internal.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/internal.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++void metag_set_fpu_flags(unsigned int flags);
+diff -Nur uClibc-0.9.33.2/libm/metag/Makefile.arch uClibc-git/libm/metag/Makefile.arch
+--- uClibc-0.9.33.2/libm/metag/Makefile.arch 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libm/metag/Makefile.arch 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,23 @@
++# Makefile for uClibc
++#
++# Copyright (c) 2013 Imagination Technologies Ltd.
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++ifeq ($(UCLIBC_HAS_FENV),y)
++ifeq ($(CONFIG_META_2_1),y)
++libm_ARCH_SRC:=$(wildcard $(libm_ARCH_DIR)/*.c)
++libm_ARCH_OBJ:=$(patsubst $(libm_ARCH_DIR)/%.c,$(libm_ARCH_OUT)/%.o,$(libm_ARCH_SRC))
++CFLAGS-libm += -Wa,-mfpu=metac21
++endif
++endif
++
++libm_ARCH_OBJS:=$(libm_ARCH_OBJ)
++
++ifeq ($(DOPIC),y)
++libm-a-y+=$(libm_ARCH_OBJS:.o=.os)
++else
++libm-a-y+=$(libm_ARCH_OBJS)
++endif
++libm-so-y+=$(libm_ARCH_OBJS:.o=.os)
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fclrexcpt.c uClibc-git/libm/powerpc/e500/fpu/fclrexcpt.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fclrexcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fclrexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #undef feclearexcept
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fedisblxcpt.c uClibc-git/libm/powerpc/e500/fpu/fedisblxcpt.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fedisblxcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fedisblxcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #include <syscall.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/feenablxcpt.c uClibc-git/libm/powerpc/e500/fpu/feenablxcpt.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/feenablxcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/feenablxcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #include <syscall.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fegetenv.c uClibc-git/libm/powerpc/e500/fpu/fegetenv.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fegetenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fegetenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #include <syscall.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fegetexcept.c uClibc-git/libm/powerpc/e500/fpu/fegetexcept.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fegetexcept.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fegetexcept.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fegetround.c uClibc-git/libm/powerpc/e500/fpu/fegetround.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fegetround.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fegetround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/feholdexcpt.c uClibc-git/libm/powerpc/e500/fpu/feholdexcpt.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/feholdexcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/feholdexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #include <syscall.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fe_nomask.c uClibc-git/libm/powerpc/e500/fpu/fe_nomask.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fe_nomask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fe_nomask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fenv.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fenv_const.c uClibc-git/libm/powerpc/e500/fpu/fenv_const.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fenv_const.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fenv_const.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* If the default argument is used we use this value. */
+ const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) =
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fenv_libc.h uClibc-git/libm/powerpc/e500/fpu/fenv_libc.h
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fenv_libc.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fenv_libc.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _FENV_LIBC_H
+ #define _FENV_LIBC_H 1
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fesetenv.c uClibc-git/libm/powerpc/e500/fpu/fesetenv.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fesetenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fesetenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #include <syscall.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fesetround.c uClibc-git/libm/powerpc/e500/fpu/fesetround.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fesetround.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fesetround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/feupdateenv.c uClibc-git/libm/powerpc/e500/fpu/feupdateenv.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/feupdateenv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/feupdateenv.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+ #include <syscall.h>
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fgetexcptflg.c uClibc-git/libm/powerpc/e500/fpu/fgetexcptflg.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fgetexcptflg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fgetexcptflg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fraiseexcpt.c uClibc-git/libm/powerpc/e500/fpu/fraiseexcpt.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fraiseexcpt.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fraiseexcpt.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/fsetexcptflg.c uClibc-git/libm/powerpc/e500/fpu/fsetexcptflg.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/fsetexcptflg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/fsetexcptflg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/fpu/ftestexcept.c uClibc-git/libm/powerpc/e500/fpu/ftestexcept.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/fpu/ftestexcept.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/fpu/ftestexcept.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/powerpc/e500/spe-raise.c uClibc-git/libm/powerpc/e500/spe-raise.c
+--- uClibc-0.9.33.2/libm/powerpc/e500/spe-raise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/powerpc/e500/spe-raise.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "fpu/fenv_libc.h"
+
+diff -Nur uClibc-0.9.33.2/libm/s_ceil.c uClibc-git/libm/s_ceil.c
+--- uClibc-0.9.33.2/libm/s_ceil.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_ceil.c 2014-02-03 12:32:56.000000000 +0100
+@@ -28,35 +28,35 @@
+
+ double ceil(double x)
+ {
+- int32_t i0,i1,j0;
++ int32_t i0,i1,_j0;
+ u_int32_t i,j;
+ EXTRACT_WORDS(i0,i1,x);
+- j0 = ((i0>>20)&0x7ff)-0x3ff;
+- if(j0<20) {
+- if(j0<0) { /* raise inexact if x != 0 */
++ _j0 = ((i0>>20)&0x7ff)-0x3ff;
++ if(_j0<20) {
++ if(_j0<0) { /* raise inexact if x != 0 */
+ if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
+ if(i0<0) {i0=0x80000000;i1=0;}
+ else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;}
+ }
+ } else {
+- i = (0x000fffff)>>j0;
++ i = (0x000fffff)>>_j0;
+ if(((i0&i)|i1)==0) return x; /* x is integral */
+ if(huge+x>0.0) { /* raise inexact flag */
+- if(i0>0) i0 += (0x00100000)>>j0;
++ if(i0>0) i0 += (0x00100000)>>_j0;
+ i0 &= (~i); i1=0;
+ }
+ }
+- } else if (j0>51) {
+- if(j0==0x400) return x+x; /* inf or NaN */
++ } else if (_j0>51) {
++ if(_j0==0x400) return x+x; /* inf or NaN */
+ else return x; /* x is integral */
+ } else {
+- i = ((u_int32_t)(0xffffffff))>>(j0-20);
++ i = ((u_int32_t)(0xffffffff))>>(_j0-20);
+ if((i1&i)==0) return x; /* x is integral */
+ if(huge+x>0.0) { /* raise inexact flag */
+ if(i0>0) {
+- if(j0==20) i0+=1;
++ if(_j0==20) i0+=1;
+ else {
+- j = i1 + (1<<(52-j0));
++ j = i1 + (1<<(52-_j0));
+ if(j<i1) i0+=1; /* got a carry */
+ i1 = j;
+ }
+diff -Nur uClibc-0.9.33.2/libm/s_floor.c uClibc-git/libm/s_floor.c
+--- uClibc-0.9.33.2/libm/s_floor.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_floor.c 2014-02-03 12:32:56.000000000 +0100
+@@ -28,36 +28,36 @@
+
+ double floor(double x)
+ {
+- int32_t i0,i1,j0;
++ int32_t i0,i1,_j0;
+ u_int32_t i,j;
+ EXTRACT_WORDS(i0,i1,x);
+- j0 = ((i0>>20)&0x7ff)-0x3ff;
+- if(j0<20) {
+- if(j0<0) { /* raise inexact if x != 0 */
++ _j0 = ((i0>>20)&0x7ff)-0x3ff;
++ if(_j0<20) {
++ if(_j0<0) { /* raise inexact if x != 0 */
+ if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
+ if(i0>=0) {i0=i1=0;}
+ else if(((i0&0x7fffffff)|i1)!=0)
+ { i0=0xbff00000;i1=0;}
+ }
+ } else {
+- i = (0x000fffff)>>j0;
++ i = (0x000fffff)>>_j0;
+ if(((i0&i)|i1)==0) return x; /* x is integral */
+ if(huge+x>0.0) { /* raise inexact flag */
+- if(i0<0) i0 += (0x00100000)>>j0;
++ if(i0<0) i0 += (0x00100000)>>_j0;
+ i0 &= (~i); i1=0;
+ }
+ }
+- } else if (j0>51) {
+- if(j0==0x400) return x+x; /* inf or NaN */
++ } else if (_j0>51) {
++ if(_j0==0x400) return x+x; /* inf or NaN */
+ else return x; /* x is integral */
+ } else {
+- i = ((u_int32_t)(0xffffffff))>>(j0-20);
++ i = ((u_int32_t)(0xffffffff))>>(_j0-20);
+ if((i1&i)==0) return x; /* x is integral */
+ if(huge+x>0.0) { /* raise inexact flag */
+ if(i0<0) {
+- if(j0==20) i0+=1;
++ if(_j0==20) i0+=1;
+ else {
+- j = i1+(1<<(52-j0));
++ j = i1+(1<<(52-_j0));
+ if(j<i1) i0 +=1 ; /* got a carry */
+ i1=j;
+ }
+diff -Nur uClibc-0.9.33.2/libm/s_fma.c uClibc-git/libm/s_fma.c
+--- uClibc-0.9.33.2/libm/s_fma.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_fma.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+
+diff -Nur uClibc-0.9.33.2/libm/s_fpclassify.c uClibc-git/libm/s_fpclassify.c
+--- uClibc-0.9.33.2/libm/s_fpclassify.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_fpclassify.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+
+diff -Nur uClibc-0.9.33.2/libm/s_fpclassifyf.c uClibc-git/libm/s_fpclassifyf.c
+--- uClibc-0.9.33.2/libm/s_fpclassifyf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_fpclassifyf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+ #include "math_private.h"
+diff -Nur uClibc-0.9.33.2/libm/s_llrint.c uClibc-git/libm/s_llrint.c
+--- uClibc-0.9.33.2/libm/s_llrint.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_llrint.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ /* Prevent math.h from defining a colliding inline */
+@@ -34,7 +33,7 @@
+ long long int
+ llrint (double x)
+ {
+- int32_t j0;
++ int32_t _j0;
+ u_int32_t i1, i0;
+ long long int result;
+ volatile double w;
+@@ -42,39 +41,39 @@
+ int sx;
+
+ EXTRACT_WORDS (i0, i1, x);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ sx = i0 >> 31;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- if (j0 < 20)
++ if (_j0 < 20)
+ {
+ w = two52[sx] + x;
+ t = w - two52[sx];
+ EXTRACT_WORDS (i0, i1, t);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- result = (j0 < 0 ? 0 : i0 >> (20 - j0));
++ result = (_j0 < 0 ? 0 : i0 >> (20 - _j0));
+ }
+- else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
++ else if (_j0 < (int32_t) (8 * sizeof (long long int)) - 1)
+ {
+- if (j0 >= 52)
+- result = (((long long int) i0 << 32) | i1) << (j0 - 52);
++ if (_j0 >= 52)
++ result = (((long long int) i0 << 32) | i1) << (_j0 - 52);
+ else
+ {
+ w = two52[sx] + x;
+ t = w - two52[sx];
+ EXTRACT_WORDS (i0, i1, t);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- if (j0 == 20)
++ if (_j0 == 20)
+ result = (long long int) i0;
+ else
+- result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
++ result = ((long long int) i0 << (_j0 - 20)) | (i1 >> (52 - _j0));
+ }
+ }
+ else
+diff -Nur uClibc-0.9.33.2/libm/s_llround.c uClibc-git/libm/s_llround.c
+--- uClibc-0.9.33.2/libm/s_llround.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_llround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+ #include "math_private.h"
+@@ -24,42 +23,42 @@
+ long long int
+ llround (double x)
+ {
+- int32_t j0;
++ int32_t _j0;
+ u_int32_t i1, i0;
+ long long int result;
+ int sign;
+
+ EXTRACT_WORDS (i0, i1, x);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ sign = (i0 & 0x80000000) != 0 ? -1 : 1;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- if (j0 < 20)
++ if (_j0 < 20)
+ {
+- if (j0 < 0)
+- return j0 < -1 ? 0 : sign;
++ if (_j0 < 0)
++ return _j0 < -1 ? 0 : sign;
+ else
+ {
+- i0 += 0x80000 >> j0;
++ i0 += 0x80000 >> _j0;
+
+- result = i0 >> (20 - j0);
++ result = i0 >> (20 - _j0);
+ }
+ }
+- else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
++ else if (_j0 < (int32_t) (8 * sizeof (long long int)) - 1)
+ {
+- if (j0 >= 52)
+- result = (((long long int) i0 << 32) | i1) << (j0 - 52);
++ if (_j0 >= 52)
++ result = (((long long int) i0 << 32) | i1) << (_j0 - 52);
+ else
+ {
+- u_int32_t j = i1 + (0x80000000 >> (j0 - 20));
++ u_int32_t j = i1 + (0x80000000 >> (_j0 - 20));
+ if (j < i1)
+ ++i0;
+
+- if (j0 == 20)
++ if (_j0 == 20)
+ result = (long long int) i0;
+ else
+- result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0));
++ result = ((long long int) i0 << (_j0 - 20)) | (j >> (52 - _j0));
+ }
+ }
+ else
+diff -Nur uClibc-0.9.33.2/libm/s_lrint.c uClibc-git/libm/s_lrint.c
+--- uClibc-0.9.33.2/libm/s_lrint.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_lrint.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ /* Prevent math.h from defining a colliding inline */
+@@ -35,7 +34,7 @@
+ long int
+ lrint (double x)
+ {
+- int32_t j0;
++ int32_t _j0;
+ u_int32_t i0,i1;
+ volatile double w;
+ double t;
+@@ -43,44 +42,44 @@
+ int sx;
+
+ EXTRACT_WORDS (i0, i1, x);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ sx = i0 >> 31;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- if (j0 < 20)
++ if (_j0 < 20)
+ {
+- if (j0 < -1)
++ if (_j0 < -1)
+ return 0;
+ else
+ {
+ w = two52[sx] + x;
+ t = w - two52[sx];
+ EXTRACT_WORDS (i0, i1, t);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- result = i0 >> (20 - j0);
++ result = i0 >> (20 - _j0);
+ }
+ }
+- else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
++ else if (_j0 < (int32_t) (8 * sizeof (long int)) - 1)
+ {
+- if (j0 >= 52)
+- result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
++ if (_j0 >= 52)
++ result = ((long int) i0 << (_j0 - 20)) | (i1 << (_j0 - 52));
+ else
+ {
+ w = two52[sx] + x;
+ t = w - two52[sx];
+ EXTRACT_WORDS (i0, i1, t);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- if (j0 == 20)
++ if (_j0 == 20)
+ result = (long int) i0;
+ else
+- result = ((long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
++ result = ((long int) i0 << (_j0 - 20)) | (i1 >> (52 - _j0));
+ }
+ }
+ else
+diff -Nur uClibc-0.9.33.2/libm/s_lround.c uClibc-git/libm/s_lround.c
+--- uClibc-0.9.33.2/libm/s_lround.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_lround.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+ #include "math_private.h"
+@@ -24,42 +23,42 @@
+ long int
+ lround (double x)
+ {
+- int32_t j0;
++ int32_t _j0;
+ u_int32_t i1, i0;
+ long int result;
+ int sign;
+
+ EXTRACT_WORDS (i0, i1, x);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+ sign = (i0 & 0x80000000) != 0 ? -1 : 1;
+ i0 &= 0xfffff;
+ i0 |= 0x100000;
+
+- if (j0 < 20)
++ if (_j0 < 20)
+ {
+- if (j0 < 0)
+- return j0 < -1 ? 0 : sign;
++ if (_j0 < 0)
++ return _j0 < -1 ? 0 : sign;
+ else
+ {
+- i0 += 0x80000 >> j0;
++ i0 += 0x80000 >> _j0;
+
+- result = i0 >> (20 - j0);
++ result = i0 >> (20 - _j0);
+ }
+ }
+- else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
++ else if (_j0 < (int32_t) (8 * sizeof (long int)) - 1)
+ {
+- if (j0 >= 52)
+- result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
++ if (_j0 >= 52)
++ result = ((long int) i0 << (_j0 - 20)) | (i1 << (_j0 - 52));
+ else
+ {
+- u_int32_t j = i1 + (0x80000000 >> (j0 - 20));
++ u_int32_t j = i1 + (0x80000000 >> (_j0 - 20));
+ if (j < i1)
+ ++i0;
+
+- if (j0 == 20)
++ if (_j0 == 20)
+ result = (long int) i0;
+ else
+- result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0));
++ result = ((long int) i0 << (_j0 - 20)) | (j >> (52 - _j0));
+ }
+ }
+ else
+diff -Nur uClibc-0.9.33.2/libm/s_modf.c uClibc-git/libm/s_modf.c
+--- uClibc-0.9.33.2/libm/s_modf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_modf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -26,16 +26,16 @@
+
+ double modf(double x, double *iptr)
+ {
+- int32_t i0,i1,j0;
++ int32_t i0,i1,_j0;
+ u_int32_t i;
+ EXTRACT_WORDS(i0,i1,x);
+- j0 = ((i0>>20)&0x7ff)-0x3ff; /* exponent of x */
+- if(j0<20) { /* integer part in high x */
+- if(j0<0) { /* |x|<1 */
++ _j0 = ((i0>>20)&0x7ff)-0x3ff; /* exponent of x */
++ if(_j0<20) { /* integer part in high x */
++ if(_j0<0) { /* |x|<1 */
+ INSERT_WORDS(*iptr,i0&0x80000000,0); /* *iptr = +-0 */
+ return x;
+ } else {
+- i = (0x000fffff)>>j0;
++ i = (0x000fffff)>>_j0;
+ if(((i0&i)|i1)==0) { /* x is integral */
+ *iptr = x;
+ INSERT_WORDS(x,i0&0x80000000,0); /* return +-0 */
+@@ -45,15 +45,15 @@
+ return x - *iptr;
+ }
+ }
+- } else if (j0>51) { /* no fraction part */
++ } else if (_j0>51) { /* no fraction part */
+ *iptr = x*one;
+ /* We must handle NaNs separately. */
+- if (j0 == 0x400 && ((i0 & 0xfffff) | i1))
++ if (_j0 == 0x400 && ((i0 & 0xfffff) | i1))
+ return x*one;
+ INSERT_WORDS(x,i0&0x80000000,0); /* return +-0 */
+ return x;
+ } else { /* fraction part in low x */
+- i = ((u_int32_t)(0xffffffff))>>(j0-20);
++ i = ((u_int32_t)(0xffffffff))>>(_j0-20);
+ if((i1&i)==0) { /* x is integral */
+ *iptr = x;
+ INSERT_WORDS(x,i0&0x80000000,0); /* return +-0 */
+diff -Nur uClibc-0.9.33.2/libm/s_rint.c uClibc-git/libm/s_rint.c
+--- uClibc-0.9.33.2/libm/s_rint.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_rint.c 2014-02-03 12:32:56.000000000 +0100
+@@ -30,7 +30,7 @@
+
+ double rint(double x)
+ {
+- int32_t i0, j0, sx;
++ int32_t i0, _j0, sx;
+ u_int32_t i,i1;
+ double t;
+ /* We use w = x + 2^52; t = w - 2^52; trick to round x to integer.
+@@ -43,11 +43,11 @@
+
+ EXTRACT_WORDS(i0,i1,x);
+ /* Unbiased exponent */
+- j0 = ((((u_int32_t)i0) >> 20)&0x7ff)-0x3ff;
++ _j0 = ((((u_int32_t)i0) >> 20)&0x7ff)-0x3ff;
+
+- if (j0 > 51) {
++ if (_j0 > 51) {
+ //Why bother? Just returning x works too
+- //if (j0 == 0x400) /* inf or NaN */
++ //if (_j0 == 0x400) /* inf or NaN */
+ // return x+x;
+ return x; /* x is integral */
+ }
+@@ -55,8 +55,8 @@
+ /* Sign */
+ sx = ((u_int32_t)i0) >> 31;
+
+- if (j0<20) {
+- if (j0<0) { /* |x| < 1 */
++ if (_j0<20) {
++ if (_j0<0) { /* |x| < 1 */
+ if (((i0&0x7fffffff)|i1)==0) return x;
+ i1 |= (i0&0x0fffff);
+ i0 &= 0xfffe0000;
+@@ -68,19 +68,19 @@
+ SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
+ return t;
+ } else {
+- i = (0x000fffff)>>j0;
++ i = (0x000fffff)>>_j0;
+ if (((i0&i)|i1)==0) return x; /* x is integral */
+ i>>=1;
+ if (((i0&i)|i1)!=0) {
+- if (j0==19) i1 = 0x40000000;
+- else i0 = (i0&(~i))|((0x20000)>>j0);
++ if (_j0==19) i1 = 0x40000000;
++ else i0 = (i0&(~i))|((0x20000)>>_j0);
+ }
+ }
+ } else {
+- i = ((u_int32_t)(0xffffffff))>>(j0-20);
++ i = ((u_int32_t)(0xffffffff))>>(_j0-20);
+ if ((i1&i)==0) return x; /* x is integral */
+ i>>=1;
+- if ((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
++ if ((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(_j0-20));
+ }
+ INSERT_WORDS(x,i0,i1);
+ w = TWO52[sx]+x;
+diff -Nur uClibc-0.9.33.2/libm/s_round.c uClibc-git/libm/s_round.c
+--- uClibc-0.9.33.2/libm/s_round.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_round.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+ #include "math_private.h"
+@@ -26,41 +25,41 @@
+ double
+ round (double x)
+ {
+- int32_t i0, j0;
++ int32_t i0, _j0;
+ u_int32_t i1;
+
+ EXTRACT_WORDS (i0, i1, x);
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+- if (j0 < 20)
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ if (_j0 < 20)
+ {
+- if (j0 < 0)
++ if (_j0 < 0)
+ {
+ if (huge + x > 0.0)
+ {
+ i0 &= 0x80000000;
+- if (j0 == -1)
++ if (_j0 == -1)
+ i0 |= 0x3ff00000;
+ i1 = 0;
+ }
+ }
+ else
+ {
+- u_int32_t i = 0x000fffff >> j0;
++ u_int32_t i = 0x000fffff >> _j0;
+ if (((i0 & i) | i1) == 0)
+ /* X is integral. */
+ return x;
+ if (huge + x > 0.0)
+ {
+ /* Raise inexact if x != 0. */
+- i0 += 0x00080000 >> j0;
++ i0 += 0x00080000 >> _j0;
+ i0 &= ~i;
+ i1 = 0;
+ }
+ }
+ }
+- else if (j0 > 51)
++ else if (_j0 > 51)
+ {
+- if (j0 == 0x400)
++ if (_j0 == 0x400)
+ /* Inf or NaN. */
+ return x + x;
+ else
+@@ -68,7 +67,7 @@
+ }
+ else
+ {
+- u_int32_t i = 0xffffffff >> (j0 - 20);
++ u_int32_t i = 0xffffffff >> (_j0 - 20);
+ if ((i1 & i) == 0)
+ /* X is integral. */
+ return x;
+@@ -76,7 +75,7 @@
+ if (huge + x > 0.0)
+ {
+ /* Raise inexact if x != 0. */
+- u_int32_t j = i1 + (1 << (51 - j0));
++ u_int32_t j = i1 + (1 << (51 - _j0));
+ if (j < i1)
+ i0 += 1;
+ i1 = j;
+diff -Nur uClibc-0.9.33.2/libm/s_scalbn.c uClibc-git/libm/s_scalbn.c
+--- uClibc-0.9.33.2/libm/s_scalbn.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_scalbn.c 2014-02-03 12:32:56.000000000 +0100
+@@ -62,12 +62,7 @@
+ libm_hidden_def(scalbln)
+
+ #if LONG_MAX == INT_MAX
+-/* strong_alias(scalbln, scalbn) - "error: conflicting types for 'scalbn'"
+- * because it tries to declare "typeof(scalbln) scalbn;"
+- * which tries to give "long" parameter to scalbn.
+- * Doing it by hand:
+- */
+-__typeof(scalbn) scalbn __attribute__((alias("scalbln")));
++strong_alias_untyped(scalbln,scalbn)
+ #else
+ double scalbn(double x, int n)
+ {
+diff -Nur uClibc-0.9.33.2/libm/s_signbit.c uClibc-git/libm/s_signbit.c
+--- uClibc-0.9.33.2/libm/s_signbit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_signbit.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ /* Prevent math.h from defining a colliding inline */
+diff -Nur uClibc-0.9.33.2/libm/s_signbitf.c uClibc-git/libm/s_signbitf.c
+--- uClibc-0.9.33.2/libm/s_signbitf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_signbitf.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ /* Prevent math.h from defining a colliding inline */
+diff -Nur uClibc-0.9.33.2/libm/s_significand.c uClibc-git/libm/s_significand.c
+--- uClibc-0.9.33.2/libm/s_significand.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_significand.c 2014-02-03 12:32:56.000000000 +0100
+@@ -22,3 +22,4 @@
+ {
+ return __ieee754_scalb(x,(double) -ilogb(x));
+ }
++libm_hidden_def(significand)
+diff -Nur uClibc-0.9.33.2/libm/s_trunc.c uClibc-git/libm/s_trunc.c
+--- uClibc-0.9.33.2/libm/s_trunc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libm/s_trunc.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <math.h>
+ #include "math_private.h"
+@@ -24,30 +23,30 @@
+ double
+ trunc (double x)
+ {
+- int32_t i0, j0;
++ int32_t i0, _j0;
+ u_int32_t i1;
+ int sx;
+
+ EXTRACT_WORDS (i0, i1, x);
+ sx = i0 & 0x80000000;
+- j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+- if (j0 < 20)
++ _j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
++ if (_j0 < 20)
+ {
+- if (j0 < 0)
++ if (_j0 < 0)
+ /* The magnitude of the number is < 1 so the result is +-0. */
+ INSERT_WORDS (x, sx, 0);
+ else
+- INSERT_WORDS (x, sx | (i0 & ~(0x000fffff >> j0)), 0);
++ INSERT_WORDS (x, sx | (i0 & ~(0x000fffff >> _j0)), 0);
+ }
+- else if (j0 > 51)
++ else if (_j0 > 51)
+ {
+- if (j0 == 0x400)
++ if (_j0 == 0x400)
+ /* x is inf or NaN. */
+ return x + x;
+ }
+ else
+ {
+- INSERT_WORDS (x, i0, i1 & ~(0xffffffffu >> (j0 - 20)));
++ INSERT_WORDS (x, i0, i1 & ~(0xffffffffu >> (_j0 - 20)));
+ }
+
+ return x;
+diff -Nur uClibc-0.9.33.2/libnsl/nsl.c uClibc-git/libnsl/nsl.c
+--- uClibc-0.9.33.2/libnsl/nsl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libnsl/nsl.c 2014-02-03 12:32:56.000000000 +0100
+@@ -7,8 +7,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-
+ void __stub2(void);
+ void __stub2(void)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/alloca_cutoff.c uClibc-git/libpthread/linuxthreads/alloca_cutoff.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/alloca_cutoff.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/alloca_cutoff.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <alloca.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/attr.c uClibc-git/libpthread/linuxthreads/attr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/attr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/attr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -361,7 +361,7 @@
+ attr->__scope = PTHREAD_SCOPE_SYSTEM;
+
+ #ifdef _STACK_GROWS_DOWN
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ attr->__stacksize = descr->p_stackaddr - (char *)descr->p_guardaddr
+ - descr->p_guardsize;
+ # else
+@@ -369,7 +369,7 @@
+ - descr->p_guardsize;
+ # endif
+ #else
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ attr->__stacksize = (char *)descr->p_guardaddr - descr->p_stackaddr;
+ # else
+ attr->__stacksize = (char *)descr->p_guardaddr - (char *)descr;
+@@ -385,7 +385,7 @@
+ otherwise the range of the stack area cannot be computed. */
+ attr->__stacksize += attr->__guardsize;
+ #endif
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ attr->__stackaddr = descr->p_stackaddr;
+ #else
+ # ifndef _STACK_GROWS_UP
+@@ -395,7 +395,7 @@
+ # endif
+ #endif
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ if (attr->__stackaddr == NULL)
+ #else
+ if (descr == &__pthread_initial_thread)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/barrier.c uClibc-git/libpthread/linuxthreads/barrier.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/barrier.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/barrier.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthread.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/cancel.c uClibc-git/libpthread/linuxthreads/cancel.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/cancel.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/cancel.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,7 +15,6 @@
+ /* Thread cancellation */
+
+ #include <errno.h>
+-#include <libc-internal.h>
+ #include "pthread.h"
+ #include "internals.h"
+ #include "spinlock.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/.cvsignore uClibc-git/libpthread/linuxthreads/.cvsignore
+--- uClibc-0.9.33.2/libpthread/linuxthreads/.cvsignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/.cvsignore 1970-01-01 01:00:00.000000000 +0100
+@@ -1,3 +0,0 @@
+-.cvsignore
+-*.os
+-Makefile.in
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/descr.h uClibc-git/libpthread/linuxthreads/descr.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/descr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/descr.h 2014-02-03 12:32:56.000000000 +0100
+@@ -23,7 +23,7 @@
+ #include <stdint.h>
+ #include <sys/types.h>
+ #include <hp-timing.h>
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ #include <tls.h>
+ #endif
+ #include "uClibc-glue.h"
+@@ -112,7 +112,7 @@
+
+ struct _pthread_descr_struct
+ {
+-#if !defined USE_TLS || !TLS_DTV_AT_TP || INCLUDE_TLS_PADDING
++#if !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP || INCLUDE_TLS_PADDING
+ /* This overlaps tcbhead_t (see tls.h), as used for TLS without threads. */
+ union
+ {
+@@ -157,7 +157,7 @@
+ char p_sigwaiting; /* true if a sigwait() is in progress */
+ struct pthread_start_args p_start_args; /* arguments for thread creation */
+ void ** p_specific[PTHREAD_KEY_1STLEVEL_SIZE]; /* thread-specific data */
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ void * p_libc_specific[_LIBC_TSD_KEY_N]; /* thread-specific data for libc */
+ int * p_errnop; /* pointer to used errno variable */
+ int p_errno; /* error returned by last system call */
+@@ -185,7 +185,7 @@
+ #if HP_TIMING_AVAIL
+ hp_timing_t p_cpuclock_offset; /* Initial CPU clock for thread. */
+ #endif
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ char *p_stackaddr; /* Stack address. */
+ #endif
+ size_t p_alloca_cutoff; /* Maximum size which should be allocated
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/errno.c uClibc-git/libpthread/linuxthreads/errno.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/errno.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/errno.c 2014-02-03 12:32:56.000000000 +0100
+@@ -20,7 +20,7 @@
+ #include "pthread.h"
+ #include "internals.h"
+
+-#if !USE_TLS || !HAVE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ /* The definition in libc is sufficient if we use TLS. */
+ int *
+ __errno_location (void)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/events.c uClibc-git/libpthread/linuxthreads/events.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/events.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/events.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The functions contained here do nothing, they just return. */
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/forward.c uClibc-git/libpthread/linuxthreads/forward.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/forward.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/forward.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <stdlib.h>
+@@ -26,7 +25,7 @@
+ #include "internals.h"
+
+ /* Pointers to the libc functions. */
+-struct pthread_functions __libc_pthread_functions attribute_hidden;
++struct pthread_functions __libc_pthread_functions;
+
+
+ # define FORWARD2(name, rettype, decl, params, defaction) \
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/internals.h uClibc-git/libpthread/linuxthreads/internals.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/internals.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/internals.h 2014-02-03 12:32:56.000000000 +0100
+@@ -30,7 +30,7 @@
+ #include <bits/sigcontextinfo.h>
+ #include <bits/pthreadtypes.h>
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ #include <tls.h>
+ #endif
+ #include "descr.h"
+@@ -200,19 +200,17 @@
+
+ /* The page size we can get from the system. This should likely not be
+ changed by the machine file but, you never know. */
+-#ifndef PAGE_SIZE
+-#define PAGE_SIZE (sysconf (_SC_PAGE_SIZE))
+-#endif
++#define __PAGE_SIZE (sysconf (_SC_PAGESIZE))
+
+-/* The initial size of the thread stack. Must be a multiple of PAGE_SIZE. */
++/* The initial size of the thread stack. Must be a multiple of __PAGE_SIZE. */
+ #ifndef INITIAL_STACK_SIZE
+-#define INITIAL_STACK_SIZE (4 * PAGE_SIZE)
++#define INITIAL_STACK_SIZE (4 * __PAGE_SIZE)
+ #endif
+
+ /* Size of the thread manager stack. The "- 32" avoids wasting space
+ with some malloc() implementations. */
+ #ifndef THREAD_MANAGER_STACK_SIZE
+-#define THREAD_MANAGER_STACK_SIZE (2 * PAGE_SIZE - 32)
++#define THREAD_MANAGER_STACK_SIZE (2 * __PAGE_SIZE - 32)
+ #endif
+
+ /* The base of the "array" of thread stacks. The array will grow down from
+@@ -285,7 +283,7 @@
+ extern void __pthread_perform_cleanup (char *currentframe);
+ extern void __pthread_init_max_stacksize (void);
+ extern int __pthread_initialize_manager (void);
+-extern void __pthread_message (const char * fmt, ...);
++extern void __pthread_message (const char * fmt, ...) attribute_hidden;
+ extern int __pthread_manager (void *reqfd);
+ extern int __pthread_manager_event (void *reqfd);
+ extern void __pthread_manager_sighandler (int sig);
+@@ -347,7 +345,7 @@
+ int *__kind);
+ extern void __pthread_kill_other_threads_np (void);
+ extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutex_attr);
++ const pthread_mutexattr_t *__mutex_attr);
+ extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+ extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
+ extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
+@@ -393,14 +391,14 @@
+ extern void __pthread_sigsuspend (const sigset_t *mask) attribute_hidden;
+
+ extern int __pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime);
+ extern int __pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime);
+ extern int __pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr);
+
+-extern int __pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
++extern int __pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+ __restrict __attr,
+ int *__restrict __pshared);
+
+@@ -440,10 +438,12 @@
+ extern void __pthread_initialize (void);
+
+ /* TSD. */
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+ extern int __pthread_internal_tsd_set (int key, const void * pointer);
+ extern void * __pthread_internal_tsd_get (int key);
+ extern void ** __attribute__ ((__const__))
+ __pthread_internal_tsd_address (int key);
++#endif
+
+ /* Sighandler wrappers. */
+ extern void __pthread_sighandler(int signo, SIGCONTEXT ctx);
+@@ -508,8 +508,6 @@
+ # define LIBC_CANCEL_HANDLED() /* Nothing. */
+ #endif
+
+-extern int * __libc_pthread_init (const struct pthread_functions *functions);
+-
+ #if !defined NOT_IN_libc && !defined FLOATING_STACKS
+ # ifdef SHARED
+ # define thread_self() \
+@@ -520,7 +518,7 @@
+ # endif
+ #endif
+
+-#ifndef USE_TLS
++#ifndef __UCLIBC_HAS_TLS__
+ # define __manager_thread (&__pthread_manager_thread)
+ #else
+ # define __manager_thread __pthread_manager_threadp
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/libc-cancellation.c uClibc-git/libpthread/linuxthreads/libc-cancellation.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/libc-cancellation.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/libc-cancellation.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <rpc/rpc.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/libc_pthread_init.c uClibc-git/libpthread/linuxthreads/libc_pthread_init.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/libc_pthread_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/libc_pthread_init.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,14 +13,13 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <locale.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ #include <tls.h>
+ #endif
+ #include "internals.h"
+@@ -31,8 +30,7 @@
+
+
+ int *
+-__libc_pthread_init (functions)
+- const struct pthread_functions *functions;
++__libc_pthread_init(const struct pthread_functions *functions)
+ {
+ #ifdef SHARED
+ /* We copy the content of the variable pointed to by the FUNCTIONS
+@@ -42,7 +40,7 @@
+ sizeof (__libc_pthread_functions));
+ #endif
+
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ /* Initialize thread-locale current locale to point to the global one.
+ With __thread support, the variable's initializer takes care of this. */
+ __uselocale (LC_GLOBAL_LOCALE);
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/lockfile.c uClibc-git/libpthread/linuxthreads/lockfile.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/lockfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/lockfile.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <bits/libc-lock.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/manager.c uClibc-git/libpthread/linuxthreads/manager.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/manager.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/manager.c 2014-02-03 12:32:56.000000000 +0100
+@@ -126,7 +126,7 @@
+ #ifdef INIT_THREAD_SELF
+ INIT_THREAD_SELF(self, 1);
+ #endif
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ /* Set the error variable. */
+ self->p_errnop = &self->p_errno;
+ self->p_h_errnop = &self->p_h_errno;
+@@ -289,7 +289,7 @@
+ __sched_setscheduler(THREAD_GETMEM(self, p_pid),
+ SCHED_OTHER, &default_params);
+ }
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ /* Initialize thread-locale current locale to point to the global one.
+ With __thread support, the variable's initializer takes care of this. */
+ __uselocale (LC_GLOBAL_LOCALE);
+@@ -333,7 +333,7 @@
+ pthread_start_thread (arg);
+ }
+
+-#if defined USE_TLS && !FLOATING_STACKS
++#if defined __UCLIBC_HAS_TLS__ && !FLOATING_STACKS
+ # error "TLS can only work with floating stacks"
+ #endif
+
+@@ -351,7 +351,7 @@
+ char * guardaddr;
+ size_t stacksize, guardsize;
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ /* TLS cannot work with fixed thread descriptor addresses. */
+ assert (default_new_thread == NULL);
+ #endif
+@@ -360,7 +360,7 @@
+ {
+ #ifdef _STACK_GROWS_UP
+ /* The user provided a stack. */
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ /* This value is not needed. */
+ new_thread = (pthread_descr) attr->__stackaddr;
+ new_thread_bottom = (char *) new_thread;
+@@ -381,7 +381,7 @@
+ addresses, stackaddr would be the lowest address in the stack
+ segment, so that it is consistently close to the initial sp
+ value. */
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ new_thread = (pthread_descr) attr->__stackaddr;
+ # else
+ new_thread =
+@@ -394,7 +394,7 @@
+ #ifndef THREAD_SELF
+ __pthread_nonstandard_stacks = 1;
+ #endif
+-#ifndef USE_TLS
++#ifndef __UCLIBC_HAS_TLS__
+ /* Clear the thread data structure. */
+ memset (new_thread, '\0', sizeof (*new_thread));
+ #endif
+@@ -438,7 +438,7 @@
+ mprotect (guardaddr, guardsize, PROT_NONE);
+
+ new_thread_bottom = (char *) map_addr;
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ new_thread = ((pthread_descr) (new_thread_bottom + stacksize
+ + guardsize));
+ # else
+@@ -451,7 +451,7 @@
+ mprotect (guardaddr, guardsize, PROT_NONE);
+
+ new_thread_bottom = (char *) map_addr + guardsize;
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ new_thread = ((pthread_descr) (new_thread_bottom + stacksize));
+ # else
+ new_thread = ((pthread_descr) (new_thread_bottom + stacksize)) - 1;
+@@ -462,7 +462,7 @@
+ mprotect (guardaddr, guardsize, PROT_NONE);
+
+ new_thread = (pthread_descr) map_addr;
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ new_thread_bottom = (char *) new_thread;
+ # else
+ new_thread_bottom = (char *) (new_thread + 1);
+@@ -597,7 +597,7 @@
+ int pagesize = __getpagesize();
+ int saved_errno = 0;
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ new_thread = _dl_allocate_tls (NULL);
+ if (new_thread == NULL)
+ return EAGAIN;
+@@ -621,7 +621,7 @@
+ {
+ if (sseg >= PTHREAD_THREADS_MAX)
+ {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ # if defined(TLS_DTV_AT_TP)
+ new_thread = (pthread_descr) ((char *) new_thread + TLS_PRE_TCB_SIZE);
+ # endif
+@@ -635,7 +635,7 @@
+ pagesize, &stack_addr, &new_thread_bottom,
+ &guardaddr, &guardsize, &stksize) == 0)
+ {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ new_thread->p_stackaddr = stack_addr;
+ #else
+ new_thread = (pthread_descr) stack_addr;
+@@ -657,18 +657,18 @@
+ new_thread_id = sseg + pthread_threads_counter;
+ /* Initialize the thread descriptor. Elements which have to be
+ initialized to zero already have this value. */
+-#if !defined USE_TLS || !TLS_DTV_AT_TP
++#if !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP
+ new_thread->p_header.data.tcb = new_thread;
+ new_thread->p_header.data.self = new_thread;
+ #endif
+-#if TLS_MULTIPLE_THREADS_IN_TCB || !defined USE_TLS || !TLS_DTV_AT_TP
++#if TLS_MULTIPLE_THREADS_IN_TCB || !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP
+ new_thread->p_multiple_threads = 1;
+ #endif
+ new_thread->p_tid = new_thread_id;
+ new_thread->p_lock = &(__pthread_handles[sseg].h_lock);
+ new_thread->p_cancelstate = PTHREAD_CANCEL_ENABLE;
+ new_thread->p_canceltype = PTHREAD_CANCEL_DEFERRED;
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ new_thread->p_errnop = &new_thread->p_errno;
+ new_thread->p_h_errnop = &new_thread->p_h_errno;
+ new_thread->p_resp = &new_thread->p_res;
+@@ -807,7 +807,7 @@
+ munmap((caddr_t)new_thread_bottom,
+ 2 * stacksize + new_thread->p_guardsize);
+ #elif defined _STACK_GROWS_UP
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ size_t stacksize = guardaddr - stack_addr;
+ munmap(stack_addr, stacksize + guardsize);
+ # else
+@@ -815,7 +815,7 @@
+ munmap(new_thread, stacksize + guardsize);
+ # endif
+ #else
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ size_t stacksize = stack_addr - new_thread_bottom;
+ # else
+ size_t stacksize = (char *)(new_thread+1) - new_thread_bottom;
+@@ -823,7 +823,7 @@
+ munmap(new_thread_bottom - guardsize, guardsize + stacksize);
+ #endif
+ }
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ # if defined(TLS_DTV_AT_TP)
+ new_thread = (pthread_descr) ((char *) new_thread + TLS_PRE_TCB_SIZE);
+ # endif
+@@ -890,7 +890,7 @@
+ /* Free the stack and thread descriptor area */
+ char *guardaddr = th->p_guardaddr;
+ #ifdef _STACK_GROWS_UP
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ size_t stacksize = guardaddr - th->p_stackaddr;
+ guardaddr = th->p_stackaddr;
+ # else
+@@ -900,7 +900,7 @@
+ #else
+ /* Guardaddr is always set, even if guardsize is 0. This allows
+ us to compute everything else. */
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ size_t stacksize = th->p_stackaddr - guardaddr - guardsize;
+ # else
+ size_t stacksize = (char *)(th+1) - guardaddr - guardsize;
+@@ -916,7 +916,7 @@
+
+ }
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ # if defined(TLS_DTV_AT_TP)
+ th = (pthread_descr) ((char *) th + TLS_PRE_TCB_SIZE);
+ # endif
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/ptcleanup.c uClibc-git/libpthread/linuxthreads/ptcleanup.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/ptcleanup.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/ptcleanup.c 2014-02-03 12:32:56.000000000 +0100
+@@ -20,8 +20,8 @@
+ #include <setjmp.h>
+ #include "pthread.h"
+ #include "internals.h"
+-#ifndef NO_PTR_DEMANGLE
+ #include <jmpbuf-unwind.h>
++#ifndef NO_PTR_DEMANGLE
+ #define __JMPBUF_UNWINDS(a,b,c) _JMPBUF_UNWINDS(a,b,c)
+ #else
+ #define __JMPBUF_UNWINDS(a,b,c) _JMPBUF_UNWINDS(a,b)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/ptclock_gettime.c uClibc-git/libpthread/linuxthreads/ptclock_gettime.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/ptclock_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/ptclock_gettime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,13 +12,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <time.h>
+-#include <libc-internal.h>
+ #include "internals.h"
+ #include "spinlock.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/ptclock_settime.c uClibc-git/libpthread/linuxthreads/ptclock_settime.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/ptclock_settime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/ptclock_settime.c 2014-02-03 12:32:56.000000000 +0100
+@@ -12,13 +12,11 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <time.h>
+-#include <libc-internal.h>
+ #include "internals.h"
+ #include "spinlock.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/ptfork.c uClibc-git/libpthread/linuxthreads/ptfork.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/ptfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/ptfork.c 2014-02-03 12:32:56.000000000 +0100
+@@ -23,8 +23,6 @@
+ #include <bits/libc-lock.h>
+ #include "fork.h"
+
+-extern int __libc_fork (void);
+-
+ pid_t __pthread_fork (struct fork_block *b)
+ {
+ pid_t pid;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_atfork.c uClibc-git/libpthread/linuxthreads/pthread_atfork.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_atfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_atfork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "internals.h"
+ #include <fork.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread.c uClibc-git/libpthread/linuxthreads/pthread.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread.c 2014-02-03 12:32:56.000000000 +0100
+@@ -37,10 +37,7 @@
+ # error "This must not happen"
+ #endif
+
+-/* mods for uClibc: __libc_sigaction is not in any standard headers */
+-extern __typeof(sigaction) __libc_sigaction;
+-
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ /* These variables are used by the setup code. */
+ extern int _errno;
+ extern int _h_errno;
+@@ -53,7 +50,7 @@
+ # endif
+ #endif
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+
+ /* We need only a few variables. */
+ #define manager_thread __pthread_manager_threadp
+@@ -70,7 +67,7 @@
+ .p_tid = PTHREAD_THREADS_MAX,
+ .p_lock = &__pthread_handles[0].h_lock,
+ .p_start_args = PTHREAD_START_ARGS_INITIALIZER(NULL),
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ .p_errnop = &_errno,
+ .p_h_errnop = &_h_errno,
+ #endif
+@@ -89,7 +86,7 @@
+ .p_header.data.multiple_threads = 1,
+ .p_lock = &__pthread_handles[1].h_lock,
+ .p_start_args = PTHREAD_START_ARGS_INITIALIZER(__pthread_manager),
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ .p_errnop = &__pthread_manager_thread.p_errno,
+ #endif
+ .p_nr = 1,
+@@ -101,7 +98,7 @@
+ /* Pointer to the main thread (the father of the thread manager thread) */
+ /* Originally, this is the initial thread, but this changes after fork() */
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ pthread_descr __pthread_main_thread;
+ #else
+ pthread_descr __pthread_main_thread = &__pthread_initial_thread;
+@@ -227,13 +224,13 @@
+ #endif
+
+
+-#if defined USE_TLS && !defined SHARED
++#if defined __UCLIBC_HAS_TLS__ && !defined SHARED
+ extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
+ #endif
+
+ struct pthread_functions __pthread_functions =
+ {
+-#if !(USE_TLS && HAVE___THREAD)
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+ .ptr_pthread_internal_tsd_set = __pthread_internal_tsd_set,
+ .ptr_pthread_internal_tsd_get = __pthread_internal_tsd_get,
+ .ptr_pthread_internal_tsd_address = __pthread_internal_tsd_address,
+@@ -295,7 +292,7 @@
+ void
+ __pthread_initialize_minimal(void)
+ {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ pthread_descr self;
+
+ /* First of all init __pthread_handles[0] and [1] if needed. */
+@@ -307,7 +304,7 @@
+ /* Unlike in the dynamically linked case the dynamic linker has not
+ taken care of initializing the TLS data structures. */
+ __libc_setup_tls (TLS_TCB_SIZE, TLS_TCB_ALIGN);
+-# elif !USE___THREAD
++# elif !defined __UCLIBC_HAS_TLS__
+ if (__builtin_expect (GL(dl_tls_dtv_slotinfo_list) == NULL, 0))
+ {
+ tcbhead_t *tcbp;
+@@ -363,7 +360,7 @@
+ self->p_nextlive = self->p_prevlive = self;
+ self->p_tid = PTHREAD_THREADS_MAX;
+ self->p_lock = &__pthread_handles[0].h_lock;
+-# ifndef HAVE___THREAD
++# ifndef __UCLIBC_HAS_TLS__
+ self->p_errnop = &_errno;
+ self->p_h_errnop = &_h_errno;
+ # endif
+@@ -380,7 +377,7 @@
+ /* And fill in the pointer the the thread __pthread_handles array. */
+ __pthread_handles[0].h_descr = self;
+
+-#else /* USE_TLS */
++#else /* __UCLIBC_HAS_TLS__ */
+
+ /* First of all init __pthread_handles[0] and [1]. */
+ # if __LT_SPINLOCK_INIT != 0
+@@ -398,7 +395,7 @@
+ #endif
+
+ #if HP_TIMING_AVAIL
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ self->p_cpuclock_offset = GL(dl_cpuclock_offset);
+ # else
+ __pthread_initial_thread.p_cpuclock_offset = GL(dl_cpuclock_offset);
+@@ -442,7 +439,7 @@
+ __pthread_max_stacksize = max_stack;
+ if (max_stack / 4 < __MAX_ALLOCA_CUTOFF)
+ {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ pthread_descr self = THREAD_SELF;
+ self->p_alloca_cutoff = max_stack / 4;
+ #else
+@@ -451,10 +448,8 @@
+ }
+ }
+
+-/* psm: we do not have any ld.so support yet
+- * remove the USE_TLS guard if nptl is added */
+-#if defined SHARED && defined USE_TLS
+-# if USE___THREAD
++#if defined SHARED && defined __UCLIBC_HAS_TLS__
++# ifdef __UCLIBC_HAS_TLS__
+ /* When using __thread for this, we do it in libc so as not
+ to give libpthread its own TLS segment just for this. */
+ extern void **__libc_dl_error_tsd (void) __attribute__ ((const));
+@@ -467,7 +462,7 @@
+ # endif
+ #endif
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ static __inline__ void __attribute__((always_inline))
+ init_one_static_tls (pthread_descr descr, struct link_map *map)
+ {
+@@ -486,7 +481,7 @@
+ dtv[map->l_tls_modid].pointer.is_static = true;
+
+ /* Initialize the memory. */
+- memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
++ memset (mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
+ '\0', map->l_tls_blocksize - map->l_tls_initimage_size);
+ }
+
+@@ -536,10 +531,10 @@
+ (char *)(((long)CURRENT_STACK_FRAME - 2 * STACK_SIZE) & ~(STACK_SIZE - 1));
+ # endif
+ #endif
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ /* Update the descriptor for the initial thread. */
+ THREAD_SETMEM (((pthread_descr) NULL), p_pid, __getpid());
+-# if !defined HAVE___THREAD && defined __UCLIBC_HAS_RESOLVER_SUPPORT__
++# if defined __UCLIBC_HAS_RESOLVER_SUPPORT__
+ /* Likewise for the resolver state _res. */
+ THREAD_SETMEM (((pthread_descr) NULL), p_resp, __resp);
+ # endif
+@@ -590,9 +585,7 @@
+ /* How many processors. */
+ __pthread_smp_kernel = is_smp_system ();
+
+-/* psm: we do not have any ld.so support yet
+- * remove the USE_TLS guard if nptl is added */
+-#if defined SHARED && defined USE_TLS
++#if defined SHARED && defined __UCLIBC_HAS_TLS__
+ /* Transfer the old value from the dynamic linker's internal location. */
+ *__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
+ GL(dl_error_catch_tsd) = &__libc_dl_error_tsd;
+@@ -607,7 +600,7 @@
+ __pthread_mutex_lock (&GL(dl_load_lock).mutex);
+ #endif
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ GL(dl_init_static_tls) = &__pthread_init_static_tls;
+ #endif
+
+@@ -635,12 +628,12 @@
+ struct pthread_request request;
+ int report_events;
+ pthread_descr mgr;
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ tcbhead_t *tcbp;
+ #endif
+
+ __pthread_multiple_threads = 1;
+-#if TLS_MULTIPLE_THREADS_IN_TCB || !defined USE_TLS || !TLS_DTV_AT_TP
++#if TLS_MULTIPLE_THREADS_IN_TCB || !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP
+ __pthread_main_thread->p_multiple_threads = 1;
+ #endif
+ *__libc_multiple_threads_ptr = 1;
+@@ -667,7 +660,7 @@
+ return -1;
+ }
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ /* Allocate memory for the thread descriptor and the dtv. */
+ tcbp = _dl_allocate_tls (NULL);
+ if (tcbp == NULL) {
+@@ -687,7 +680,7 @@
+ __pthread_handles[1].h_descr = manager_thread = mgr;
+
+ /* Initialize the descriptor. */
+-#if !defined USE_TLS || !TLS_DTV_AT_TP
++#if !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP
+ mgr->p_header.data.tcb = tcbp;
+ mgr->p_header.data.self = mgr;
+ mgr->p_header.data.multiple_threads = 1;
+@@ -695,7 +688,7 @@
+ mgr->p_multiple_threads = 1;
+ #endif
+ mgr->p_lock = &__pthread_handles[1].h_lock;
+-# ifndef HAVE___THREAD
++# ifndef __UCLIBC_HAS_TLS__
+ mgr->p_errnop = &mgr->p_errno;
+ # endif
+ mgr->p_start_args = (struct pthread_start_args) PTHREAD_START_ARGS_INITIALIZER(__pthread_manager);
+@@ -713,7 +706,7 @@
+
+ /* Start the thread manager */
+ pid = 0;
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ if (__linuxthreads_initial_report_events != 0)
+ THREAD_SETMEM (((pthread_descr) NULL), p_report_events,
+ __linuxthreads_initial_report_events);
+@@ -732,7 +725,7 @@
+ uint32_t mask = __td_eventmask (TD_CREATE);
+ uint32_t event_bits;
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ event_bits = THREAD_GETMEM_NC (((pthread_descr) NULL),
+ p_eventbuf.eventmask.event_bits[idx]);
+ #else
+@@ -798,7 +791,7 @@
+ #endif
+ }
+ if (__builtin_expect (pid, 0) == -1) {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ _dl_deallocate_tls (tcbp, true);
+ #endif
+ free(__pthread_manager_thread_bos);
+@@ -900,7 +893,7 @@
+ if (sp >= __pthread_manager_thread_bos && sp < __pthread_manager_thread_tos)
+ return manager_thread;
+ h = __pthread_handles + 2;
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+ # ifdef _STACK_GROWS_UP
+ while (h->h_descr == NULL
+ || ! (sp >= h->h_descr->p_stackaddr && sp < h->h_descr->p_guardaddr))
+@@ -994,7 +987,7 @@
+ children, so that timings for main thread account for all threads. */
+ if (self == __pthread_main_thread)
+ {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ waitpid(manager_thread->p_pid, NULL, __WCLONE);
+ #else
+ waitpid(__pthread_manager_thread.p_pid, NULL, __WCLONE);
+@@ -1002,7 +995,7 @@
+ /* Since all threads have been asynchronously terminated
+ (possibly holding locks), free cannot be used any more.
+ For mtrace, we'd like to print something though. */
+- /* #ifdef USE_TLS
++ /* #ifdef __UCLIBC_HAS_TLS__
+ tcbhead_t *tcbp = (tcbhead_t *) manager_thread;
+ # if defined(TLS_DTV_AT_TP)
+ tcbp = (tcbhead_t) ((char *) tcbp + TLS_PRE_TCB_SIZE);
+@@ -1060,7 +1053,7 @@
+ /* Main thread should accumulate times for thread manager and its
+ children, so that timings for main thread account for all threads. */
+ if (self == __pthread_main_thread) {
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ waitpid(manager_thread->p_pid, NULL, __WCLONE);
+ #else
+ waitpid(__pthread_manager_thread.p_pid, NULL, __WCLONE);
+@@ -1121,7 +1114,7 @@
+ __pthread_main_thread = self;
+ THREAD_SETMEM(self, p_nextlive, self);
+ THREAD_SETMEM(self, p_prevlive, self);
+-#if !(USE_TLS && HAVE___THREAD)
++#ifndef __UCLIBC_HAS_TLS__
+ /* Now this thread modifies the global variables. */
+ THREAD_SETMEM(self, p_errnop, &_errno);
+ THREAD_SETMEM(self, p_h_errnop, &_h_errno);
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setegid.c uClibc-git/libpthread/linuxthreads/pthread_setegid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setegid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setegid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_seteuid.c uClibc-git/libpthread/linuxthreads/pthread_seteuid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_seteuid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_seteuid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setgid.c uClibc-git/libpthread/linuxthreads/pthread_setgid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setgid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setgid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setregid.c uClibc-git/libpthread/linuxthreads/pthread_setregid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setregid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setregid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setresgid.c uClibc-git/libpthread/linuxthreads/pthread_setresgid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setresgid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setresgid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setresuid.c uClibc-git/libpthread/linuxthreads/pthread_setresuid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setresuid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setresuid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setreuid.c uClibc-git/libpthread/linuxthreads/pthread_setreuid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setreuid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setreuid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setuid.c uClibc-git/libpthread/linuxthreads/pthread_setuid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pthread_setuid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pthread_setuid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/pt-machine.c uClibc-git/libpthread/linuxthreads/pt-machine.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/pt-machine.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/pt-machine.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #define PT_EI
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/rwlock.c uClibc-git/libpthread/linuxthreads/rwlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/rwlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/rwlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <bits/libc-lock.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/semaphore.c uClibc-git/libpthread/linuxthreads/semaphore.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/semaphore.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/semaphore.c 2014-02-03 12:32:57.000000000 +0100
+@@ -15,6 +15,7 @@
+ /* Semaphores a la POSIX 1003.1b */
+
+ #include <errno.h>
++#include <limits.h>
+ #include "pthread.h"
+ #include "semaphore.h"
+ #include "internals.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/semaphore.h uClibc-git/libpthread/linuxthreads/semaphore.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -17,6 +17,7 @@
+
+ #include <features.h>
+ #include <sys/types.h>
++#include <limits.h>
+ #ifdef __USE_XOPEN2K
+ # define __need_timespec
+ # include <time.h>
+@@ -42,7 +43,9 @@
+ #define SEM_FAILED ((sem_t *) 0)
+
+ /* Maximum value the semaphore can have. */
++#ifndef SEM_VALUE_MAX
+ #define SEM_VALUE_MAX (2147483647)
++#endif
+
+
+ __BEGIN_DECLS
+@@ -55,13 +58,13 @@
+ extern int sem_destroy (sem_t *__sem) __THROW;
+
+ /* Open a named semaphore NAME with open flags OFLAG. */
+-extern sem_t *sem_open (__const char *__name, int __oflag, ...) __THROW;
++extern sem_t *sem_open (const char *__name, int __oflag, ...) __THROW;
+
+ /* Close descriptor for named semaphore SEM. */
+ extern int sem_close (sem_t *__sem) __THROW;
+
+ /* Remove named semaphore NAME. */
+-extern int sem_unlink (__const char *__name) __THROW;
++extern int sem_unlink (const char *__name) __THROW;
+
+ /* Wait for SEM being posted.
+
+@@ -75,7 +78,7 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int sem_timedwait (sem_t *__restrict __sem,
+- __const struct timespec *__restrict __abstime);
++ const struct timespec *__restrict __abstime);
+ #endif
+
+ /* Test whether SEM is posted. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/signals.c uClibc-git/libpthread/linuxthreads/signals.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/signals.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/signals.c 2014-02-03 12:32:57.000000000 +0100
+@@ -20,9 +20,6 @@
+ #include "internals.h"
+ #include "spinlock.h"
+
+-/* mods for uClibc: __libc_sigaction is not in any standard headers */
+-extern __typeof(sigaction) __libc_sigaction;
+-
+ int pthread_sigmask(int how, const sigset_t * newmask, sigset_t * oldmask)
+ {
+ sigset_t mask;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/specific.c uClibc-git/libpthread/linuxthreads/specific.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/specific.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/specific.c 2014-02-03 12:32:57.000000000 +0100
+@@ -212,7 +212,7 @@
+ __pthread_unlock(THREAD_GETMEM(self, p_lock));
+ }
+
+-#if !(USE_TLS && HAVE___THREAD)
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+
+ /* Thread-specific data for libc. */
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/elf/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/alpha/elf/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/elf/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/alpha/elf/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/alpha/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/alpha/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/alpha/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/alpha/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -17,8 +17,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/alpha/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/alpha/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/alpha/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/arm/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/arm/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/arm/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/arm/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/sysdep.h uClibc-git/libpthread/linuxthreads/sysdeps/arm/sysdep.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/sysdep.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/arm/sysdep.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,137 +0,0 @@
+-/* Generic asm macros used on many machines.
+- Copyright (C) 1991,92,93,96,98,2002,2003 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifndef C_LABEL
+-
+-/* Define a macro we can use to construct the asm name for a C symbol. */
+-#ifdef NO_UNDERSCORES
+-#ifdef __STDC__
+-#define C_LABEL(name) name##:
+-#else
+-#define C_LABEL(name) name/**/:
+-#endif
+-#else
+-#ifdef __STDC__
+-#define C_LABEL(name) _##name##:
+-#else
+-#define C_LABEL(name) _/**/name/**/:
+-#endif
+-#endif
+-
+-#endif
+-
+-#ifdef __ASSEMBLER__
+-/* Mark the end of function named SYM. This is used on some platforms
+- to generate correct debugging information. */
+-#ifndef END
+-#define END(sym)
+-#endif
+-
+-#ifndef JUMPTARGET
+-#define JUMPTARGET(sym) sym
+-#endif
+-
+-/* Makros to generate eh_frame unwind information. */
+-# ifdef HAVE_ASM_CFI_DIRECTIVES
+-# define cfi_startproc .cfi_startproc
+-# define cfi_endproc .cfi_endproc
+-# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off
+-# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg
+-# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off
+-# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
+-# define cfi_offset(reg, off) .cfi_offset reg, off
+-# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off
+-# define cfi_register(r1, r2) .cfi_register r1, r2
+-# define cfi_return_column(reg) .cfi_return_column reg
+-# define cfi_restore(reg) .cfi_restore reg
+-# define cfi_same_value(reg) .cfi_same_value reg
+-# define cfi_undefined(reg) .cfi_undefined reg
+-# define cfi_remember_state .cfi_remember_state
+-# define cfi_restore_state .cfi_restore_state
+-# define cfi_window_save .cfi_window_save
+-# else
+-# define cfi_startproc
+-# define cfi_endproc
+-# define cfi_def_cfa(reg, off)
+-# define cfi_def_cfa_register(reg)
+-# define cfi_def_cfa_offset(off)
+-# define cfi_adjust_cfa_offset(off)
+-# define cfi_offset(reg, off)
+-# define cfi_rel_offset(reg, off)
+-# define cfi_register(r1, r2)
+-# define cfi_return_column(reg)
+-# define cfi_restore(reg)
+-# define cfi_same_value(reg)
+-# define cfi_undefined(reg)
+-# define cfi_remember_state
+-# define cfi_restore_state
+-# define cfi_window_save
+-# endif
+-
+-#else /* ! ASSEMBLER */
+-# ifdef HAVE_ASM_CFI_DIRECTIVES
+-# define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name)
+-# define CFI_STRINGIFY2(Name) #Name
+-# define CFI_STARTPROC ".cfi_startproc"
+-# define CFI_ENDPROC ".cfi_endproc"
+-# define CFI_DEF_CFA(reg, off) \
+- ".cfi_def_cfa " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
+-# define CFI_DEF_CFA_REGISTER(reg) \
+- ".cfi_def_cfa_register " CFI_STRINGIFY(reg)
+-# define CFI_DEF_CFA_OFFSET(off) \
+- ".cfi_def_cfa_offset " CFI_STRINGIFY(off)
+-# define CFI_ADJUST_CFA_OFFSET(off) \
+- ".cfi_adjust_cfa_offset " CFI_STRINGIFY(off)
+-# define CFI_OFFSET(reg, off) \
+- ".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
+-# define CFI_REL_OFFSET(reg, off) \
+- ".cfi_rel_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
+-# define CFI_REGISTER(r1, r2) \
+- ".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2)
+-# define CFI_RETURN_COLUMN(reg) \
+- ".cfi_return_column " CFI_STRINGIFY(reg)
+-# define CFI_RESTORE(reg) \
+- ".cfi_restore " CFI_STRINGIFY(reg)
+-# define CFI_UNDEFINED(reg) \
+- ".cfi_undefined " CFI_STRINGIFY(reg)
+-# define CFI_REMEMBER_STATE \
+- ".cfi_remember_state"
+-# define CFI_RESTORE_STATE \
+- ".cfi_restore_state"
+-# define CFI_WINDOW_SAVE \
+- ".cfi_window_save"
+-# else
+-# define CFI_STARTPROC
+-# define CFI_ENDPROC
+-# define CFI_DEF_CFA(reg, off)
+-# define CFI_DEF_CFA_REGISTER(reg)
+-# define CFI_DEF_CFA_OFFSET(off)
+-# define CFI_ADJUST_CFA_OFFSET(off)
+-# define CFI_OFFSET(reg, off)
+-# define CFI_REL_OFFSET(reg, off)
+-# define CFI_REGISTER(r1, r2)
+-# define CFI_RETURN_COLUMN(reg)
+-# define CFI_RESTORE(reg)
+-# define CFI_UNDEFINED(reg)
+-# define CFI_REMEMBER_STATE
+-# define CFI_RESTORE_STATE
+-# define CFI_WINDOW_SAVE
+-# endif
+-
+-#endif /* __ASSEMBLER__ */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/arm/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/arm/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/arm/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/cris/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/cris/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/cris/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/cris/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/cris/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/cris/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/cris/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/cris/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/hppa/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/hppa/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/hppa/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/hppa/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/hppa/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/hppa/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/hppa/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/hppa/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/i686/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/i386/i686/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/i686/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/i386/i686/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/i386/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/i386/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/i386/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/i386/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #if defined __pentiumpro__ || defined __pentium4__ || defined __athlon__ || \
+ defined __k8__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/i386/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/i386/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/useldt.h uClibc-git/libpthread/linuxthreads/sysdeps/i386/useldt.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/i386/useldt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/i386/useldt.h 2014-02-03 12:32:57.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef __ASSEMBLER__
+ #include <stddef.h> /* For offsetof. */
+@@ -87,7 +86,7 @@
+ because we inherited the value set up in the main thread by TLS setup.
+ We need to extract that value and set up the same segment in this
+ thread. */
+-#if defined (USE_TLS) && USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ # define DO_SET_THREAD_AREA_REUSE(nr) 1
+ #else
+ /* Without TLS, we do the initialization of the main thread, where NR == 0. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/ia64/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/ia64/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/ia64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/ia64/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/tcb-offsets.sym uClibc-git/libpthread/linuxthreads/sysdeps/ia64/tcb-offsets.sym
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/tcb-offsets.sym 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/ia64/tcb-offsets.sym 2014-02-03 12:32:57.000000000 +0100
+@@ -2,7 +2,7 @@
+ #include <tls.h>
+
+ --
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ MULTIPLE_THREADS_OFFSET offsetof (struct _pthread_descr_struct, p_multiple_threads) - sizeof (struct _pthread_descr_struct)
+ #else
+ MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/ia64/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/ia64/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/ia64/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/mips/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/mips/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/mips/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/mips/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/mips/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/mips/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/mips/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/mips/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -18,8 +18,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/mips/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/mips/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/mips/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/mips/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc32/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* These routines are from Appendix G of the 'PowerPC 601 RISC Microprocessor
+ User's Manual', by IBM and Motorola. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/powerpc64/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* These routines are from Appendix G of the 'PowerPC 601 RISC Microprocessor
+ User's Manual', by IBM and Motorola. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/tcb-offsets.sym uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/tcb-offsets.sym
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/tcb-offsets.sym 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/tcb-offsets.sym 2014-02-03 12:32:57.000000000 +0100
+@@ -3,7 +3,7 @@
+
+ -- This line separates the #include lines from conditionals.
+
+-# ifdef USE_TLS
++# ifdef __UCLIBC_HAS_TLS__
+
+ -- Abuse tls.h macros to derive offsets relative to the thread register.
+ # undef __thread_register
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/powerpc/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/powerpc/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* Initial value of a spinlock. Most platforms should use zero,
+ unless they only implement a "test and clear" operation instead of
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_LIBC_LOCK_H
+ #define _BITS_LIBC_LOCK_H 1
+@@ -293,7 +292,7 @@
+ library. */
+
+ extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutex_attr);
++ const pthread_mutexattr_t *__mutex_attr);
+
+ extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+
+@@ -312,7 +311,7 @@
+
+ #ifdef __USE_UNIX98
+ extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
+- __const pthread_rwlockattr_t *__attr);
++ const pthread_rwlockattr_t *__attr);
+
+ extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
+
+@@ -331,7 +330,7 @@
+ void (*__destr_function) (void *));
+
+ extern int __pthread_setspecific (pthread_key_t __key,
+- __const void *__pointer);
++ const void *__pointer);
+
+ extern void *__pthread_getspecific (pthread_key_t __key);
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,18 +13,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_LIBC_TSD_H
+ #define _BITS_LIBC_TSD_H 1
+
+ #include <linuxthreads/descr.h>
++#ifdef __UCLIBC_HAS_TLS__
+ #include <tls.h>
+
+-#if USE_TLS && HAVE___THREAD
+-
+ /* When __thread works, the generic definition is what we want. */
+ # include <sysdeps/generic/bits/libc-tsd.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -19,6 +19,9 @@
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+
++#define __need_size_t
++#include <stddef.h>
++
+ #define __need_schedparam
+ #include <bits/sched.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/.cvsignore uClibc-git/libpthread/linuxthreads/sysdeps/pthread/.cvsignore
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/.cvsignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/.cvsignore 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2 +0,0 @@
+-.cvsignore
+-*.os
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/errno-loc.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/errno-loc.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/errno-loc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/errno-loc.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,26 +14,25 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <linuxthreads/internals.h>
+ #include <sysdep-cancel.h>
+
+-#if ! USE___THREAD && !RTLD_PRIVATE_ERRNO
++#if !defined __UCLIBC_HAS_TLS__ && !RTLD_PRIVATE_ERRNO
+ #undef errno
+ extern int errno;
+ #endif
+
+ int *
+-#if ! USE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ weak_const_function
+ #endif
+ __errno_location (void)
+ {
+-#if ! USE___THREAD && !defined NOT_IN_libc
++#if !defined __UCLIBC_HAS_TLS__ && !defined NOT_IN_libc
+ if (! SINGLE_THREAD_P)
+ {
+ pthread_descr self = thread_self();
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/flockfile.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/flockfile.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/flockfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/flockfile.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/ftrylockfile.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/ftrylockfile.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/ftrylockfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/ftrylockfile.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/funlockfile.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/funlockfile.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/funlockfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/funlockfile.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/getcpuclockid.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/getcpuclockid.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/getcpuclockid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/getcpuclockid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,16 +12,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <netdb.h>
+ #include <tls.h>
+ #include <linuxthreads/internals.h>
+ #include <sysdep-cancel.h>
+
+-#if ! USE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ # undef h_errno
+ extern int h_errno;
+ #endif
+@@ -31,7 +30,7 @@
+ weak_const_function
+ __h_errno_location (void)
+ {
+-#if ! USE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ if (! SINGLE_THREAD_P)
+ {
+ pthread_descr self = thread_self();
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/list.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/list.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/list.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/list.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LIST_H
+ #define _LIST_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/malloc-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/malloc-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/malloc-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/malloc-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MALLOC_MACHINE_H
+ #define _MALLOC_MACHINE_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/not-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,18 +14,26 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <sysdep.h>
+
+ /* Uncancelable open. */
++#if defined __NR_openat && !defined __NR_open
++#define open_not_cancel(name, flags, mode) \
++ INLINE_SYSCALL (openat, 4, (int) (AT_FDCWD), (const char *) (name), \
++ (flags), (mode))
++#define open_not_cancel_2(name, flags) \
++ INLINE_SYSCALL (openat, 3, (int) (AT_FDCWD), (const char *) (name), \
++ (flags))
++#else
+ #define open_not_cancel(name, flags, mode) \
+ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode))
+ #define open_not_cancel_2(name, flags) \
+ INLINE_SYSCALL (open, 2, (const char *) (name), (flags))
++#endif
+
+ /* Uncancelable openat. */
+ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/posix-timer.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/posix-timer.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/posix-timer.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/posix-timer.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTHREAD_FUNCTIONS_H
+ #define _PTHREAD_FUNCTIONS_H 1
+@@ -72,10 +71,12 @@
+ void (*ptr_pthread_cleanup_upto) (__jmp_buf target,
+ char *targetframe);
+ pthread_descr (*ptr_pthread_thread_self) (void);
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+ int (*ptr_pthread_internal_tsd_set) (int key, const void *pointer);
+ void * (*ptr_pthread_internal_tsd_get) (int key);
+ void ** __attribute__ ((__const__))
+ (*ptr_pthread_internal_tsd_address) (int key);
++#endif
+ int (*ptr_pthread_sigaction) (int sig, const struct sigaction * act,
+ struct sigaction *oact);
+ int (*ptr_pthread_sigwait) (const sigset_t *set, int *sig);
+@@ -95,4 +96,6 @@
+ /* Variable in libc.so. */
+ extern struct pthread_functions __libc_pthread_functions attribute_hidden;
+
++extern int * __libc_pthread_init (const struct pthread_functions *functions);
++
+ #endif /* pthread-functions.h */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/pthread.h uClibc-git/libpthread/linuxthreads/sysdeps/pthread/pthread.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/pthread.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/pthread.h 2014-02-03 12:32:57.000000000 +0100
+@@ -161,7 +161,7 @@
+ if ATTR is NULL), and call function START_ROUTINE with given
+ arguments ARG. */
+ extern int pthread_create (pthread_t *__restrict __threadp,
+- __const pthread_attr_t *__restrict __attr,
++ const pthread_attr_t *__restrict __attr,
+ void *(*__start_routine) (void *),
+ void *__restrict __arg) __THROW;
+
+@@ -201,16 +201,16 @@
+ int __detachstate) __THROW;
+
+ /* Return in *DETACHSTATE the `detachstate' attribute in *ATTR. */
+-extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
++extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+ int *__detachstate) __THROW;
+
+ /* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */
+ extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+- __const struct sched_param *__restrict
++ const struct sched_param *__restrict
+ __param) __THROW;
+
+ /* Return in *PARAM the scheduling parameters of *ATTR. */
+-extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
++extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict
+ __attr,
+ struct sched_param *__restrict __param)
+ __THROW;
+@@ -220,7 +220,7 @@
+ __THROW;
+
+ /* Return in *POLICY the scheduling policy of *ATTR. */
+-extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
++extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
+ __attr, int *__restrict __policy)
+ __THROW;
+
+@@ -229,7 +229,7 @@
+ int __inherit) __THROW;
+
+ /* Return in *INHERIT the scheduling inheritance mode of *ATTR. */
+-extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
++extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
+ __attr, int *__restrict __inherit)
+ __THROW;
+
+@@ -238,7 +238,7 @@
+ __THROW;
+
+ /* Return in *SCOPE the scheduling contention scope of *ATTR. */
+-extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
++extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+ int *__restrict __scope) __THROW;
+
+ #ifdef __USE_UNIX98
+@@ -247,7 +247,7 @@
+ size_t __guardsize) __THROW;
+
+ /* Get the size of the guard area at the bottom of the thread. */
+-extern int pthread_attr_getguardsize (__const pthread_attr_t *__restrict
++extern int pthread_attr_getguardsize (const pthread_attr_t *__restrict
+ __attr, size_t *__restrict __guardsize)
+ __THROW;
+ #endif
+@@ -261,7 +261,7 @@
+ void *__stackaddr) __THROW;
+
+ /* Return the previously set address for the stack. */
+-extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
++extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+ __attr, void **__restrict __stackaddr)
+ __THROW;
+ #endif
+@@ -274,7 +274,7 @@
+ size_t __stacksize) __THROW;
+
+ /* Return the previously set address for the stack. */
+-extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
++extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+ void **__restrict __stackaddr,
+ size_t *__restrict __stacksize) __THROW;
+ #endif
+@@ -286,7 +286,7 @@
+ size_t __stacksize) __THROW;
+
+ /* Return the currently used minimal stack size. */
+-extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
++extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
+ __attr, size_t *__restrict __stacksize)
+ __THROW;
+
+@@ -302,7 +302,7 @@
+ /* Set the scheduling parameters for TARGET_THREAD according to POLICY
+ and *PARAM. */
+ extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+- __const struct sched_param *__param)
++ const struct sched_param *__param)
+ __THROW;
+
+ /* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */
+@@ -324,7 +324,7 @@
+ /* Initialize MUTEX using attributes in *MUTEX_ATTR, or use the
+ default values if later is NULL. */
+ extern int pthread_mutex_init (pthread_mutex_t *__restrict __mutex,
+- __const pthread_mutexattr_t *__restrict
++ const pthread_mutexattr_t *__restrict
+ __mutex_attr) __THROW;
+
+ /* Destroy MUTEX. */
+@@ -339,7 +339,7 @@
+ #ifdef __USE_XOPEN2K
+ /* Wait until lock becomes available, or specified time passes. */
+ extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW;
+ #endif
+
+@@ -357,7 +357,7 @@
+ extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) __THROW;
+
+ /* Get the process-shared flag of the mutex attribute ATTR. */
+-extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
++extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -373,7 +373,7 @@
+ __THROW;
+
+ /* Return in *KIND the mutex kind attribute in *ATTR. */
+-extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict
++extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
+ __attr, int *__restrict __kind) __THROW;
+ #endif
+
+@@ -383,7 +383,7 @@
+ /* Initialize condition variable COND using attributes ATTR, or use
+ the default values if later is NULL. */
+ extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+- __const pthread_condattr_t *__restrict
++ const pthread_condattr_t *__restrict
+ __cond_attr) __THROW;
+
+ /* Destroy condition variable COND. */
+@@ -406,7 +406,7 @@
+ (00:00:00 GMT, January 1, 1970). */
+ extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+ pthread_mutex_t *__restrict __mutex,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime);
+
+ /* Functions for handling condition variable attributes. */
+@@ -418,7 +418,7 @@
+ extern int pthread_condattr_destroy (pthread_condattr_t *__attr) __THROW;
+
+ /* Get the process-shared flag of the condition variable attribute ATTR. */
+-extern int pthread_condattr_getpshared (__const pthread_condattr_t *
++extern int pthread_condattr_getpshared (const pthread_condattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -433,7 +433,7 @@
+ /* Initialize read-write lock RWLOCK using attributes ATTR, or use
+ the default values if later is NULL. */
+ extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+- __const pthread_rwlockattr_t *__restrict
++ const pthread_rwlockattr_t *__restrict
+ __attr) __THROW;
+
+ /* Destroy read-write lock RWLOCK. */
+@@ -448,7 +448,7 @@
+ # ifdef __USE_XOPEN2K
+ /* Try to acquire read lock for RWLOCK or return after specfied time. */
+ extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW;
+ # endif
+
+@@ -461,7 +461,7 @@
+ # ifdef __USE_XOPEN2K
+ /* Try to acquire write lock for RWLOCK or return after specfied time. */
+ extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW;
+ # endif
+
+@@ -478,7 +478,7 @@
+ extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) __THROW;
+
+ /* Return current setting of process-shared attribute of ATTR in PSHARED. */
+-extern int pthread_rwlockattr_getpshared (__const pthread_rwlockattr_t *
++extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -487,7 +487,7 @@
+ int __pshared) __THROW;
+
+ /* Return current setting of reader/writer preference. */
+-extern int pthread_rwlockattr_getkind_np (__const pthread_rwlockattr_t *__attr,
++extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *__attr,
+ int *__pref) __THROW;
+
+ /* Set reader/write preference. */
+@@ -520,7 +520,7 @@
+ /* Barriers are a also a new feature in 1003.1j-2000. */
+
+ extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+- __const pthread_barrierattr_t *__restrict
++ const pthread_barrierattr_t *__restrict
+ __attr, unsigned int __count) __THROW;
+
+ extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) __THROW;
+@@ -529,7 +529,7 @@
+
+ extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) __THROW;
+
+-extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
++extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -556,7 +556,7 @@
+
+ /* Store POINTER in the thread-specific data slot identified by KEY. */
+ extern int pthread_setspecific (pthread_key_t __key,
+- __const void *__pointer) __THROW;
++ const void *__pointer) __THROW;
+
+ /* Return current value of the thread-specific data slot identified by KEY. */
+ extern void *pthread_getspecific (pthread_key_t __key) __THROW;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/ptlongjmp.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/ptlongjmp.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/ptlongjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/ptlongjmp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -19,13 +19,6 @@
+ #include "pthread.h"
+ #include "internals.h"
+
+-/* These functions are not declared anywhere since they shouldn't be
+- used at another place but here. */
+-extern void __libc_siglongjmp (sigjmp_buf env, int val)
+- __attribute__ ((noreturn));
+-extern void __libc_longjmp (sigjmp_buf env, int val)
+- __attribute__ ((noreturn));
+-
+ #ifdef SHARED
+ void siglongjmp (sigjmp_buf env, int val)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/res-state.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/res-state.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/res-state.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/res-state.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,28 +12,27 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <resolv.h>
+ #include <tls.h>
+ #include <linuxthreads/internals.h>
+ #include <sysdep-cancel.h>
+
+-#if ! USE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ # undef _res
+ extern struct __res_state _res;
+ #endif
+
+ /* When threaded, _res may be a per-thread variable. */
+ struct __res_state *
+-#if ! USE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ weak_const_function
+ #endif
+ __res_state (void)
+ {
+-#if ! USE___THREAD
++#ifndef __UCLIBC_HAS_TLS__
+ if (! SINGLE_THREAD_P)
+ {
+ pthread_descr self = thread_self();
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/sigaction.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/sigaction.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/sigaction.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Somebody please explain what's going on here. --vda */
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_create.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_create.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_create.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_create.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_delete.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_delete.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_delete.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_getoverr.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_getoverr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_getoverr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_getoverr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_gettime.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_gettime.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_gettime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_routines.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_routines.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_routines.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_routines.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_settime.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_settime.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/timer_settime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/timer_settime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/tst-timer.c uClibc-git/libpthread/linuxthreads/sysdeps/pthread/tst-timer.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/pthread/tst-timer.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/pthread/tst-timer.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/s390/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/s390/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+@@ -58,7 +57,7 @@
+ #define CURRENT_STACK_FRAME stack_pointer
+ register char * stack_pointer __asm__ ("15");
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ /* Return the thread descriptor for the current thread. */
+ # define THREAD_SELF ((pthread_descr) __builtin_thread_pointer ())
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+@@ -58,7 +57,7 @@
+ #define CURRENT_STACK_FRAME stack_pointer
+ register char * stack_pointer __asm__ ("15");
+
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ /* Return the thread descriptor for the current thread. */
+ # define THREAD_SELF ((pthread_descr) __builtin_thread_pointer ())
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/s390/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/s390/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/s390/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/sh/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sh/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/sh/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sh/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/tcb-offsets.sym uClibc-git/libpthread/linuxthreads/sysdeps/sh/tcb-offsets.sym
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/tcb-offsets.sym 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sh/tcb-offsets.sym 2014-02-03 12:32:57.000000000 +0100
+@@ -2,7 +2,7 @@
+ #include <tls.h>
+
+ --
+-#ifdef USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ MULTIPLE_THREADS_OFFSET offsetof (struct _pthread_descr_struct, p_multiple_threads)
+ TLS_PRE_TCB_SIZE sizeof (struct _pthread_descr_struct)
+ #else
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/sh/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sh/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sh/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/sparc/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/sparc/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/sparc/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocalim.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocalim.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocalim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocalim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocrtsig.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocrtsig.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocrtsig.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/allocrtsig.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <signal.h>
+
+@@ -70,6 +69,7 @@
+ strong_alias (__libc_current_sigrtmax, __libc_current_sigrtmax_private)
+ libc_hidden_def (__libc_current_sigrtmax)
+
++#if 0
+ /* Allocate real-time signal with highest/lowest available
+ priority. Please note that we don't use a lock since we assume
+ this function to be called at program start. */
+@@ -85,3 +85,4 @@
+ return high ? current_rtmin++ : current_rtmax--;
+ }
+ strong_alias (__libc_allocate_rtsig, __libc_allocate_rtsig_private)
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/pt-sigsuspend.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/pt-sigsuspend.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/pt-sigsuspend.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/pt-sigsuspend.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #ifndef __ASSEMBLER__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include <sysdep-cancel.h>
+@@ -30,7 +29,7 @@
+
+ #ifdef SHARED
+ ldq t0, __libc_pthread_functions(gp) !gprel
+- bne t0, HIDDEN_JUMPTARGET (__fork) !samegp
++ bne t0, HIDDEN_JUMPTARGET (fork) !samegp
+ #else
+ .weak pthread_create
+ ldq t0, pthread_create(gp) !literal
+@@ -50,7 +49,7 @@
+ cfi_adjust_cfa_offset(16)
+ stq ra, 0(sp)
+ cfi_offset(ra, -16)
+- jsr ra, HIDDEN_JUMPTARGET (__fork)
++ jsr ra, HIDDEN_JUMPTARGET (fork)
+ ldgp gp, 0(ra)
+ ldq ra, 0(sp)
+ addq sp, 16, sp
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tls.h>
+ #include <pt-machine.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -40,7 +39,7 @@
+ ldr r0, 1f
+ #endif
+ movs r0, r0
+- bne HIDDEN_JUMPTARGET (__fork)
++ bne HIDDEN_JUMPTARGET (fork)
+
+ DO_CALL (vfork, 0)
+ cmn a1, #4096
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/.cvsignore uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/.cvsignore
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/.cvsignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/.cvsignore 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2 +0,0 @@
+-.cvsignore
+-*.os
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/execve.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/execve.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/execve.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/execve.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <unistd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fork.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <list.h>
+ #include <bits/libc-lock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* Initial value of a spinlock. PA-RISC only implements atomic load
+ and clear so this must be non-zero. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/malloc-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/malloc-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/malloc-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/malloc-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MALLOC_MACHINE_H
+ #define _MALLOC_MACHINE_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #ifndef __ASSEMBLER__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tls.h>
+ #include <pt-machine.h>
+@@ -139,7 +138,7 @@
+ #endif
+
+ # ifndef __ASSEMBLER__
+-# if defined FLOATING_STACKS && USE___THREAD && defined __PIC__
++# if defined FLOATING_STACKS && defined __UCLIBC_HAS_TLS__ && defined __PIC__
+ # define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ p_header.data.multiple_threads) == 0, 1)
+@@ -155,7 +154,7 @@
+ # else
+ # if !defined __PIC__
+ # define SINGLE_THREAD_P cmpl $0, __local_multiple_threads
+-# elif defined FLOATING_STACKS && USE___THREAD
++# elif defined FLOATING_STACKS && defined __UCLIBC_HAS_TLS__
+ # define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET
+ # else
+ # if !defined NOT_IN_libc || defined IS_IN_libpthread
+@@ -165,7 +164,7 @@
+ movl __local_multiple_threads@GOT(%ecx), %ecx;\
+ cmpl $0, (%ecx)
+ # endif
+-# if !defined HAVE_HIDDEN || !USE___THREAD
++# if !defined HAVE_HIDDEN || !defined __UCLIBC_HAS_TLS__
+ # define SINGLE_THREAD_P \
+ SETUP_PIC_REG (cx); \
+ addl $_GLOBAL_OFFSET_TABLE_, %ecx; \
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -32,7 +31,7 @@
+ #ifdef __NR_vfork
+
+ # ifdef SHARED
+-# if !defined HAVE_HIDDEN || !USE___THREAD
++# if !defined HAVE_HIDDEN || !defined __UCLIBC_HAS_TLS__
+ SETUP_PIC_REG (cx)
+ # else
+ call __i686.get_pc_thunk.cx
+@@ -44,7 +43,7 @@
+ movl $pthread_create, %eax
+ testl %eax, %eax
+ # endif
+- jne HIDDEN_JUMPTARGET (__fork)
++ jne HIDDEN_JUMPTARGET (fork)
+
+ /* Pop the return PC value into ECX. */
+ popl %ecx
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/fork.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/fork.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/fork.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/fork.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <signal.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-sigsuspend.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-sigsuspend.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-sigsuspend.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-sigsuspend.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/ia64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #include <sysdep-cancel.h>
+@@ -38,7 +37,7 @@
+ #endif
+ ld8 r14 = [r14];;
+ cmp.ne p6, p7 = 0, r14
+-(p6) br.cond.spnt.few HIDDEN_JUMPTARGET (__fork);;
++(p6) br.cond.spnt.few HIDDEN_JUMPTARGET (fork);;
+ alloc r2=ar.pfs,0,0,2,0
+ mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
+ mov out1=0 /* Standard sp value. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stddef.h>
+@@ -32,3 +31,4 @@
+ (env->__jmpbuf, __builtin_frame_address (0)),
+ (void) 0);
+ }
++libc_hidden_def(_longjmp_unwind)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #ifndef __ASSEMBLER__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/m68k/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -35,7 +34,7 @@
+ .weak pthread_create
+ movel #pthread_create, %d0
+ #endif
+- jbne HIDDEN_JUMPTARGET (__fork)
++ jbne HIDDEN_JUMPTARGET (fork)
+
+ #ifdef __NR_vfork
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #ifndef __ASSEMBLER__
+@@ -31,7 +30,7 @@
+ # undef PSEUDO
+ # define PSEUDO(name, syscall_name, args) \
+ .align 2; \
+- 99: \
++ 99: move a0, v0; \
+ PTR_LA t9,__syscall_error; \
+ /* manual cpreturn. */ \
+ REG_L gp, STKOFF_GP(sp); \
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #ifndef __ASSEMBLER__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mips/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* vfork() is just a special case of clone(). */
+
+@@ -80,6 +79,7 @@
+
+ /* Something bad happened -- no child created. */
+ L(error):
++ move a0, v0
+ #ifdef __PIC__
+ PTR_LA t9, __syscall_error
+ RESTORE_GP64
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mq_notify.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mq_notify.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mq_notify.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/mq_notify.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -66,7 +65,7 @@
+ # endif
+
+ .Lhidden_fork:
+- b HIDDEN_JUMPTARGET(__fork)
++ b HIDDEN_JUMPTARGET(fork)
+
+ #endif
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -42,7 +41,7 @@
+ ld 10,.LC0@toc(2)
+ ld 10,0(10)
+ cmpwi 10,0
+- bne- HIDDEN_JUMPTARGET(__fork)
++ bne- HIDDEN_JUMPTARGET(fork)
+ # else
+ .weak pthread_create
+ lis 10,pthread_create@highest
+@@ -80,7 +79,7 @@
+
+ # ifndef SHARED
+ .Lhidden_fork:
+- b HIDDEN_JUMPTARGET(__fork)
++ b HIDDEN_JUMPTARGET(fork)
+ .Lsyscall_error:
+ b JUMPTARGET(__syscall_error)
+ # endif
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/pt-sigsuspend.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/pt-sigsuspend.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/pt-sigsuspend.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/pt-sigsuspend.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <signal.h>
+ #include <unistd.h>
+@@ -40,4 +39,3 @@
+ #endif
+ }
+ libc_hidden_def (raise)
+-weak_alias (raise, gsignal)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/register-atfork.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/register-atfork.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/register-atfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/register-atfork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -54,7 +53,7 @@
+ al %r1,3f-2b(%r1)
+ br %r1
+ 3:
+- .long HIDDEN_JUMPTARGET(__fork)-2b
++ .long HIDDEN_JUMPTARGET(fork)-2b
+ 4:
+ #ifdef SHARED
+ .long __libc_pthread_functions-0b
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -24,8 +24,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -35,7 +34,7 @@
+ larl %r1,pthread_create
+ #endif
+ ltgr %r1,%r1
+- jgne HIDDEN_JUMPTARGET(__fork)
++ jgne HIDDEN_JUMPTARGET(fork)
+
+ /* Do vfork system call. */
+ svc SYS_ify (vfork)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/pt-initfini.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/smp.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/smp.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/smp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/smp.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ static __inline__ int
+ is_smp_system (void)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+@@ -155,7 +154,7 @@
+ # endif
+
+ # ifndef __ASSEMBLER__
+-# if defined FLOATING_STACKS && USE___THREAD && defined __PIC__
++# if defined FLOATING_STACKS && defined __UCLIBC_HAS_TLS__ && defined __PIC__
+ # define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, p_multiple_threads) == 0, 1)
+ # else
+@@ -172,7 +171,7 @@
+ .align 2; \
+ 1: .long __local_multiple_threads; \
+ 2:
+-# elif defined FLOATING_STACKS && USE___THREAD
++# elif defined FLOATING_STACKS && defined __UCLIBC_HAS_TLS__
+ # define SINGLE_THREAD_P \
+ stc gbr,r0; \
+ mov.w 0f,r1; \
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -70,7 +69,7 @@
+ nop
+ 1:
+ .align 2
+-.L2: .long HIDDEN_JUMPTARGET(__fork)-1b
++.L2: .long HIDDEN_JUMPTARGET(fork)-1b
+
+ PSEUDO_END (__vfork)
+ libc_hidden_def (__vfork)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/smp.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/smp.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/smp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/smp.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <sys/sysctl.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_TYPES_H
+ # error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/fork.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/fork.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/fork.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/fork.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include_next <fork.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tls.h>
+ #ifndef __ASSEMBLER__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+
+@@ -43,7 +42,7 @@
+ orcc %o0, %lo(pthread_create), %o0
+ #endif
+ #if defined SHARED && !defined BROKEN_SPARC_WDISP22
+- bne HIDDEN_JUMPTARGET(__fork)
++ bne HIDDEN_JUMPTARGET(fork)
+ #else
+ bne 1f
+ #endif
+@@ -56,7 +55,7 @@
+ and %o0, %o1, %o0
+ #if !defined SHARED || defined BROKEN_SPARC_WDISP22
+ 1: mov %o7, %g1
+- call HIDDEN_JUMPTARGET(__fork)
++ call HIDDEN_JUMPTARGET(fork)
+ mov %g1, %o7
+ #endif
+ SYSCALL_ERROR_HANDLER
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tls.h>
+ #ifndef __ASSEMBLER__
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+
+@@ -42,7 +41,7 @@
+ #endif
+ #if defined SHARED && !defined BROKEN_SPARC_WDISP22
+ cmp %o0, 0
+- bne HIDDEN_JUMPTARGET(__fork)
++ bne HIDDEN_JUMPTARGET(fork)
+ #else
+ brnz,pn %o0, 1f
+ #endif
+@@ -55,7 +54,7 @@
+ and %o0, %o1, %o0
+ #if !defined SHARED || defined BROKEN_SPARC_WDISP22
+ 1: mov %o7, %g1
+- call HIDDEN_JUMPTARGET(__fork)
++ call HIDDEN_JUMPTARGET(fork)
+ mov %g1, %o7
+ #endif
+ SYSCALL_ERROR_HANDLER
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/unregister-atfork.c uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/unregister-atfork.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/unregister-atfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/unregister-atfork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep-cancel.h>
+ #define _ERRNO_H 1
+@@ -34,7 +33,7 @@
+ movq $pthread_create, %rax
+ testq %rax, %rax
+ #endif
+- jne HIDDEN_JUMPTARGET (__fork)
++ jne HIDDEN_JUMPTARGET (fork)
+
+ /* Pop the return PC value into RDI. We need a register that
+ is preserved by the syscall and that we're allowed to destroy. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/x86_64/pspinlock.c uClibc-git/libpthread/linuxthreads/sysdeps/x86_64/pspinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/x86_64/pspinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/x86_64/pspinlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/x86_64/pt-machine.h uClibc-git/libpthread/linuxthreads/sysdeps/x86_64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/x86_64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/x86_64/pt-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/x86_64/tls.h uClibc-git/libpthread/linuxthreads/sysdeps/x86_64/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads/sysdeps/x86_64/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads/sysdeps/x86_64/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/.cvsignore uClibc-git/libpthread/linuxthreads_db/.cvsignore
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/.cvsignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/.cvsignore 1970-01-01 01:00:00.000000000 +0100
+@@ -1,5 +0,0 @@
+-.cvsignore
+-.svn
+-*.os
+-Makefile
+-Makefile.in
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/Makefile.old uClibc-git/libpthread/linuxthreads_db/Makefile.old
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/Makefile.old 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/Makefile.old 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ # Lesser General Public License for more details.
+
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+ # Makefile for linuxthreads debug library subdirectory of GNU C Library.
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/proc_service.h uClibc-git/libpthread/linuxthreads_db/proc_service.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/proc_service.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/proc_service.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The definitions in this file must correspond to those in the debugger. */
+ #include <sys/procfs.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_init.c uClibc-git/libpthread/linuxthreads_db/td_init.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_log.c uClibc-git/libpthread/linuxthreads_db/td_log.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_log.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_log.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_symbol_list.c uClibc-git/libpthread/linuxthreads_db/td_symbol_list.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_symbol_list.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_symbol_list.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "thread_dbP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_clear_event.c uClibc-git/libpthread/linuxthreads_db/td_ta_clear_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_clear_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_clear_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,17 +14,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+
+ td_err_e
+-td_ta_clear_event (ta, event)
+- const td_thragent_t *ta;
+- td_thr_events_t *event;
++td_ta_clear_event(const td_thragent_t *ta, td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_delete.c uClibc-git/libpthread/linuxthreads_db/td_ta_delete.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_delete.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_enable_stats.c uClibc-git/libpthread/linuxthreads_db/td_ta_enable_stats.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_enable_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_enable_stats.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_event_addr.c uClibc-git/libpthread/linuxthreads_db/td_ta_event_addr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_event_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_event_addr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_event_getmsg.c uClibc-git/libpthread/linuxthreads_db/td_ta_event_getmsg.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_event_getmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_event_getmsg.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_get_nthreads.c uClibc-git/libpthread/linuxthreads_db/td_ta_get_nthreads.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_get_nthreads.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_get_nthreads.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_get_ph.c uClibc-git/libpthread/linuxthreads_db/td_ta_get_ph.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_get_ph.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_get_ph.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_get_stats.c uClibc-git/libpthread/linuxthreads_db/td_ta_get_stats.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_get_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_get_stats.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_map_id2thr.c uClibc-git/libpthread/linuxthreads_db/td_ta_map_id2thr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_map_id2thr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_map_id2thr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <linuxthreads/internals.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c uClibc-git/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <linuxthreads/internals.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_new.c uClibc-git/libpthread/linuxthreads_db/td_ta_new.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_new.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_new.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_reset_stats.c uClibc-git/libpthread/linuxthreads_db/td_ta_reset_stats.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_reset_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_reset_stats.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_setconcurrency.c uClibc-git/libpthread/linuxthreads_db/td_ta_setconcurrency.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_setconcurrency.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_setconcurrency.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_set_event.c uClibc-git/libpthread/linuxthreads_db/td_ta_set_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_set_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_set_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,17 +14,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+
+ td_err_e
+-td_ta_set_event (ta, event)
+- const td_thragent_t *ta;
+- td_thr_events_t *event;
++td_ta_set_event(const td_thragent_t *ta, td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_thr_iter.c uClibc-git/libpthread/linuxthreads_db/td_ta_thr_iter.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_thr_iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_thr_iter.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <linuxthreads/internals.h>
+@@ -40,7 +39,7 @@
+ memset (&pds, '\0', sizeof (pds));
+
+ /* Empty thread descriptor the thread library would create. */
+-#if !defined USE_TLS || !TLS_DTV_AT_TP
++#if !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP
+ pds.p_header.data.self = &pds;
+ #endif
+ pds.p_nextlive = pds.p_prevlive = &pds;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_tsd_iter.c uClibc-git/libpthread/linuxthreads_db/td_ta_tsd_iter.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_ta_tsd_iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_ta_tsd_iter.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <linuxthreads/internals.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_clear_event.c uClibc-git/libpthread/linuxthreads_db/td_thr_clear_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_clear_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_clear_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+@@ -24,9 +23,7 @@
+
+
+ td_err_e
+-td_thr_clear_event (th, event)
+- const td_thrhandle_t *th;
+- td_thr_events_t *event;
++td_thr_clear_event(const td_thrhandle_t *th, td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_dbresume.c uClibc-git/libpthread/linuxthreads_db/td_thr_dbresume.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_dbresume.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_dbresume.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_dbsuspend.c uClibc-git/libpthread/linuxthreads_db/td_thr_dbsuspend.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_dbsuspend.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_dbsuspend.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_event_enable.c uClibc-git/libpthread/linuxthreads_db/td_thr_event_enable.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_event_enable.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_event_enable.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+@@ -24,9 +23,7 @@
+
+
+ td_err_e
+-td_thr_event_enable (th, onoff)
+- const td_thrhandle_t *th;
+- int onoff;
++td_thr_event_enable(const td_thrhandle_t *th, int onoff)
+ {
+ LOG ("td_thr_event_enable");
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_event_getmsg.c uClibc-git/libpthread/linuxthreads_db/td_thr_event_getmsg.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_event_getmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_event_getmsg.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getfpregs.c uClibc-git/libpthread/linuxthreads_db/td_thr_getfpregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getfpregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_getfpregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getgregs.c uClibc-git/libpthread/linuxthreads_db/td_thr_getgregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getgregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_getgregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_get_info.c uClibc-git/libpthread/linuxthreads_db/td_thr_get_info.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_get_info.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_get_info.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getxregs.c uClibc-git/libpthread/linuxthreads_db/td_thr_getxregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getxregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_getxregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getxregsize.c uClibc-git/libpthread/linuxthreads_db/td_thr_getxregsize.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_getxregsize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_getxregsize.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_set_event.c uClibc-git/libpthread/linuxthreads_db/td_thr_set_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_set_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_set_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+@@ -24,9 +23,7 @@
+
+
+ td_err_e
+-td_thr_set_event (th, event)
+- const td_thrhandle_t *th;
+- td_thr_events_t *event;
++td_thr_set_event(const td_thrhandle_t *th, td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setfpregs.c uClibc-git/libpthread/linuxthreads_db/td_thr_setfpregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setfpregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_setfpregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setgregs.c uClibc-git/libpthread/linuxthreads_db/td_thr_setgregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setgregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_setgregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setprio.c uClibc-git/libpthread/linuxthreads_db/td_thr_setprio.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setprio.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_setprio.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setsigpending.c uClibc-git/libpthread/linuxthreads_db/td_thr_setsigpending.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setsigpending.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_setsigpending.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setxregs.c uClibc-git/libpthread/linuxthreads_db/td_thr_setxregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_setxregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_setxregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_sigsetmask.c uClibc-git/libpthread/linuxthreads_db/td_thr_sigsetmask.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_sigsetmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_sigsetmask.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_tlsbase.c uClibc-git/libpthread/linuxthreads_db/td_thr_tlsbase.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_tlsbase.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_tlsbase.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+@@ -30,7 +29,7 @@
+ if (modid < 1)
+ return TD_NOTLS;
+
+-#if USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ union dtv pdtv, *dtvp;
+
+ LOG ("td_thr_tlsbase");
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_tls_get_addr.c uClibc-git/libpthread/linuxthreads_db/td_thr_tls_get_addr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_tls_get_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_tls_get_addr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <link.h>
+ #include "thread_dbP.h"
+@@ -27,7 +26,7 @@
+ size_t offset __attribute__ ((unused)),
+ void **address __attribute__ ((unused)))
+ {
+-#if USE_TLS
++#ifdef __UCLIBC_HAS_TLS__
+ /* Read the module ID from the link_map. */
+ size_t modid;
+ if (ps_pdread (th->th_ta_p->ph,
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_tsd.c uClibc-git/libpthread/linuxthreads_db/td_thr_tsd.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_tsd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_tsd.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <linuxthreads/internals.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_validate.c uClibc-git/libpthread/linuxthreads_db/td_thr_validate.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/td_thr_validate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/td_thr_validate.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <linuxthreads/internals.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads_db/thread_db.h uClibc-git/libpthread/linuxthreads_db/thread_db.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads_db/thread_db.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads_db/thread_db.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _THREAD_DB_H
+ #define _THREAD_DB_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/cancel.c uClibc-git/libpthread/linuxthreads.old/cancel.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/cancel.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/cancel.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,6 @@
+
+ /* Thread cancellation */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <errno.h>
+ #include "pthread.h"
+ #include "internals.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/condvar.c uClibc-git/libpthread/linuxthreads.old/condvar.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/condvar.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/condvar.c 2014-02-03 12:32:56.000000000 +0100
+@@ -25,16 +25,6 @@
+ #include "queue.h"
+ #include "restart.h"
+
+-libpthread_hidden_proto(pthread_cond_broadcast)
+-libpthread_hidden_proto(pthread_cond_destroy)
+-libpthread_hidden_proto(pthread_cond_init)
+-libpthread_hidden_proto(pthread_cond_signal)
+-libpthread_hidden_proto(pthread_cond_wait)
+-libpthread_hidden_proto(pthread_cond_timedwait)
+-
+-libpthread_hidden_proto(pthread_condattr_destroy)
+-libpthread_hidden_proto(pthread_condattr_init)
+-
+ int pthread_cond_init(pthread_cond_t *cond,
+ const pthread_condattr_t *cond_attr attribute_unused)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/errno.c uClibc-git/libpthread/linuxthreads.old/errno.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/errno.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/errno.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,6 @@
+
+ /* Define the location of errno for the remainder of the C library */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <errno.h>
+ #include <netdb.h>
+ #include "pthread.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/events.c uClibc-git/libpthread/linuxthreads.old/events.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/events.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/events.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* The functions contained here do nothing, they just return. */
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/forward.c uClibc-git/libpthread/linuxthreads.old/forward.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/forward.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/forward.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <stdlib.h>
+@@ -163,8 +162,12 @@
+
+ FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
+
++#if 0
+ FORWARD2 (_pthread_cleanup_push, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
++#endif
+ FORWARD2 (_pthread_cleanup_push_defer, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
+
++#if 0
+ FORWARD2 (_pthread_cleanup_pop, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)
++#endif
+ FORWARD2 (_pthread_cleanup_pop_restore, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/internals.h uClibc-git/libpthread/linuxthreads.old/internals.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/internals.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/internals.h 2014-02-03 12:32:56.000000000 +0100
+@@ -327,32 +327,28 @@
+
+ /* The page size we can get from the system. This should likely not be
+ changed by the machine file but, you never know. */
+-extern size_t __pagesize;
+-#include <bits/uClibc_page.h>
+-#ifndef PAGE_SIZE
+-#define PAGE_SIZE (sysconf (_SC_PAGESIZE))
+-#endif
++#define __PAGE_SIZE (sysconf (_SC_PAGESIZE))
+
+ /* The max size of the thread stack segments. If the default
+ THREAD_SELF implementation is used, this must be a power of two and
+- a multiple of PAGE_SIZE. */
++ a multiple of __PAGE_SIZE. */
+ #ifndef STACK_SIZE
+ #ifdef __ARCH_USE_MMU__
+ #define STACK_SIZE (2 * 1024 * 1024)
+ #else
+-#define STACK_SIZE (4 * __pagesize)
++#define STACK_SIZE (4 * __PAGE_SIZE)
+ #endif
+ #endif
+
+-/* The initial size of the thread stack. Must be a multiple of PAGE_SIZE. */
++/* The initial size of the thread stack. Must be a multiple of __PAGE_SIZE. */
+ #ifndef INITIAL_STACK_SIZE
+-#define INITIAL_STACK_SIZE (4 * __pagesize)
++#define INITIAL_STACK_SIZE (4 * __PAGE_SIZE)
+ #endif
+
+ /* Size of the thread manager stack. The "- 32" avoids wasting space
+ with some malloc() implementations. */
+ #ifndef THREAD_MANAGER_STACK_SIZE
+-#define THREAD_MANAGER_STACK_SIZE (2 * __pagesize - 32)
++#define THREAD_MANAGER_STACK_SIZE (2 * __PAGE_SIZE - 32)
+ #endif
+
+ /* The base of the "array" of thread stacks. The array will grow down from
+@@ -385,7 +381,7 @@
+
+ /* Recover thread descriptor for the current thread */
+
+-extern pthread_descr __pthread_find_self (void) __attribute__ ((const));
++extern pthread_descr __pthread_find_self (void) __attribute__ ((const)) attribute_hidden;
+
+ static __inline__ pthread_descr thread_self (void) __attribute__ ((const));
+ static __inline__ pthread_descr thread_self (void)
+@@ -455,18 +451,18 @@
+ /* Internal global functions */
+
+ void __pthread_do_exit (void *retval, char *currentframe)
+- __attribute__ ((__noreturn__));
+-void __pthread_destroy_specifics(void);
+-void __pthread_perform_cleanup(char *currentframe);
+-int __pthread_initialize_manager(void);
++ __attribute__ ((__noreturn__)) attribute_hidden;
++void __pthread_destroy_specifics(void) attribute_hidden;
++void __pthread_perform_cleanup(char *currentframe) attribute_hidden;
++int __pthread_initialize_manager(void) attribute_hidden;
+ void __pthread_message(char * fmt, ...)
+- __attribute__ ((__format__ (printf, 1, 2)));
+-int __pthread_manager(void *reqfd);
+-int __pthread_manager_event(void *reqfd);
+-void __pthread_manager_sighandler(int sig);
+-void __pthread_reset_main_thread(void);
+-void __fresetlockfiles(void);
+-void __pthread_manager_adjust_prio(int thread_prio);
++ __attribute__ ((__format__ (printf, 1, 2))) attribute_hidden;
++int __pthread_manager(void *reqfd) attribute_hidden;
++int __pthread_manager_event(void *reqfd) attribute_hidden;
++void __pthread_manager_sighandler(int sig) attribute_hidden;
++void __pthread_reset_main_thread(void) attribute_hidden;
++void __fresetlockfiles(void) attribute_hidden;
++void __pthread_manager_adjust_prio(int thread_prio) attribute_hidden;
+ void __pthread_initialize_minimal (void);
+
+ extern void __pthread_exit (void *retval)
+@@ -475,36 +471,36 @@
+ #endif
+ ;
+
+-extern int __pthread_attr_setguardsize __P ((pthread_attr_t *__attr,
+- size_t __guardsize));
+-extern int __pthread_attr_getguardsize __P ((__const pthread_attr_t *__attr,
+- size_t *__guardsize));
+-extern int __pthread_attr_setstackaddr __P ((pthread_attr_t *__attr,
+- void *__stackaddr));
+-extern int __pthread_attr_getstackaddr __P ((__const pthread_attr_t *__attr,
+- void **__stackaddr));
+-extern int __pthread_attr_setstacksize __P ((pthread_attr_t *__attr,
+- size_t __stacksize));
+-extern int __pthread_attr_getstacksize __P ((__const pthread_attr_t *__attr,
+- size_t *__stacksize));
+-extern int __pthread_getconcurrency __P ((void));
+-extern int __pthread_setconcurrency __P ((int __level));
+-extern void __pthread_kill_other_threads_np __P ((void));
+-
+-extern void __pthread_restart_old(pthread_descr th);
+-extern void __pthread_suspend_old(pthread_descr self);
+-extern int __pthread_timedsuspend_old(pthread_descr self, const struct timespec *abstime);
+-
+-extern void __pthread_restart_new(pthread_descr th);
+-extern void __pthread_suspend_new(pthread_descr self);
+-extern int __pthread_timedsuspend_new(pthread_descr self, const struct timespec *abstime);
++extern int __pthread_attr_setguardsize(pthread_attr_t *__attr,
++ size_t __guardsize) attribute_hidden;
++extern int __pthread_attr_getguardsize(const pthread_attr_t *__attr,
++ size_t *__guardsize) attribute_hidden;
++extern int __pthread_attr_setstackaddr(pthread_attr_t *__attr,
++ void *__stackaddr) attribute_hidden;
++extern int __pthread_attr_getstackaddr(const pthread_attr_t *__attr,
++ void **__stackaddr) attribute_hidden;
++extern int __pthread_attr_setstacksize(pthread_attr_t *__attr,
++ size_t __stacksize) attribute_hidden;
++extern int __pthread_attr_getstacksize(const pthread_attr_t *__attr,
++ size_t *__stacksize) attribute_hidden;
++extern int __pthread_getconcurrency(void) attribute_hidden;
++extern int __pthread_setconcurrency(int __level) attribute_hidden;
++extern void __pthread_kill_other_threads_np(void) attribute_hidden;
++
++extern void __pthread_restart_old(pthread_descr th) attribute_hidden;
++extern void __pthread_suspend_old(pthread_descr self) attribute_hidden;
++extern int __pthread_timedsuspend_old(pthread_descr self, const struct timespec *abstime) attribute_hidden;
++
++extern void __pthread_restart_new(pthread_descr th) attribute_hidden;
++extern void __pthread_suspend_new(pthread_descr self) attribute_hidden;
++extern int __pthread_timedsuspend_new(pthread_descr self, const struct timespec *abstime) attribute_hidden;
+
+-extern void __pthread_wait_for_restart_signal(pthread_descr self);
++extern void __pthread_wait_for_restart_signal(pthread_descr self) attribute_hidden;
+
+ /* Global pointers to old or new suspend functions */
+
+-extern void (*__pthread_restart)(pthread_descr);
+-extern void (*__pthread_suspend)(pthread_descr);
++extern void (*__pthread_restart)(pthread_descr) attribute_hidden;
++extern void (*__pthread_suspend)(pthread_descr) attribute_hidden;
+
+ #if defined NOT_IN_libc && defined IS_IN_libpthread
+ extern __typeof(pthread_mutex_init) __pthread_mutex_init attribute_hidden;
+@@ -515,7 +511,7 @@
+ #endif
+
+ /* Prototypes for some of the new semaphore functions. */
+-extern int __new_sem_post (sem_t * sem);
++/*extern int __new_sem_post (sem_t * sem);*/
+
+ /* TSD. */
+ extern int __pthread_internal_tsd_set (int key, const void * pointer);
+@@ -524,12 +520,10 @@
+ __pthread_internal_tsd_address (int key);
+
+ /* The functions called the signal events. */
+-extern void __linuxthreads_create_event (void);
+-extern void __linuxthreads_death_event (void);
+-extern void __linuxthreads_reap_event (void);
++extern void __linuxthreads_create_event (void) attribute_hidden;
++extern void __linuxthreads_death_event (void) attribute_hidden;
++extern void __linuxthreads_reap_event (void) attribute_hidden;
+
+ #include <pthread-functions.h>
+
+-extern int * __libc_pthread_init (const struct pthread_functions *functions);
+-
+ #endif /* internals.h */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/libc_pthread_init.c uClibc-git/libpthread/linuxthreads.old/libc_pthread_init.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/libc_pthread_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/libc_pthread_init.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,27 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#include <features.h>
+ #include <locale.h>
+-#include <stdlib.h>
+ #include <string.h>
+-
+-/* see comment in forward.c */
+-#define GCC_RENAME_BUG 1
+-#ifdef GCC_RENAME_BUG
+-# include <ctype.h>
+-# include <signal.h>
+-# include <unistd.h>
+-# include <sys/time.h>
+-# include <sys/wait.h>
+-#endif
+-
+-#include "internals.h"
+-#include "sysdeps/pthread/pthread-functions.h"
++#include <linuxthreads.old/sysdeps/pthread/pthread-functions.h>
+
+
+ int __libc_multiple_threads attribute_hidden __attribute__((nocommon));
+@@ -48,7 +33,7 @@
+ sizeof (__libc_pthread_functions));
+ #endif
+
+-#if ! defined USE___THREAD && defined __UCLIBC_HAS_XLOCALE__
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_XLOCALE__
+ /* Initialize thread-locale current locale to point to the global one.
+ With __thread support, the variable's initializer takes care of this. */
+ uselocale (LC_GLOBAL_LOCALE);
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/locale.c uClibc-git/libpthread/linuxthreads.old/locale.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/locale.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/locale.c 2014-02-03 12:32:56.000000000 +0100
+@@ -11,8 +11,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ #include <features.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/lockfile.c uClibc-git/libpthread/linuxthreads.old/lockfile.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/lockfile.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/lockfile.c 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/Makefile.in uClibc-git/libpthread/linuxthreads.old/Makefile.in
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -34,15 +34,12 @@
+
+ libpthread_SRC := \
+ attr.c cancel.c condvar.c errno.c events.c join.c lockfile.c manager.c \
+- mutex.c oldsemaphore.c pt-machine.c ptfork.c ptlongjmp.c \
++ mutex.c pt-machine.c ptfork.c pthread.c ptlongjmp.c \
+ rwlock.c semaphore.c signals.c specific.c spinlock.c wrapsyscall.c
+ ifeq ($(UCLIBC_HAS_XLOCALE),y)
+ libpthread_SRC += locale.c
+ endif
+
+-libpthread_SPEC_SRC := pthread.c
+-libpthread_SPEC_SRC := $(patsubst %.c,$(libpthread_DIR)/%.c,$(libpthread_SPEC_SRC))
+-
+ # remove generic sources, if arch specific version is present
+ ifneq ($(strip $(libpthread_ARCH_SRC)),)
+ libpthread_SRC := $(filter-out $(patsubst %.c,$(libpthread_DIR)/%.c,$(notdir $(libpthread_ARCH_SRC))),$(libpthread_SRC))
+@@ -62,15 +59,12 @@
+ libc-static-y += $(libpthread_OUT)/libc_pthread_init.o
+ libc-shared-y += $(libpthread_libc_OBJ:.o=.oS)
+
+-libpthread-static-y += $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.o,$(libpthread_SPEC_SRC))
+-libpthread-shared-y += $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.oS,$(libpthread_SPEC_SRC))
+-
+ ifeq ($(DOPIC),y)
+-libpthread-a-y += $(libpthread_OBJ:.o=.os) $(libpthread-static-y:.o=.os)
++libpthread-a-y += $(libpthread_OBJ:.o=.os)
+ else
+-libpthread-a-y += $(libpthread_OBJ) $(libpthread-static-y)
++libpthread-a-y += $(libpthread_OBJ)
+ endif
+-libpthread-so-y += $(libpthread_OBJ:.o=.os) $(libpthread-shared-y)
++libpthread-so-y += $(libpthread_OBJ:.o=.oS)
+
+ lib-a-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.a
+ lib-so-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.so
+@@ -93,7 +87,7 @@
+ ifeq ($(PTHREADS_DEBUG_SUPPORT),y)
+ $(libpthread_OUT)/libpthread.oS: STRIP_FLAGS:=$(STRIP_FLAGS:-x=-X --strip-debug)
+ endif
+-$(libpthread_OUT)/libpthread.oS: $(libpthread_SRC) $(libpthread_SPEC_SRC)
++$(libpthread_OUT)/libpthread.oS: $(libpthread_SRC)
+ $(Q)$(RM) $@
+ $(compile-m)
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/manager.c uClibc-git/libpthread/linuxthreads.old/manager.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/manager.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/manager.c 2014-02-03 12:32:56.000000000 +0100
+@@ -232,7 +232,7 @@
+ break;
+ case REQ_POST:
+ PDEBUG("got REQ_POST\n");
+- __new_sem_post(request.req_args.post);
++ sem_post(request.req_args.post);
+ break;
+ case REQ_DEBUG:
+ PDEBUG("got REQ_DEBUG\n");
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/oldsemaphore.c uClibc-git/libpthread/linuxthreads.old/oldsemaphore.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/oldsemaphore.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/oldsemaphore.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,241 +0,0 @@
+-/*
+- * This file contains the old semaphore code that we need to
+- * preserve for glibc-2.0 backwards compatibility. Port to glibc 2.1
+- * done by Cristian Gafton.
+- */
+-
+-/* Linuxthreads - a simple clone()-based implementation of Posix */
+-/* threads for Linux. */
+-/* Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) */
+-/* */
+-/* This program is free software; you can redistribute it and/or */
+-/* modify it under the terms of the GNU Library General Public License */
+-/* as published by the Free Software Foundation; either version 2 */
+-/* of the License, or (at your option) any later version. */
+-/* */
+-/* This program is distributed in the hope that it will be useful, */
+-/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
+-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
+-/* GNU Library General Public License for more details. */
+-
+-/* Semaphores a la POSIX 1003.1b */
+-
+-#include <errno.h>
+-#include "pthread.h"
+-#include "internals.h"
+-#include "spinlock.h"
+-#include "restart.h"
+-#include "queue.h"
+-
+-typedef struct {
+- long int sem_status;
+- int sem_spinlock;
+-} old_sem_t;
+-
+-/* Maximum value the semaphore can have. */
+-#define SEM_VALUE_MAX ((int) ((~0u) >> 1))
+-
+-static __inline__ int sem_compare_and_swap(old_sem_t *sem, long oldval, long newval)
+-{
+- return compare_and_swap(&sem->sem_status, oldval, newval, &sem->sem_spinlock);
+-}
+-
+-/* The state of a semaphore is represented by a long int encoding
+- either the semaphore count if >= 0 and no thread is waiting on it,
+- or the head of the list of threads waiting for the semaphore.
+- To distinguish the two cases, we encode the semaphore count N
+- as 2N+1, so that it has the lowest bit set.
+-
+- A sequence of sem_wait operations on a semaphore initialized to N
+- result in the following successive states:
+- 2N+1, 2N-1, ..., 3, 1, &first_waiting_thread, &second_waiting_thread, ...
+-*/
+-
+-static void sem_restart_list(pthread_descr waiting);
+-
+-int __old_sem_init(old_sem_t *sem, int pshared, unsigned int value);
+-int __old_sem_init(old_sem_t *sem, int pshared, unsigned int value)
+-{
+- if (value > SEM_VALUE_MAX) {
+- errno = EINVAL;
+- return -1;
+- }
+- if (pshared) {
+- errno = ENOSYS;
+- return -1;
+- }
+- sem->sem_spinlock = 0;
+- sem->sem_status = ((long)value << 1) + 1;
+- return 0;
+-}
+-
+-/* Function called by pthread_cancel to remove the thread from
+- waiting inside __old_sem_wait. Here we simply unconditionally
+- indicate that the thread is to be woken, by returning 1. */
+-
+-static int old_sem_extricate_func(void *obj attribute_unused, pthread_descr th attribute_unused)
+-{
+- return 1;
+-}
+-
+-int __old_sem_wait(old_sem_t * sem);
+-int __old_sem_wait(old_sem_t * sem)
+-{
+- long oldstatus, newstatus;
+- volatile pthread_descr self = thread_self();
+- pthread_descr * th;
+- pthread_extricate_if extr;
+-
+- /* Set up extrication interface */
+- extr.pu_object = 0;
+- extr.pu_extricate_func = old_sem_extricate_func;
+-
+- while (1) {
+- /* Register extrication interface */
+- __pthread_set_own_extricate_if(self, &extr);
+- do {
+- oldstatus = sem->sem_status;
+- if ((oldstatus & 1) && (oldstatus != 1))
+- newstatus = oldstatus - 2;
+- else {
+- newstatus = (long) self;
+- self->p_nextwaiting = (pthread_descr) oldstatus;
+- }
+- }
+- while (! sem_compare_and_swap(sem, oldstatus, newstatus));
+- if (newstatus & 1) {
+- /* We got the semaphore. */
+- __pthread_set_own_extricate_if(self, 0);
+- return 0;
+- }
+- /* Wait for sem_post or cancellation */
+- suspend(self);
+- __pthread_set_own_extricate_if(self, 0);
+-
+- /* This is a cancellation point */
+- if (self->p_canceled && self->p_cancelstate == PTHREAD_CANCEL_ENABLE) {
+- /* Remove ourselves from the waiting list if we're still on it */
+- /* First check if we're at the head of the list. */
+- do {
+- oldstatus = sem->sem_status;
+- if (oldstatus != (long) self) break;
+- newstatus = (long) self->p_nextwaiting;
+- }
+- while (! sem_compare_and_swap(sem, oldstatus, newstatus));
+- /* Now, check if we're somewhere in the list.
+- There's a race condition with sem_post here, but it does not matter:
+- the net result is that at the time pthread_exit is called,
+- self is no longer reachable from sem->sem_status. */
+- if (oldstatus != (long) self && (oldstatus & 1) == 0) {
+- for (th = &(((pthread_descr) oldstatus)->p_nextwaiting);
+- *th != NULL && *th != (pthread_descr) 1;
+- th = &((*th)->p_nextwaiting)) {
+- if (*th == self) {
+- *th = self->p_nextwaiting;
+- break;
+- }
+- }
+- }
+- __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME);
+- }
+- }
+-}
+-
+-int __old_sem_trywait(old_sem_t * sem);
+-int __old_sem_trywait(old_sem_t * sem)
+-{
+- long oldstatus, newstatus;
+-
+- do {
+- oldstatus = sem->sem_status;
+- if ((oldstatus & 1) == 0 || (oldstatus == 1)) {
+- errno = EAGAIN;
+- return -1;
+- }
+- newstatus = oldstatus - 2;
+- }
+- while (! sem_compare_and_swap(sem, oldstatus, newstatus));
+- return 0;
+-}
+-
+-int __old_sem_post(old_sem_t * sem);
+-int __old_sem_post(old_sem_t * sem)
+-{
+- long oldstatus, newstatus;
+-
+- do {
+- oldstatus = sem->sem_status;
+- if ((oldstatus & 1) == 0)
+- newstatus = 3;
+- else {
+- if (oldstatus >= SEM_VALUE_MAX) {
+- /* Overflow */
+- errno = ERANGE;
+- return -1;
+- }
+- newstatus = oldstatus + 2;
+- }
+- }
+- while (! sem_compare_and_swap(sem, oldstatus, newstatus));
+- if ((oldstatus & 1) == 0)
+- sem_restart_list((pthread_descr) oldstatus);
+- return 0;
+-}
+-
+-int __old_sem_getvalue(old_sem_t * sem, int * sval);
+-int __old_sem_getvalue(old_sem_t * sem, int * sval)
+-{
+- long status = sem->sem_status;
+- if (status & 1)
+- *sval = (int)((unsigned long) status >> 1);
+- else
+- *sval = 0;
+- return 0;
+-}
+-
+-int __old_sem_destroy(old_sem_t * sem);
+-int __old_sem_destroy(old_sem_t * sem)
+-{
+- if ((sem->sem_status & 1) == 0) {
+- errno = EBUSY;
+- return -1;
+- }
+- return 0;
+-}
+-
+-/* Auxiliary function for restarting all threads on a waiting list,
+- in priority order. */
+-
+-static void sem_restart_list(pthread_descr waiting)
+-{
+- pthread_descr th, towake, *p;
+-
+- /* Sort list of waiting threads by decreasing priority (insertion sort) */
+- towake = NULL;
+- while (waiting != (pthread_descr) 1) {
+- th = waiting;
+- waiting = waiting->p_nextwaiting;
+- p = &towake;
+- while (*p != NULL && th->p_priority < (*p)->p_priority)
+- p = &((*p)->p_nextwaiting);
+- th->p_nextwaiting = *p;
+- *p = th;
+- }
+- /* Wake up threads in priority order */
+- while (towake != NULL) {
+- th = towake;
+- towake = towake->p_nextwaiting;
+- th->p_nextwaiting = NULL;
+- restart(th);
+- }
+-}
+-
+-#if defined __PIC__ && defined DO_VERSIONING
+-symbol_version (__old_sem_init, sem_init, GLIBC_2.0);
+-symbol_version (__old_sem_wait, sem_wait, GLIBC_2.0);
+-symbol_version (__old_sem_trywait, sem_trywait, GLIBC_2.0);
+-symbol_version (__old_sem_post, sem_post, GLIBC_2.0);
+-symbol_version (__old_sem_getvalue, sem_getvalue, GLIBC_2.0);
+-symbol_version (__old_sem_destroy, sem_destroy, GLIBC_2.0);
+-#endif
+-
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/ptfork.c uClibc-git/libpthread/linuxthreads.old/ptfork.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/ptfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/ptfork.c 2014-02-03 12:32:56.000000000 +0100
+@@ -93,10 +93,7 @@
+ void __pthread_once_fork_child(void);
+ void __pthread_once_fork_parent(void);
+
+-extern __typeof(fork) __libc_fork;
+-
+-pid_t __fork(void) attribute_hidden;
+-pid_t __fork(void)
++static pid_t __fork(void)
+ {
+ pid_t pid;
+ struct handler_list * prepare, * child, * parent;
+@@ -151,11 +148,7 @@
+ return pid;
+ }
+ strong_alias(__fork,fork)
+-
+-pid_t vfork(void)
+-{
+- return __fork();
+-}
++strong_alias(__fork,vfork)
+
+ #else
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/pthread.c uClibc-git/libpthread/linuxthreads.old/pthread.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/pthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/pthread.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,6 @@
+
+ /* Thread creation, initialization, and basic low-level routines */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <errno.h>
+ #include <netdb.h> /* for h_errno */
+ #include <stddef.h>
+@@ -38,8 +36,6 @@
+ #include <sys/types.h>
+ #include <sys/syscall.h>
+
+-/* mods for uClibc: __libc_sigaction is not in any standard headers */
+-extern __typeof(sigaction) __libc_sigaction;
+ libpthread_hidden_proto(waitpid)
+ libpthread_hidden_proto(raise)
+
+@@ -260,6 +256,7 @@
+ return current_rtmax;
+ }
+
++#if 0
+ /* Allocate real-time signal with highest/lowest available
+ priority. Please note that we don't use a lock since we assume
+ this function to be called at program start. */
+@@ -272,6 +269,7 @@
+ return high ? current_rtmin++ : current_rtmax--;
+ }
+ #endif
++#endif
+
+ /* Initialize the pthread library.
+ Initialization is split in two functions:
+@@ -319,7 +317,7 @@
+
+ struct pthread_functions __pthread_functions =
+ {
+-#ifndef USE___THREAD
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+ .ptr_pthread_internal_tsd_set = __pthread_internal_tsd_set,
+ .ptr_pthread_internal_tsd_get = __pthread_internal_tsd_get,
+ .ptr_pthread_internal_tsd_address = __pthread_internal_tsd_address,
+@@ -367,10 +365,10 @@
+ .ptr_pthread_sigwait = pthread_sigwait,
+ .ptr_pthread_raise = pthread_raise,
+ .ptr__pthread_cleanup_push = _pthread_cleanup_push,
+- .ptr__pthread_cleanup_pop = _pthread_cleanup_pop
++ .ptr__pthread_cleanup_pop = _pthread_cleanup_pop,
+ */
+ .ptr__pthread_cleanup_push_defer = __pthread_cleanup_push_defer,
+- .ptr__pthread_cleanup_pop_restore = __pthread_cleanup_pop_restore,
++ .ptr__pthread_cleanup_pop_restore = __pthread_cleanup_pop_restore
+ };
+ #ifdef SHARED
+ # define ptr_pthread_functions &__pthread_functions
+@@ -528,7 +526,7 @@
+ /* On non-MMU systems we make sure that the initial thread bounds don't overlap
+ * with the manager stack frame */
+ NOMMU_INITIAL_THREAD_BOUNDS(__pthread_manager_thread_tos,__pthread_manager_thread_bos);
+- PDEBUG("manager stack: size=%d, bos=%p, tos=%p\n", THREAD_MANAGER_STACK_SIZE,
++ PDEBUG("manager stack: size=%ld, bos=%p, tos=%p\n", THREAD_MANAGER_STACK_SIZE,
+ __pthread_manager_thread_bos, __pthread_manager_thread_tos);
+ #if 0
+ PDEBUG("initial stack: estimate bos=%p, tos=%p\n",
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/ptlongjmp.c uClibc-git/libpthread/linuxthreads.old/ptlongjmp.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/ptlongjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/ptlongjmp.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,11 +19,7 @@
+ #include "pthread.h"
+ #include "internals.h"
+ #include <bits/stackinfo.h>
+-
+-/* These functions are not declared anywhere since they shouldn't be
+- used at another place but here. */
+-extern __typeof(siglongjmp) __libc_siglongjmp attribute_noreturn;
+-extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
++#include <jmpbuf-unwind.h>
+
+ static void pthread_cleanup_upto(__jmp_buf target)
+ {
+@@ -58,13 +54,13 @@
+ THREAD_SETMEM(self, p_in_sighandler, NULL);
+ }
+
+-void attribute_noreturn siglongjmp(sigjmp_buf env, int val)
++void siglongjmp(sigjmp_buf env, int val)
+ {
+ pthread_cleanup_upto(env->__jmpbuf);
+ __libc_siglongjmp(env, val);
+ }
+
+-void attribute_noreturn longjmp(jmp_buf env, int val)
++void longjmp(jmp_buf env, int val)
+ {
+ pthread_cleanup_upto(env->__jmpbuf);
+ __libc_longjmp(env, val);
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/pt-machine.c uClibc-git/libpthread/linuxthreads.old/pt-machine.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/pt-machine.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/pt-machine.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #define PT_EI
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/rwlock.c uClibc-git/libpthread/linuxthreads.old/rwlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/rwlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/rwlock.c 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/semaphore.c uClibc-git/libpthread/linuxthreads.old/semaphore.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/semaphore.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/semaphore.c 2014-02-03 12:32:56.000000000 +0100
+@@ -15,6 +15,7 @@
+ /* Semaphores a la POSIX 1003.1b */
+
+ #include <features.h>
++#include <limits.h>
+ #include <errno.h>
+ #include "pthread.h"
+ #include "semaphore.h"
+@@ -23,8 +24,7 @@
+ #include "restart.h"
+ #include "queue.h"
+
+-int __new_sem_init(sem_t *sem, int pshared, unsigned int value);
+-int __new_sem_init(sem_t *sem, int pshared, unsigned int value)
++int sem_init(sem_t *sem, int pshared, unsigned int value)
+ {
+ if (value > SEM_VALUE_MAX) {
+ errno = EINVAL;
+@@ -41,7 +41,7 @@
+ }
+
+ /* Function called by pthread_cancel to remove the thread from
+- waiting inside __new_sem_wait. */
++ waiting inside sem_wait. */
+
+ static int new_sem_extricate_func(void *obj, pthread_descr th)
+ {
+@@ -56,8 +56,7 @@
+ return did_remove;
+ }
+
+-int __new_sem_wait(sem_t * sem);
+-int __new_sem_wait(sem_t * sem)
++int sem_wait(sem_t * sem)
+ {
+ volatile pthread_descr self = thread_self();
+ pthread_extricate_if extr;
+@@ -119,8 +118,7 @@
+ return 0;
+ }
+
+-int __new_sem_trywait(sem_t * sem);
+-int __new_sem_trywait(sem_t * sem)
++int sem_trywait(sem_t * sem)
+ {
+ int retval;
+
+@@ -136,8 +134,7 @@
+ return retval;
+ }
+
+-int __new_sem_post(sem_t * sem);
+-int __new_sem_post(sem_t * sem)
++int sem_post(sem_t * sem)
+ {
+ pthread_descr self = thread_self();
+ pthread_descr th;
+@@ -178,15 +175,13 @@
+ return 0;
+ }
+
+-int __new_sem_getvalue(sem_t * sem, int * sval);
+-int __new_sem_getvalue(sem_t * sem, int * sval)
++int sem_getvalue(sem_t * sem, int * sval)
+ {
+ *sval = sem->__sem_value;
+ return 0;
+ }
+
+-int __new_sem_destroy(sem_t * sem);
+-int __new_sem_destroy(sem_t * sem)
++int sem_destroy(sem_t * sem)
+ {
+ if (sem->__sem_waiting != NULL) {
+ __set_errno (EBUSY);
+@@ -302,12 +297,3 @@
+ /* We got the semaphore */
+ return 0;
+ }
+-
+-
+-weak_alias (__new_sem_init, sem_init)
+-weak_alias (__new_sem_wait, sem_wait)
+-weak_alias (__new_sem_trywait, sem_trywait)
+-weak_alias (__new_sem_post, sem_post)
+-weak_alias (__new_sem_getvalue, sem_getvalue)
+-weak_alias (__new_sem_destroy, sem_destroy)
+-
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/semaphore.h uClibc-git/libpthread/linuxthreads.old/semaphore.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/semaphore.h 2014-02-03 12:32:56.000000000 +0100
+@@ -17,6 +17,7 @@
+
+ #include <features.h>
+ #include <sys/types.h>
++#include <limits.h>
+ #ifdef __USE_XOPEN2K
+ # define __need_timespec
+ # include <time.h>
+@@ -42,7 +43,9 @@
+ #define SEM_FAILED ((sem_t *) 0)
+
+ /* Maximum value the semaphore can have. */
++#ifndef SEM_VALUE_MAX
+ #define SEM_VALUE_MAX ((int) ((~0u) >> 1))
++#endif
+
+
+ __BEGIN_DECLS
+@@ -55,13 +58,13 @@
+ extern int sem_destroy (sem_t *__sem) __THROW;
+
+ /* Open a named semaphore NAME with open flags OFLAG. */
+-extern sem_t *sem_open (__const char *__name, int __oflag, ...) __THROW;
++extern sem_t *sem_open (const char *__name, int __oflag, ...) __THROW;
+
+ /* Close descriptor for named semaphore SEM. */
+ extern int sem_close (sem_t *__sem) __THROW;
+
+ /* Remove named semaphore NAME. */
+-extern int sem_unlink (__const char *__name) __THROW;
++extern int sem_unlink (const char *__name) __THROW;
+
+ /* Wait for SEM being posted.
+
+@@ -75,7 +78,7 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int sem_timedwait (sem_t *__restrict __sem,
+- __const struct timespec *__restrict __abstime);
++ const struct timespec *__restrict __abstime);
+ #endif
+
+ /* Test whether SEM is posted. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/signals.c uClibc-git/libpthread/linuxthreads.old/signals.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/signals.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/signals.c 2014-02-03 12:32:56.000000000 +0100
+@@ -22,9 +22,6 @@
+ #include "spinlock.h"
+ #include <bits/sigcontextinfo.h>
+
+-/* mods for uClibc: __libc_sigaction is not in any standard headers */
+-extern __typeof(sigaction) __libc_sigaction;
+-
+ int pthread_sigmask(int how, const sigset_t * newmask, sigset_t * oldmask)
+ {
+ sigset_t mask;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/specific.c uClibc-git/libpthread/linuxthreads.old/specific.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/specific.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/specific.c 2014-02-03 12:32:56.000000000 +0100
+@@ -167,7 +167,7 @@
+ __pthread_unlock(THREAD_GETMEM(self, p_lock));
+ }
+
+-#ifndef USE___THREAD
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+
+ /* Thread-specific data for libc. */
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/spinlock.c uClibc-git/libpthread/linuxthreads.old/spinlock.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/spinlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/spinlock.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,8 +14,6 @@
+
+ /* Internal locks */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <errno.h>
+ #include <sched.h>
+ #include <time.h>
+@@ -67,7 +65,6 @@
+ #if defined HAS_COMPARE_AND_SWAP
+ long oldstatus, newstatus;
+ int successful_seizure, spurious_wakeup_count;
+- int spin_count;
+ #endif
+
+ #if defined TEST_FOR_COMPARE_AND_SWAP
+@@ -87,11 +84,11 @@
+ return;
+
+ spurious_wakeup_count = 0;
+- spin_count = 0;
+
+ /* On SMP, try spinning to get the lock. */
+ #if 0
+ if (__pthread_smp_kernel) {
++ int spin_count;
+ int max_count = lock->__spinlock * 2 + 10;
+
+ if (max_count > MAX_ADAPTIVE_SPIN_COUNT)
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/alpha/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/alpha/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/alpha/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/alpha/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -17,8 +17,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/arc/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/arc/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/arc/pt-machine.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/arc/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -0,0 +1,42 @@
++/*
++ * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#ifndef _PT_MACHINE_H
++#define _PT_MACHINE_H 1
++#include <features.h>
++
++#ifndef PT_EI
++# define PT_EI __extern_always_inline
++#endif
++
++extern long int testandset (int *spinlock);
++extern int __compare_and_swap (long int *p, long int oldval, long int newval);
++
++PT_EI long int
++testandset (int *spinlock)
++{
++ unsigned int old = 1;
++
++ /* Atomically exchange @spinlock with 1 */
++ __asm__ __volatile__(
++ "ex %0, [%1]"
++ : "+r" (old)
++ : "r" (spinlock)
++ : "memory");
++
++ return old;
++
++}
++
++/* Get some notion of the current stack. Need not be exactly the top
++ of the stack, just something somewhere in the current frame.
++ I don't trust register variables, so let's do this the safe way. */
++#define CURRENT_STACK_FRAME \
++__extension__ ({ char *__sp; __asm__ ("mov %0,sp" : "=r" (__sp)); __sp; })
++
++#else
++#error PT_MACHINE already defined
++#endif /* pt-machine.h */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/arm/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/arm/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/arm/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/arm/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/bfin/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/bfin/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/bfin/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/bfin/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/c6x/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/c6x/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/c6x/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/c6x/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/cris/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/cris/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/cris/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/cris/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/frv/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/frv/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/frv/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/frv/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/h8300/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/h8300/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/h8300/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/h8300/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/i386/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/i386/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/i386/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/i386/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/i386/tls.h uClibc-git/libpthread/linuxthreads.old/sysdeps/i386/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/i386/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/i386/tls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/i386/useldt.h uClibc-git/libpthread/linuxthreads.old/sysdeps/i386/useldt.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/i386/useldt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/i386/useldt.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef __ASSEMBLER__
+ #include <stddef.h> /* For offsetof. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/ia64/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/ia64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/ia64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/ia64/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/ia64/tls.h uClibc-git/libpthread/linuxthreads.old/sysdeps/ia64/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/ia64/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/ia64/tls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/m68k/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/m68k/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/m68k/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/m68k/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/mips/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/mips/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/mips/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/mips/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -18,8 +18,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/nios/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/nios/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/nios/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/nios/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/nios2/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/nios2/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/nios2/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/nios2/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/powerpc/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/powerpc/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/powerpc/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/powerpc/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,8 +15,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* These routines are from Appendix G of the 'PowerPC 601 RISC Microprocessor
+ User's Manual', by IBM and Motorola. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-lock.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-lock.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-lock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-lock.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_LIBC_LOCK_H
+ #define _BITS_LIBC_LOCK_H 1
+@@ -271,6 +270,7 @@
+ _pthread_cleanup_pop_restore (&_buffer, (DOIT)); \
+ }
+
++#if 0
+ #define __libc_cleanup_push(fct, arg) \
+ { struct _pthread_cleanup_buffer _buffer; \
+ __libc_maybe_call (_pthread_cleanup_push, (&_buffer, (fct), (arg)), 0)
+@@ -278,6 +278,7 @@
+ #define __libc_cleanup_pop(execute) \
+ __libc_maybe_call (_pthread_cleanup_pop, (&_buffer, execute), 0); \
+ }
++#endif
+
+ /* Create thread-specific key. */
+ #define __libc_key_create(KEY, DESTRUCTOR) \
+@@ -300,7 +301,7 @@
+ library. */
+
+ extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutex_attr);
++ const pthread_mutexattr_t *__mutex_attr);
+
+ extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+
+@@ -319,7 +320,7 @@
+
+ #ifdef __USE_UNIX98
+ extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
+- __const pthread_rwlockattr_t *__attr);
++ const pthread_rwlockattr_t *__attr);
+
+ extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
+
+@@ -338,7 +339,7 @@
+ void (*__destr_function) (void *));
+
+ extern int __pthread_setspecific (pthread_key_t __key,
+- __const void *__pointer);
++ const void *__pointer);
+
+ extern void *__pthread_getspecific (pthread_key_t __key);
+
+@@ -375,7 +376,6 @@
+ weak_extern (BP_SYM (__pthread_setspecific))
+ weak_extern (BP_SYM (__pthread_getspecific))
+ weak_extern (BP_SYM (__pthread_once))
+-weak_extern (__pthread_initialize)
+ weak_extern (__pthread_atfork)
+ weak_extern (BP_SYM (_pthread_cleanup_push))
+ weak_extern (BP_SYM (_pthread_cleanup_pop))
+@@ -400,7 +400,6 @@
+ # pragma weak __pthread_setspecific
+ # pragma weak __pthread_getspecific
+ # pragma weak __pthread_once
+-# pragma weak __pthread_initialize
+ # pragma weak __pthread_atfork
+ # pragma weak _pthread_cleanup_push_defer
+ # pragma weak _pthread_cleanup_pop_restore
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-tsd.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-tsd.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-tsd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/bits/libc-tsd.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,15 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_LIBC_TSD_H
+ #define _BITS_LIBC_TSD_H 1
+
+-#include <libc-internal.h>
+-
+ /* Fast thread-specific data internal to libc. */
+ enum __libc_tsd_key_t { _LIBC_TSD_KEY_MALLOC = 0,
+ _LIBC_TSD_KEY_DL_ERROR,
+@@ -32,12 +29,11 @@
+ _LIBC_TSD_KEY_CTYPE_TOUPPER,
+ _LIBC_TSD_KEY_N };
+
+-#include <sys/cdefs.h>
+-#include <tls.h>
+-
++#include <features.h>
+ #include <linuxthreads.old/internals.h>
+
+-#if defined(USE_TLS) && USE_TLS && HAVE___THREAD
++#ifdef __UCLIBC_HAS_TLS__
++#include <tls.h>
+
+ /* When __thread works, the generic definition is what we want. */
+ # include <sysdeps/generic/bits/libc-tsd.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/bits/pthreadtypes.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/bits/pthreadtypes.h 2014-02-03 12:32:56.000000000 +0100
+@@ -19,6 +19,9 @@
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+
++#define __need_size_t
++#include <stddef.h>
++
+ #define __need_schedparam
+ #include <bits/sched.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/not-cancel.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,18 +14,26 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <sysdep.h>
+
+ /* Uncancelable open. */
++#if defined __NR_openat && !defined __NR_open
++#define open_not_cancel(name, flags, mode) \
++ INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), \
++ (flags), (mode))
++#define open_not_cancel_2(name, flags) \
++ INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), \
++ (flags))
++#else
+ #define open_not_cancel(name, flags, mode) \
+ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode))
+ #define open_not_cancel_2(name, flags) \
+ INLINE_SYSCALL (open, 2, (const char *) (name), (flags))
++#endif
+
+ /* Uncancelable openat. */
+ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/pthread-functions.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/pthread-functions.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/pthread-functions.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/pthread-functions.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,25 +13,28 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTHREAD_FUNCTIONS_H
+ #define _PTHREAD_FUNCTIONS_H 1
+
+ #include <pthread.h>
++#if 0
+ #include <setjmp.h>
+ #include <linuxthreads.old/internals.h>
+
+ struct fork_block;
++#endif
+
+ /* Data type shared with libc. The libc uses it to pass on calls to
+ the thread functions. Wine pokes directly into this structure,
+ so if possible avoid breaking it and append new hooks to the end. */
+ struct pthread_functions
+ {
++#if 0
+ pid_t (*ptr_pthread_fork) (struct fork_block *);
++#endif
+ int (*ptr_pthread_attr_destroy) (pthread_attr_t *);
+ int (*ptr_pthread_attr_init) (pthread_attr_t *);
+ int (*ptr_pthread_attr_getdetachstate) (const pthread_attr_t *, int *);
+@@ -68,26 +71,36 @@
+ pthread_t (*ptr_pthread_self) (void);
+ int (*ptr_pthread_setcancelstate) (int, int *);
+ int (*ptr_pthread_setcanceltype) (int, int *);
++#if 0
+ void (*ptr_pthread_do_exit) (void *retval, char *currentframe);
+ void (*ptr_pthread_cleanup_upto) (__jmp_buf target,
+ char *targetframe);
+ pthread_descr (*ptr_pthread_thread_self) (void);
++#endif
++#if !defined __UCLIBC_HAS_TLS__ && defined __UCLIBC_HAS_RPC__
+ int (*ptr_pthread_internal_tsd_set) (int key, const void *pointer);
+ void * (*ptr_pthread_internal_tsd_get) (int key);
+ void ** __attribute__ ((__const__))
+ (*ptr_pthread_internal_tsd_address) (int key);
++#endif
++#if 0
+ int (*ptr_pthread_sigaction) (int sig, const struct sigaction * act,
+ struct sigaction *oact);
+ int (*ptr_pthread_sigwait) (const sigset_t *set, int *sig);
+ int (*ptr_pthread_raise) (int sig);
++#endif
+ int (*ptr_pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *,
+ const struct timespec *);
++#if 0
+ void (*ptr__pthread_cleanup_push) (struct _pthread_cleanup_buffer * buffer,
+ void (*routine)(void *), void * arg);
++#endif
+ void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer * buffer,
+ void (*routine)(void *), void * arg);
++#if 0
+ void (*ptr__pthread_cleanup_pop) (struct _pthread_cleanup_buffer * buffer,
+ int execute);
++#endif
+ void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer * buffer,
+ int execute);
+ };
+@@ -95,4 +108,6 @@
+ /* Variable in libc.so. */
+ extern struct pthread_functions __libc_pthread_functions attribute_hidden;
+
++extern int * __libc_pthread_init (const struct pthread_functions *functions);
++
+ #endif /* pthread-functions.h */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/pthread.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/pthread.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/pthread.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/pthread.h 2014-02-03 12:32:56.000000000 +0100
+@@ -161,7 +161,7 @@
+ if ATTR is NULL), and call function START_ROUTINE with given
+ arguments ARG. */
+ extern int pthread_create (pthread_t *__restrict __threadp,
+- __const pthread_attr_t *__restrict __attr,
++ const pthread_attr_t *__restrict __attr,
+ void *(*__start_routine) (void *),
+ void *__restrict __arg) __THROW;
+
+@@ -201,16 +201,16 @@
+ int __detachstate) __THROW;
+
+ /* Return in *DETACHSTATE the `detachstate' attribute in *ATTR. */
+-extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
++extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+ int *__detachstate) __THROW;
+
+ /* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */
+ extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+- __const struct sched_param *__restrict
++ const struct sched_param *__restrict
+ __param) __THROW;
+
+ /* Return in *PARAM the scheduling parameters of *ATTR. */
+-extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
++extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict
+ __attr,
+ struct sched_param *__restrict __param)
+ __THROW;
+@@ -220,7 +220,7 @@
+ __THROW;
+
+ /* Return in *POLICY the scheduling policy of *ATTR. */
+-extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
++extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
+ __attr, int *__restrict __policy)
+ __THROW;
+
+@@ -229,7 +229,7 @@
+ int __inherit) __THROW;
+
+ /* Return in *INHERIT the scheduling inheritance mode of *ATTR. */
+-extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
++extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
+ __attr, int *__restrict __inherit)
+ __THROW;
+
+@@ -238,7 +238,7 @@
+ __THROW;
+
+ /* Return in *SCOPE the scheduling contention scope of *ATTR. */
+-extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
++extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+ int *__restrict __scope) __THROW;
+
+ #ifdef __USE_UNIX98
+@@ -247,7 +247,7 @@
+ size_t __guardsize) __THROW;
+
+ /* Get the size of the guard area at the bottom of the thread. */
+-extern int pthread_attr_getguardsize (__const pthread_attr_t *__restrict
++extern int pthread_attr_getguardsize (const pthread_attr_t *__restrict
+ __attr, size_t *__restrict __guardsize)
+ __THROW;
+ #endif
+@@ -261,7 +261,7 @@
+ void *__stackaddr) __THROW;
+
+ /* Return the previously set address for the stack. */
+-extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
++extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+ __attr, void **__restrict __stackaddr)
+ __THROW;
+ #endif
+@@ -274,7 +274,7 @@
+ size_t __stacksize) __THROW;
+
+ /* Return the previously set address for the stack. */
+-extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
++extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+ void **__restrict __stackaddr,
+ size_t *__restrict __stacksize) __THROW;
+ #endif
+@@ -286,7 +286,7 @@
+ size_t __stacksize) __THROW;
+
+ /* Return the currently used minimal stack size. */
+-extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
++extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
+ __attr, size_t *__restrict __stacksize)
+ __THROW;
+
+@@ -306,7 +306,7 @@
+ /* Set the scheduling parameters for TARGET_THREAD according to POLICY
+ and *PARAM. */
+ extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+- __const struct sched_param *__param)
++ const struct sched_param *__param)
+ __THROW;
+
+ /* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */
+@@ -333,7 +333,7 @@
+ /* Initialize MUTEX using attributes in *MUTEX_ATTR, or use the
+ default values if later is NULL. */
+ extern int pthread_mutex_init (pthread_mutex_t *__restrict __mutex,
+- __const pthread_mutexattr_t *__restrict
++ const pthread_mutexattr_t *__restrict
+ __mutex_attr) __THROW;
+
+ /* Destroy MUTEX. */
+@@ -348,7 +348,7 @@
+ #ifdef __USE_XOPEN2K
+ /* Wait until lock becomes available, or specified time passes. */
+ extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW;
+ #endif
+
+@@ -366,7 +366,7 @@
+ extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) __THROW;
+
+ /* Get the process-shared flag of the mutex attribute ATTR. */
+-extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
++extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -382,7 +382,7 @@
+ __THROW;
+
+ /* Return in *KIND the mutex kind attribute in *ATTR. */
+-extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict
++extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
+ __attr, int *__restrict __kind) __THROW;
+ #endif
+
+@@ -392,22 +392,27 @@
+ /* Initialize condition variable COND using attributes ATTR, or use
+ the default values if later is NULL. */
+ extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+- __const pthread_condattr_t *__restrict
++ const pthread_condattr_t *__restrict
+ __cond_attr) __THROW;
++libpthread_hidden_proto(pthread_cond_init)
+
+ /* Destroy condition variable COND. */
+ extern int pthread_cond_destroy (pthread_cond_t *__cond) __THROW;
++libpthread_hidden_proto(pthread_cond_destroy)
+
+ /* Wake up one thread waiting for condition variable COND. */
+ extern int pthread_cond_signal (pthread_cond_t *__cond) __THROW;
++libpthread_hidden_proto(pthread_cond_signal)
+
+ /* Wake up all threads waiting for condition variables COND. */
+ extern int pthread_cond_broadcast (pthread_cond_t *__cond) __THROW;
++libpthread_hidden_proto(pthread_cond_broadcast)
+
+ /* Wait for condition variable COND to be signaled or broadcast.
+ MUTEX is assumed to be locked before. */
+ extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+ pthread_mutex_t *__restrict __mutex);
++libpthread_hidden_proto(pthread_cond_wait)
+
+ /* Wait for condition variable COND to be signaled or broadcast until
+ ABSTIME. MUTEX is assumed to be locked before. ABSTIME is an
+@@ -415,19 +420,22 @@
+ (00:00:00 GMT, January 1, 1970). */
+ extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+ pthread_mutex_t *__restrict __mutex,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime);
++libpthread_hidden_proto(pthread_cond_timedwait)
+
+ /* Functions for handling condition variable attributes. */
+
+ /* Initialize condition variable attribute ATTR. */
+ extern int pthread_condattr_init (pthread_condattr_t *__attr) __THROW;
++libpthread_hidden_proto(pthread_condattr_init)
+
+ /* Destroy condition variable attribute ATTR. */
+ extern int pthread_condattr_destroy (pthread_condattr_t *__attr) __THROW;
++libpthread_hidden_proto(pthread_condattr_destroy)
+
+ /* Get the process-shared flag of the condition variable attribute ATTR. */
+-extern int pthread_condattr_getpshared (__const pthread_condattr_t *
++extern int pthread_condattr_getpshared (const pthread_condattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -442,7 +450,7 @@
+ /* Initialize read-write lock RWLOCK using attributes ATTR, or use
+ the default values if later is NULL. */
+ extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+- __const pthread_rwlockattr_t *__restrict
++ const pthread_rwlockattr_t *__restrict
+ __attr) __THROW;
+
+ /* Destroy read-write lock RWLOCK. */
+@@ -457,7 +465,7 @@
+ # ifdef __USE_XOPEN2K
+ /* Try to acquire read lock for RWLOCK or return after specfied time. */
+ extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW;
+ # endif
+
+@@ -470,7 +478,7 @@
+ # ifdef __USE_XOPEN2K
+ /* Try to acquire write lock for RWLOCK or return after specfied time. */
+ extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW;
+ # endif
+
+@@ -487,7 +495,7 @@
+ extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) __THROW;
+
+ /* Return current setting of process-shared attribute of ATTR in PSHARED. */
+-extern int pthread_rwlockattr_getpshared (__const pthread_rwlockattr_t *
++extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -496,7 +504,7 @@
+ int __pshared) __THROW;
+
+ /* Return current setting of reader/writer preference. */
+-extern int pthread_rwlockattr_getkind_np (__const pthread_rwlockattr_t *__attr,
++extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *__attr,
+ int *__pref) __THROW;
+
+ /* Set reader/write preference. */
+@@ -532,7 +540,7 @@
+ /* Barriers are a also a new feature in 1003.1j-2000. */
+
+ extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+- __const pthread_barrierattr_t *__restrict
++ const pthread_barrierattr_t *__restrict
+ __attr, unsigned int __count) __THROW;
+
+ extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) __THROW;
+@@ -541,7 +549,7 @@
+
+ extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) __THROW;
+
+-extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
++extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+ __restrict __attr,
+ int *__restrict __pshared) __THROW;
+
+@@ -569,7 +577,7 @@
+
+ /* Store POINTER in the thread-specific data slot identified by KEY. */
+ extern int pthread_setspecific (pthread_key_t __key,
+- __const void *__pointer) __THROW;
++ const void *__pointer) __THROW;
+
+ /* Return current value of the thread-specific data slot identified by KEY. */
+ extern void *pthread_getspecific (pthread_key_t __key) __THROW;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/tls.h uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/pthread/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/pthread/tls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* By default no TLS support is available. This is signaled by the
+ absence of the symbol USE_TLS. */
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/sh/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/sh/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh/tls.h uClibc-git/libpthread/linuxthreads.old/sysdeps/sh/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/sh/tls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.c uClibc-git/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.c 2014-02-03 12:32:56.000000000 +0100
+@@ -19,8 +19,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include "pt-machine.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/sh64/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -19,8 +19,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -16,8 +16,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+- not, write to the Free Software Foundation, Inc.,
+- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/x86_64/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/x86_64/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/x86_64/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/x86_64/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+@@ -33,6 +32,9 @@
+ # define PT_EI __extern_always_inline
+ # endif
+
++extern long int testandset (int *);
++extern int __compare_and_swap (long int *, long int, long int);
++
+ /* Get some notion of the current stack. Need not be exactly the top
+ of the stack, just something somewhere in the current frame. */
+ # define CURRENT_STACK_FRAME stack_pointer
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/x86_64/tls.h uClibc-git/libpthread/linuxthreads.old/sysdeps/x86_64/tls.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/x86_64/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/x86_64/tls.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/xtensa/pt-machine.h uClibc-git/libpthread/linuxthreads.old/sysdeps/xtensa/pt-machine.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/sysdeps/xtensa/pt-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/sysdeps/xtensa/pt-machine.h 2014-02-03 12:32:56.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+@@ -26,19 +25,51 @@
+ #include <asm/unistd.h>
+
+ #ifndef PT_EI
+-# define PT_EI __extern_always_inline
++# define PT_EI extern inline __attribute__ ((gnu_inline))
+ #endif
+
+-/* Memory barrier. */
+ #define MEMORY_BARRIER() __asm__ ("memw" : : : "memory")
++#define HAS_COMPARE_AND_SWAP
++
++extern long int testandset (int *spinlock);
++extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+
+ /* Spinlock implementation; required. */
+ PT_EI long int
+ testandset (int *spinlock)
+ {
+- int unused = 0;
+- return INTERNAL_SYSCALL (xtensa, , 4, SYS_XTENSA_ATOMIC_SET,
+- spinlock, 1, unused);
++ unsigned long tmp;
++ __asm__ volatile (
++" movi %0, 0 \n"
++" wsr %0, SCOMPARE1 \n"
++" movi %0, 1 \n"
++" s32c1i %0, %1, 0 \n"
++ : "=&a" (tmp)
++ : "a" (spinlock)
++ : "memory"
++ );
++ return tmp;
++}
++
++PT_EI int
++__compare_and_swap (long int *p, long int oldval, long int newval)
++{
++ unsigned long tmp;
++ unsigned long value;
++ __asm__ volatile (
++"1: l32i %0, %2, 0 \n"
++" bne %0, %4, 2f \n"
++" wsr %0, SCOMPARE1 \n"
++" mov %1, %0 \n"
++" mov %0, %3 \n"
++" s32c1i %0, %2, 0 \n"
++" bne %1, %0, 1b \n"
++"2: \n"
++ : "=&a" (tmp), "=&a" (value)
++ : "a" (p), "a" (newval), "a" (oldval)
++ : "memory" );
++
++ return tmp == oldval;
+ }
+
+ /* Get some notion of the current stack. Need not be exactly the top
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old/wrapsyscall.c uClibc-git/libpthread/linuxthreads.old/wrapsyscall.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old/wrapsyscall.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old/wrapsyscall.c 2014-02-03 12:32:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* Wrapper arpund system calls to provide cancellation points.
++/* Wrapper around system calls to provide cancellation points.
+ Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+@@ -15,11 +15,8 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <fcntl.h>
+ #include <sys/mman.h>
+ #include <pthread.h>
+@@ -83,6 +80,12 @@
+ CANCELABLE_SYSCALL_VA (int, fcntl, (int fd, int cmd, ...),
+ (fd, cmd, va_arg (ap, long int)), cmd)
+
++#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 32
++/* fcntl64(2). */
++CANCELABLE_SYSCALL_VA (int, fcntl64, (int fd, int cmd, ...),
++ (fd, cmd, va_arg (ap, long int)), cmd)
++#endif
++
+
+ /* fsync(2). */
+ CANCELABLE_SYSCALL (int, fsync, (int fd), (fd))
+@@ -230,12 +233,12 @@
+ #endif /* __UCLIBC_HAS_SOCKET__ */
+
+ #ifdef __UCLIBC_HAS_EPOLL__
++# include <sys/epoll.h>
+ # ifdef __NR_epoll_wait
+ CANCELABLE_SYSCALL (int, epoll_wait, (int epfd, struct epoll_event *events, int maxevents, int timeout),
+ (epfd, events, maxevents, timeout))
+ # endif
+ # ifdef __NR_epoll_pwait
+-# include <signal.h>
+ CANCELABLE_SYSCALL (int, epoll_pwait, (int epfd, struct epoll_event *events, int maxevents, int timeout,
+ const sigset_t *set),
+ (epfd, events, maxevents, timeout, set))
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/proc_service.h uClibc-git/libpthread/linuxthreads.old_db/proc_service.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/proc_service.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/proc_service.h 2014-02-03 12:32:56.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The definitions in this file must correspond to those in the debugger. */
+ #include <sys/procfs.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_init.c uClibc-git/libpthread/linuxthreads.old_db/td_init.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_init.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_log.c uClibc-git/libpthread/linuxthreads.old_db/td_log.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_log.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_log.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_symbol_list.c uClibc-git/libpthread/linuxthreads.old_db/td_symbol_list.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_symbol_list.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_symbol_list.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "thread_dbP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_clear_event.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_clear_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_clear_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_clear_event.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,17 +14,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+
+ td_err_e
+-td_ta_clear_event (ta, event)
+- const td_thragent_t *ta;
+- td_thr_events_t *event;
++td_ta_clear_event(const td_thragent_t *ta,td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_delete.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_delete.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_delete.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_enable_stats.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_enable_stats.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_enable_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_enable_stats.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_event_addr.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_event_addr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_event_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_event_addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_event_getmsg.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_event_getmsg.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_event_getmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_event_getmsg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_get_nthreads.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_get_nthreads.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_get_nthreads.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_get_nthreads.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_get_ph.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_get_ph.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_get_ph.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_get_ph.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_get_stats.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_get_stats.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_get_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_get_stats.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_map_id2thr.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_map_id2thr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_map_id2thr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_map_id2thr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_map_lwp2thr.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_map_lwp2thr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_map_lwp2thr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_map_lwp2thr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_new.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_new.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_new.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_new.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_reset_stats.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_reset_stats.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_reset_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_reset_stats.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_setconcurrency.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_setconcurrency.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_setconcurrency.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_setconcurrency.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_set_event.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_set_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_set_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_set_event.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,17 +14,14 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+
+ td_err_e
+-td_ta_set_event (ta, event)
+- const td_thragent_t *ta;
+- td_thr_events_t *event;
++td_ta_set_event(const td_thragent_t *ta,td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_thr_iter.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_thr_iter.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_thr_iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_thr_iter.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <alloca.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_tsd_iter.c uClibc-git/libpthread/linuxthreads.old_db/td_ta_tsd_iter.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_ta_tsd_iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_ta_tsd_iter.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <alloca.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_clear_event.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_clear_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_clear_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_clear_event.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+@@ -24,9 +23,7 @@
+
+
+ td_err_e
+-td_thr_clear_event (th, event)
+- const td_thrhandle_t *th;
+- td_thr_events_t *event;
++td_thr_clear_event(const td_thrhandle_t *th,td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_dbresume.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_dbresume.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_dbresume.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_dbresume.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_dbsuspend.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_dbsuspend.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_dbsuspend.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_dbsuspend.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_event_enable.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_event_enable.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_event_enable.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_event_enable.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+@@ -24,9 +23,7 @@
+
+
+ td_err_e
+-td_thr_event_enable (th, onoff)
+- const td_thrhandle_t *th;
+- int onoff;
++td_thr_event_enable(const td_thrhandle_t *th, int onoff)
+ {
+ LOG ("td_thr_event_enable");
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_event_getmsg.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_event_getmsg.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_event_getmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_event_getmsg.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getfpregs.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_getfpregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getfpregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_getfpregs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getgregs.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_getgregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getgregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_getgregs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_get_info.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_get_info.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_get_info.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_get_info.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getxregs.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_getxregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getxregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_getxregs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getxregsize.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_getxregsize.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_getxregsize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_getxregsize.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_set_event.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_set_event.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_set_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_set_event.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+@@ -24,9 +23,7 @@
+
+
+ td_err_e
+-td_thr_set_event (th, event)
+- const td_thrhandle_t *th;
+- td_thr_events_t *event;
++td_thr_set_event(const td_thrhandle_t *th, td_thr_events_t *event)
+ {
+ td_thr_events_t old_event;
+ int i;
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setfpregs.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_setfpregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setfpregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_setfpregs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setgregs.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_setgregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setgregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_setgregs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setprio.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_setprio.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setprio.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_setprio.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setsigpending.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_setsigpending.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setsigpending.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_setsigpending.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setxregs.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_setxregs.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_setxregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_setxregs.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_sigsetmask.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_sigsetmask.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_sigsetmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_sigsetmask.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <link.h>
+ #include "thread_dbP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_tsd.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_tsd.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_tsd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_tsd.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_validate.c uClibc-git/libpthread/linuxthreads.old_db/td_thr_validate.c
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/td_thr_validate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/td_thr_validate.c 2014-02-03 12:32:56.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/thread_db.h uClibc-git/libpthread/linuxthreads.old_db/thread_db.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/thread_db.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/thread_db.h 2014-02-03 12:32:56.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _THREAD_DB_H
+ #define _THREAD_DB_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/linuxthreads.old_db/thread_dbP.h uClibc-git/libpthread/linuxthreads.old_db/thread_dbP.h
+--- uClibc-0.9.33.2/libpthread/linuxthreads.old_db/thread_dbP.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/linuxthreads.old_db/thread_dbP.h 2014-02-03 12:32:56.000000000 +0100
+@@ -2,8 +2,6 @@
+ #ifndef _THREAD_DBP_H
+ #define _THREAD_DBP_H 1
+
+-#define __FORCE_GLIBC
+-#include <features.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include "proc_service.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/alloca_cutoff.c uClibc-git/libpthread/nptl/alloca_cutoff.c
+--- uClibc-0.9.33.2/libpthread/nptl/alloca_cutoff.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/alloca_cutoff.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <alloca.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/allocatestack.c uClibc-git/libpthread/nptl/allocatestack.c
+--- uClibc-0.9.33.2/libpthread/nptl/allocatestack.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/allocatestack.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+@@ -646,7 +645,7 @@
+ prot) != 0)
+ goto mprot_error;
+ #elif defined _STACK_GROWS_UP
+- if (mprotect ((char *) pd - pd->guardsize,
++ if (mprotect ((char *) (((uintptr_t) pd - pd->guardsize) & ~pagesize_m1),
+ pd->guardsize - guardsize, prot) != 0)
+ goto mprot_error;
+ #endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/cancellation.c uClibc-git/libpthread/nptl/cancellation.c
+--- uClibc-0.9.33.2/libpthread/nptl/cancellation.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/cancellation.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/cleanup.c uClibc-git/libpthread/nptl/cleanup.c
+--- uClibc-0.9.33.2/libpthread/nptl/cleanup.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/cleanup.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/cleanup_compat.c uClibc-git/libpthread/nptl/cleanup_compat.c
+--- uClibc-0.9.33.2/libpthread/nptl/cleanup_compat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/cleanup_compat.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/cleanup_defer.c uClibc-git/libpthread/nptl/cleanup_defer.c
+--- uClibc-0.9.33.2/libpthread/nptl/cleanup_defer.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/cleanup_defer.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/cleanup_defer_compat.c uClibc-git/libpthread/nptl/cleanup_defer_compat.c
+--- uClibc-0.9.33.2/libpthread/nptl/cleanup_defer_compat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/cleanup_defer_compat.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/cleanup_routine.c uClibc-git/libpthread/nptl/cleanup_routine.c
+--- uClibc-0.9.33.2/libpthread/nptl/cleanup_routine.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/cleanup_routine.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,13 +13,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+
+-
++void __pthread_cleanup_routine (struct __pthread_cleanup_frame *f);
+ void
+ __pthread_cleanup_routine (struct __pthread_cleanup_frame *f)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/descr.h uClibc-git/libpthread/nptl/descr.h
+--- uClibc-0.9.33.2/libpthread/nptl/descr.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/descr.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _DESCR_H
+ #define _DESCR_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/events.c uClibc-git/libpthread/nptl/events.c
+--- uClibc-0.9.33.2/libpthread/nptl/events.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/events.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The functions contained here do nothing, they just return. */
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/forward.c uClibc-git/libpthread/nptl/forward.c
+--- uClibc-0.9.33.2/libpthread/nptl/forward.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/forward.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/.gitignore uClibc-git/libpthread/nptl/.gitignore
+--- uClibc-0.9.33.2/libpthread/nptl/.gitignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/.gitignore 2014-02-03 12:32:57.000000000 +0100
+@@ -26,3 +26,5 @@
+ #
+ # symlinks
+ #
++sysdeps/pthread/pt-sigfillset.c
++sysdeps/pthread/pt-sigprocmask.c
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/herrno.c uClibc-git/libpthread/nptl/herrno.c
+--- uClibc-0.9.33.2/libpthread/nptl/herrno.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/herrno.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <netdb.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/init.c uClibc-git/libpthread/nptl/init.c
+--- uClibc-0.9.33.2/libpthread/nptl/init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+@@ -35,7 +34,6 @@
+ #include <lowlevellock.h>
+ #include <bits/kernel-features.h>
+ #include <stdio.h>
+-extern __typeof(sigaction) __libc_sigaction;
+
+ /* Size and alignment of static TLS block. */
+ size_t __static_tls_size;
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/libc-cancellation.c uClibc-git/libpthread/nptl/libc-cancellation.c
+--- uClibc-0.9.33.2/libpthread/nptl/libc-cancellation.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/libc-cancellation.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/linux_fsinfo.h uClibc-git/libpthread/nptl/linux_fsinfo.h
+--- uClibc-0.9.33.2/libpthread/nptl/linux_fsinfo.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/linux_fsinfo.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LINUX_FSINFO_H
+ #define _LINUX_FSINFO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/Makefile.in uClibc-git/libpthread/nptl/Makefile.in
+--- uClibc-0.9.33.2/libpthread/nptl/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -145,7 +145,7 @@
+ endif
+
+ LDFLAGS-libpthread.so += $(top_builddir)lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so $(top_builddir)lib/libdl-$(VERSION).so \
+- -Wl,-z,nodelete,-z,initfirst,-init=__pthread_initialize_minimal_internal
++ -Wl,-z,nodelete,-z,initfirst,-init=$(SYMBOL_PREFIX)__pthread_initialize_minimal_internal
+
+ LIBS-libpthread.so := $(LIBS)
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pt-cleanup.c uClibc-git/libpthread/nptl/pt-cleanup.c
+--- uClibc-0.9.33.2/libpthread/nptl/pt-cleanup.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pt-cleanup.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdlib.h>
+@@ -23,7 +22,7 @@
+ #include <jmpbuf-unwind.h>
+
+ void
+-attribute_protected
++/*does not apply due to hidden_proto(): attribute_protected*/
+ __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
+ {
+ struct pthread *self = THREAD_SELF;
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_atfork.c uClibc-git/libpthread/nptl/pthread_atfork.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_atfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_atfork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -30,9 +30,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <fork.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_destroy.c uClibc-git/libpthread/nptl/pthread_attr_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getdetachstate.c uClibc-git/libpthread/nptl/pthread_attr_getdetachstate.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getdetachstate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getdetachstate.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getguardsize.c uClibc-git/libpthread/nptl/pthread_attr_getguardsize.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getguardsize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getguardsize.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getinheritsched.c uClibc-git/libpthread/nptl/pthread_attr_getinheritsched.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getinheritsched.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getinheritsched.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getschedparam.c uClibc-git/libpthread/nptl/pthread_attr_getschedparam.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getschedparam.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getschedparam.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getschedpolicy.c uClibc-git/libpthread/nptl/pthread_attr_getschedpolicy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getschedpolicy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getschedpolicy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getscope.c uClibc-git/libpthread/nptl/pthread_attr_getscope.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getscope.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getscope.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getstackaddr.c uClibc-git/libpthread/nptl/pthread_attr_getstackaddr.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getstackaddr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getstackaddr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getstack.c uClibc-git/libpthread/nptl/pthread_attr_getstack.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getstack.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getstack.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getstacksize.c uClibc-git/libpthread/nptl/pthread_attr_getstacksize.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_getstacksize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_getstacksize.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_init.c uClibc-git/libpthread/nptl/pthread_attr_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setdetachstate.c uClibc-git/libpthread/nptl/pthread_attr_setdetachstate.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setdetachstate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setdetachstate.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setguardsize.c uClibc-git/libpthread/nptl/pthread_attr_setguardsize.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setguardsize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setguardsize.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setinheritsched.c uClibc-git/libpthread/nptl/pthread_attr_setinheritsched.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setinheritsched.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setinheritsched.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setschedparam.c uClibc-git/libpthread/nptl/pthread_attr_setschedparam.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setschedparam.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setschedparam.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setschedpolicy.c uClibc-git/libpthread/nptl/pthread_attr_setschedpolicy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setschedpolicy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setschedpolicy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setscope.c uClibc-git/libpthread/nptl/pthread_attr_setscope.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setscope.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setscope.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setstackaddr.c uClibc-git/libpthread/nptl/pthread_attr_setstackaddr.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setstackaddr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setstackaddr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setstack.c uClibc-git/libpthread/nptl/pthread_attr_setstack.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setstack.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setstack.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setstacksize.c uClibc-git/libpthread/nptl/pthread_attr_setstacksize.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_attr_setstacksize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_attr_setstacksize.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_destroy.c uClibc-git/libpthread/nptl/pthread_barrierattr_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_barrierattr_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_getpshared.c uClibc-git/libpthread/nptl/pthread_barrierattr_getpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_getpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_barrierattr_getpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_init.c uClibc-git/libpthread/nptl/pthread_barrierattr_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_barrierattr_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_setpshared.c uClibc-git/libpthread/nptl/pthread_barrierattr_setpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_barrierattr_setpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_barrierattr_setpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_cancel.c uClibc-git/libpthread/nptl/pthread_cancel.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_cancel.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_cancel.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_clock_gettime.c uClibc-git/libpthread/nptl/pthread_clock_gettime.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_clock_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_clock_gettime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,14 +12,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <time.h>
+-#include <libc-internal.h>
+ #include "pthreadP.h"
+
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_clock_settime.c uClibc-git/libpthread/nptl/pthread_clock_settime.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_clock_settime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_clock_settime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,14 +12,12 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <time.h>
+-#include <libc-internal.h>
+ #include "pthreadP.h"
+
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_destroy.c uClibc-git/libpthread/nptl/pthread_condattr_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_condattr_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_getclock.c uClibc-git/libpthread/nptl/pthread_condattr_getclock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_getclock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_condattr_getclock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_getpshared.c uClibc-git/libpthread/nptl/pthread_condattr_getpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_getpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_condattr_getpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_init.c uClibc-git/libpthread/nptl/pthread_condattr_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_condattr_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_setclock.c uClibc-git/libpthread/nptl/pthread_condattr_setclock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_setclock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_condattr_setclock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_setpshared.c uClibc-git/libpthread/nptl/pthread_condattr_setpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_condattr_setpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_condattr_setpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_cond_destroy.c uClibc-git/libpthread/nptl/pthread_cond_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_cond_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_cond_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_cond_init.c uClibc-git/libpthread/nptl/pthread_cond_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_cond_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_cond_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_create.c uClibc-git/libpthread/nptl/pthread_create.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_create.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_create.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdbool.h>
+@@ -25,7 +24,6 @@
+ #include <hp-timing.h>
+ #include <ldsodefs.h>
+ #include <atomic.h>
+-#include <libc-internal.h>
+ #include <resolv.h>
+ #include <bits/kernel-features.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_detach.c uClibc-git/libpthread/nptl/pthread_detach.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_detach.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_detach.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_equal.c uClibc-git/libpthread/nptl/pthread_equal.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_equal.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_equal.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_exit.c uClibc-git/libpthread/nptl/pthread_exit.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_exit.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_exit.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include "pthreadP.h"
+
+
+ void
+-attribute_protected
++attribute_protected attribute_noreturn
+ __pthread_exit (void* value)
+ {
+ THREAD_SETMEM (THREAD_SELF, result, value);
+@@ -30,3 +29,9 @@
+ __do_cancel ();
+ }
+ strong_alias (__pthread_exit, pthread_exit)
++
++/*
++ * After a thread terminates, __uClibc_main decrements __nptl_nthreads
++ * defined in pthread_create.c.
++ */
++PTHREAD_STATIC_FN_REQUIRE (pthread_create)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_getattr_np.c uClibc-git/libpthread/nptl/pthread_getattr_np.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_getattr_np.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_getattr_np.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_getconcurrency.c uClibc-git/libpthread/nptl/pthread_getconcurrency.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_getconcurrency.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_getconcurrency.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_getschedparam.c uClibc-git/libpthread/nptl/pthread_getschedparam.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_getschedparam.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_getschedparam.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_getspecific.c uClibc-git/libpthread/nptl/pthread_getspecific.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_getspecific.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_getspecific.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include "pthreadP.h"
+
+
+-void *
+ attribute_protected
++void *
+ __pthread_getspecific (pthread_key_t key)
+ {
+ struct pthread_key_data *data;
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_join.c uClibc-git/libpthread/nptl/pthread_join.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_join.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_join.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_key_create.c uClibc-git/libpthread/nptl/pthread_key_create.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_key_create.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_key_create.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_key_delete.c uClibc-git/libpthread/nptl/pthread_key_delete.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_key_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_key_delete.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_kill_other_threads.c uClibc-git/libpthread/nptl/pthread_kill_other_threads.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_kill_other_threads.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_kill_other_threads.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,11 +13,10 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+-#ifdef SHARED
++#if 0 /*def SHARED*/
+ /* This function does not serve a useful purpose in the thread library
+ implementation anymore. It used to be necessary when then kernel
+ could not shut down "processes" but this is not the case anymore.
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_destroy.c uClibc-git/libpthread/nptl/pthread_mutexattr_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getprioceiling.c uClibc-git/libpthread/nptl/pthread_mutexattr_getprioceiling.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getprioceiling.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_getprioceiling.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getprotocol.c uClibc-git/libpthread/nptl/pthread_mutexattr_getprotocol.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getprotocol.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_getprotocol.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getpshared.c uClibc-git/libpthread/nptl/pthread_mutexattr_getpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_getpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getrobust.c uClibc-git/libpthread/nptl/pthread_mutexattr_getrobust.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_getrobust.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_getrobust.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_gettype.c uClibc-git/libpthread/nptl/pthread_mutexattr_gettype.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_gettype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_gettype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_init.c uClibc-git/libpthread/nptl/pthread_mutexattr_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <string.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setprioceiling.c uClibc-git/libpthread/nptl/pthread_mutexattr_setprioceiling.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setprioceiling.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_setprioceiling.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setprotocol.c uClibc-git/libpthread/nptl/pthread_mutexattr_setprotocol.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setprotocol.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_setprotocol.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setpshared.c uClibc-git/libpthread/nptl/pthread_mutexattr_setpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_setpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setrobust.c uClibc-git/libpthread/nptl/pthread_mutexattr_setrobust.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_setrobust.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_setrobust.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_settype.c uClibc-git/libpthread/nptl/pthread_mutexattr_settype.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutexattr_settype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutexattr_settype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_consistent.c uClibc-git/libpthread/nptl/pthread_mutex_consistent.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_consistent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_consistent.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_destroy.c uClibc-git/libpthread/nptl/pthread_mutex_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_getprioceiling.c uClibc-git/libpthread/nptl/pthread_mutex_getprioceiling.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_getprioceiling.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_getprioceiling.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_init.c uClibc-git/libpthread/nptl/pthread_mutex_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_lock.c uClibc-git/libpthread/nptl/pthread_mutex_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_setprioceiling.c uClibc-git/libpthread/nptl/pthread_mutex_setprioceiling.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_setprioceiling.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_setprioceiling.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdbool.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_timedlock.c uClibc-git/libpthread/nptl/pthread_mutex_timedlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_timedlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_timedlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_trylock.c uClibc-git/libpthread/nptl/pthread_mutex_trylock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_trylock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_trylock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_unlock.c uClibc-git/libpthread/nptl/pthread_mutex_unlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_mutex_unlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_mutex_unlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthreadP.h uClibc-git/libpthread/nptl/pthreadP.h
+--- uClibc-0.9.33.2/libpthread/nptl/pthreadP.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthreadP.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTHREADP_H
+ #define _PTHREADP_H 1
+@@ -221,7 +220,7 @@
+ /* Cancellation test. */
+ #define CANCELLATION_P(self) \
+ do { \
+- int cancelhandling = THREAD_GETMEM (self, cancelhandling); \
++ cancelhandling = THREAD_GETMEM (self, cancelhandling); \
+ if (CANCEL_ENABLED_AND_CANCELED (cancelhandling)) \
+ { \
+ THREAD_SETMEM (self, result, PTHREAD_CANCELED); \
+@@ -411,9 +410,9 @@
+ const struct sched_param *param);
+ extern int __pthread_setcancelstate (int state, int *oldstate);
+ extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutexattr);
++ const pthread_mutexattr_t *__mutexattr);
+ extern int __pthread_mutex_init_internal (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutexattr)
++ const pthread_mutexattr_t *__mutexattr)
+ attribute_hidden;
+ extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+ extern int __pthread_mutex_destroy_internal (pthread_mutex_t *__mutex)
+@@ -452,22 +451,22 @@
+ extern int __pthread_attr_setschedpolicy (pthread_attr_t *attr, int policy);
+ extern int __pthread_attr_getscope (const pthread_attr_t *attr, int *scope);
+ extern int __pthread_attr_setscope (pthread_attr_t *attr, int scope);
+-extern int __pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
++extern int __pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+ __attr, void **__restrict __stackaddr);
+ extern int __pthread_attr_setstackaddr (pthread_attr_t *__attr,
+ void *__stackaddr);
+-extern int __pthread_attr_getstacksize (__const pthread_attr_t *__restrict
++extern int __pthread_attr_getstacksize (const pthread_attr_t *__restrict
+ __attr,
+ size_t *__restrict __stacksize);
+ extern int __pthread_attr_setstacksize (pthread_attr_t *__attr,
+ size_t __stacksize);
+-extern int __pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
++extern int __pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+ void **__restrict __stackaddr,
+ size_t *__restrict __stacksize);
+ extern int __pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
+ size_t __stacksize);
+ extern int __pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+- __const pthread_rwlockattr_t *__restrict
++ const pthread_rwlockattr_t *__restrict
+ __attr);
+ extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
+ extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_destroy.c uClibc-git/libpthread/nptl/pthread_rwlockattr_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlockattr_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_getkind_np.c uClibc-git/libpthread/nptl/pthread_rwlockattr_getkind_np.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_getkind_np.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlockattr_getkind_np.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_getpshared.c uClibc-git/libpthread/nptl/pthread_rwlockattr_getpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_getpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlockattr_getpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_init.c uClibc-git/libpthread/nptl/pthread_rwlockattr_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlockattr_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_setkind_np.c uClibc-git/libpthread/nptl/pthread_rwlockattr_setkind_np.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_setkind_np.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlockattr_setkind_np.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_setpshared.c uClibc-git/libpthread/nptl/pthread_rwlockattr_setpshared.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlockattr_setpshared.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlockattr_setpshared.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_destroy.c uClibc-git/libpthread/nptl/pthread_rwlock_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlock_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_init.c uClibc-git/libpthread/nptl/pthread_rwlock_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlock_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <bits/kernel-features.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_tryrdlock.c uClibc-git/libpthread/nptl/pthread_rwlock_tryrdlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_tryrdlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlock_tryrdlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_trywrlock.c uClibc-git/libpthread/nptl/pthread_rwlock_trywrlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_rwlock_trywrlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_rwlock_trywrlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_self.c uClibc-git/libpthread/nptl/pthread_self.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_self.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_self.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_setcancelstate.c uClibc-git/libpthread/nptl/pthread_setcancelstate.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_setcancelstate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_setcancelstate.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_setcanceltype.c uClibc-git/libpthread/nptl/pthread_setcanceltype.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_setcanceltype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_setcanceltype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_setconcurrency.c uClibc-git/libpthread/nptl/pthread_setconcurrency.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_setconcurrency.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_setconcurrency.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_setschedparam.c uClibc-git/libpthread/nptl/pthread_setschedparam.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_setschedparam.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_setschedparam.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sched.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_setschedprio.c uClibc-git/libpthread/nptl/pthread_setschedprio.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_setschedprio.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_setschedprio.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sched.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_setspecific.c uClibc-git/libpthread/nptl/pthread_setspecific.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_setspecific.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_setspecific.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_testcancel.c uClibc-git/libpthread/nptl/pthread_testcancel.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_testcancel.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_testcancel.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include "pthreadP.h"
+@@ -24,5 +23,6 @@
+ void
+ pthread_testcancel (void)
+ {
++ int cancelhandling;
+ CANCELLATION_P (THREAD_SELF);
+ }
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_timedjoin.c uClibc-git/libpthread/nptl/pthread_timedjoin.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_timedjoin.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_timedjoin.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pthread_tryjoin.c uClibc-git/libpthread/nptl/pthread_tryjoin.c
+--- uClibc-0.9.33.2/libpthread/nptl/pthread_tryjoin.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pthread_tryjoin.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/pt-system.c uClibc-git/libpthread/nptl/pt-system.c
+--- uClibc-0.9.33.2/libpthread/nptl/pt-system.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/pt-system.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/res.c uClibc-git/libpthread/nptl/res.c
+--- uClibc-0.9.33.2/libpthread/nptl/res.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/res.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/semaphore.h uClibc-git/libpthread/nptl/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ #define _SEMAPHORE_H 1
+@@ -40,13 +39,13 @@
+ extern int sem_destroy (sem_t *__sem) __THROW;
+
+ /* Open a named semaphore NAME with open flags OFLAG. */
+-extern sem_t *sem_open (__const char *__name, int __oflag, ...) __THROW;
++extern sem_t *sem_open (const char *__name, int __oflag, ...) __THROW;
+
+ /* Close descriptor for named semaphore SEM. */
+ extern int sem_close (sem_t *__sem) __THROW;
+
+ /* Remove named semaphore NAME. */
+-extern int sem_unlink (__const char *__name) __THROW;
++extern int sem_unlink (const char *__name) __THROW;
+
+ /* Wait for SEM being posted.
+
+@@ -60,7 +59,7 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int sem_timedwait (sem_t *__restrict __sem,
+- __const struct timespec *__restrict __abstime);
++ const struct timespec *__restrict __abstime);
+ #endif
+
+ /* Test whether SEM is posted. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/semaphoreP.h uClibc-git/libpthread/nptl/semaphoreP.h
+--- uClibc-0.9.33.2/libpthread/nptl/semaphoreP.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/semaphoreP.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <semaphore.h>
+ #include "pthreadP.h"
+@@ -56,14 +55,3 @@
+
+ /* Comparison function for search in tree with existing mappings. */
+ extern int __sem_search (const void *a, const void *b) attribute_hidden;
+-
+-
+-/* Prototypes of functions with multiple interfaces. */
+-extern int __new_sem_init (sem_t *sem, int pshared, unsigned int value);
+-extern int __old_sem_init (sem_t *sem, int pshared, unsigned int value);
+-extern int __new_sem_destroy (sem_t *sem);
+-extern int __new_sem_post (sem_t *sem);
+-extern int __new_sem_wait (sem_t *sem);
+-extern int __old_sem_wait (sem_t *sem);
+-extern int __new_sem_trywait (sem_t *sem);
+-extern int __new_sem_getvalue (sem_t *sem, int *sval);
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sem_close.c uClibc-git/libpthread/nptl/sem_close.c
+--- uClibc-0.9.33.2/libpthread/nptl/sem_close.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sem_close.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <search.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sem_destroy.c uClibc-git/libpthread/nptl/sem_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/sem_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sem_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <semaphore.h>
+ #include "semaphoreP.h"
+
+
+ int
+-__new_sem_destroy (
++sem_destroy (
+ sem_t *sem)
+ {
+ /* XXX Check for valid parameter. */
+@@ -30,4 +29,3 @@
+ /* Nothing to do. */
+ return 0;
+ }
+-weak_alias(__new_sem_destroy, sem_destroy)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sem_getvalue.c uClibc-git/libpthread/nptl/sem_getvalue.c
+--- uClibc-0.9.33.2/libpthread/nptl/sem_getvalue.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sem_getvalue.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <semaphore.h>
+ #include "semaphoreP.h"
+
+
+ int
+-__new_sem_getvalue (
++sem_getvalue (
+ sem_t *sem,
+ int *sval)
+ {
+@@ -34,4 +33,3 @@
+
+ return 0;
+ }
+-weak_alias(__new_sem_getvalue, sem_getvalue)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sem_init.c uClibc-git/libpthread/nptl/sem_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sem_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sem_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+@@ -25,7 +24,7 @@
+
+
+ int
+-__new_sem_init (
++sem_init (
+ sem_t *sem,
+ int pshared,
+ unsigned int value)
+@@ -53,4 +52,3 @@
+
+ return 0;
+ }
+-weak_alias(__new_sem_init, sem_init)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sem_open.c uClibc-git/libpthread/nptl/sem_open.c
+--- uClibc-0.9.33.2/libpthread/nptl/sem_open.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sem_open.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sem_unlink.c uClibc-git/libpthread/nptl/sem_unlink.c
+--- uClibc-0.9.33.2/libpthread/nptl/sem_unlink.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sem_unlink.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/alpha/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/elf/pt-initfini.c uClibc-git/libpthread/nptl/sysdeps/alpha/elf/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/elf/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/elf/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/alpha/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,6 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
+-
+-/* We use the normal lobngjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/libc-tls.c uClibc-git/libpthread/nptl/sysdeps/alpha/libc-tls.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/libc-tls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/libc-tls.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdeps/generic/libc-tls.c>
+ #include <dl-tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/Makefile uClibc-git/libpthread/nptl/sysdeps/alpha/Makefile
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ # Lesser General Public License for more details.
+ #
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+ ifeq ($(subdir),csu)
+ gen-as-const-headers += tcb-offsets.sym
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/alpha/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/pthread_spin_lock.S uClibc-git/libpthread/nptl/sysdeps/alpha/pthread_spin_lock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/pthread_spin_lock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/pthread_spin_lock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ .text
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/alpha/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/tls.h uClibc-git/libpthread/nptl/sysdeps/alpha/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/alpha/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/alpha/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/arm/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/arm/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -31,6 +30,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[__JMP_BUF_SP] - (_adj))
+-
+-/* We use the normal longjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/libc-tls.c uClibc-git/libpthread/nptl/sysdeps/arm/libc-tls.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/libc-tls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/libc-tls.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdeps/generic/libc-tls.c>
+ #include <dl-tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/arm/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/pthread_spin_lock.S uClibc-git/libpthread/nptl/sysdeps/arm/pthread_spin_lock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/pthread_spin_lock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/pthread_spin_lock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/arm/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _ERRNO_H 1
+ #include <bits/errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/tls.h uClibc-git/libpthread/nptl/sysdeps/arm/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/arm/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/arm/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/generic/dl-tls.c uClibc-git/libpthread/nptl/sysdeps/generic/dl-tls.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/generic/dl-tls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/generic/dl-tls.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #if defined SHARED || defined NOT_IN_libc
+ # error in buildsystem: This file is for libc.a
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/generic/libc-tls.c uClibc-git/libpthread/nptl/sysdeps/generic/libc-tls.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/generic/libc-tls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/generic/libc-tls.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <ldsodefs.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/generic/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/generic/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/generic/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/generic/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <atomic.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/i386/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i486/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/i386/i486/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i486/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/i486/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread-errnos.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i586/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/i386/i586/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i586/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/i586/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_spin_trylock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i686/Makefile uClibc-git/libpthread/nptl/sysdeps/i386/i686/Makefile
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i686/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/i686/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ # Lesser General Public License for more details.
+
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+ ifeq ($(subdir),nptl)
+ # It turns out that stack coloring is in general not good on P4s. Some
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i686/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/i386/i686/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i686/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/i686/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define HAVE_CMOV 1
+ #include "../i486/pthread_spin_trylock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i686/tls.h uClibc-git/libpthread/nptl/sysdeps/i386/i686/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/i686/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/i686/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/i386/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,7 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
+-
+-/* We use the normal lobngjmp for unwinding. */
+-extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/Makefile uClibc-git/libpthread/nptl/sysdeps/i386/Makefile
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ # Lesser General Public License for more details.
+
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+ ifeq ($(subdir),csu)
+ gen-as-const-headers += tcb-offsets.sym
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/i386/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthread_spin_init.c uClibc-git/libpthread/nptl/sysdeps/i386/pthread_spin_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthread_spin_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/pthread_spin_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Not needed. pthread_spin_init is an alias for pthread_spin_unlock. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthread_spin_lock.c uClibc-git/libpthread/nptl/sysdeps/i386/pthread_spin_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthread_spin_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/pthread_spin_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthread_spin_unlock.S uClibc-git/libpthread/nptl/sysdeps/i386/pthread_spin_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/pthread_spin_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/pthread_spin_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .globl pthread_spin_unlock
+ .type pthread_spin_unlock,@function
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/tls.h uClibc-git/libpthread/nptl/sysdeps/i386/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/i386/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/i386/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/Makefile.commonarch uClibc-git/libpthread/nptl/sysdeps/Makefile.commonarch
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/Makefile.commonarch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/Makefile.commonarch 2014-02-03 12:32:57.000000000 +0100
+@@ -47,9 +47,8 @@
+ $(libpthread_arch_OUT)/gen_tcb-offsets.s: $(libpthread_arch_OUT)/gen_tcb-offsets.c | headers
+ $(compile.c)
+ libpthread-generated-y += $(libpthread_arch_OUT)/gen_tcb-offsets.s
+-PTHREAD_TCB_OFFSET_MANGLE ?= -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*\$$/\#define \1 \2/p"
+ $(libpthread_arch_OUT)/tcb-offsets.h: $(libpthread_arch_OUT)/gen_tcb-offsets.s
+- $(do_sed) $(PTHREAD_TCB_OFFSET_MANGLE) $< > $@
++ $(do_sed) $(PTHREAD_GENERATE_MANGLE) $< > $@
+ @if test ! -s $@ ; then rm -f $@ ; false ; fi
+
+ pregen-headers-$(UCLIBC_HAS_THREADS_NATIVE) += $(libpthread_arch_OUT)/tcb-offsets.h
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/metag/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/dl-tls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Thread-local storage handling in the ELF dynamic linker. Meta version.
++ Copyright (C) 2002 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++
++/* Type used for the representation of TLS information in the GOT. */
++typedef struct
++{
++ unsigned long int ti_module;
++ unsigned long int ti_offset;
++} tls_index;
++
++
++extern void *__tls_get_addr (tls_index *ti);
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/metag/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,36 @@
++/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <setjmp.h>
++#include <stdint.h>
++#include <unwind.h>
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#undef _JMPBUF_UNWINDS
++#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
++ ((void *) (address) > (void *) demangle (jmpbuf[JB_SP]))
++
++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
++
++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
++ ((uintptr_t) (_address) - (_adj) > (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
++
++#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/libc-tls.c uClibc-git/libpthread/nptl/sysdeps/metag/libc-tls.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/libc-tls.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/libc-tls.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,33 @@
++/*
++ * Thread-local storage handling in statically linked binaries. Meta version.
++ * Copyright (C) 2009 Free Software Foundation, Inc.
++ *
++ * Based on GNU C Library (file: libc/sysdeps/sh/libc-tls.c)
++ *
++ * Copyright (C) 2010 STMicroelectronics Ltd.
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Author: Filippo Arcidiacono <filippo.arcidiacono@st.com>
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ *
++ */
++
++#include <sysdeps/generic/libc-tls.c>
++#include <dl-tls.h>
++
++#if defined (USE_TLS) && (USE_TLS)
++
++/* On Meta, linker optimizations are not required, so __tls_get_addr
++ can be called even in statically linked binaries. In this case module
++ must be always 1 and PT_TLS segment exist in the binary, otherwise it
++ would not link. */
++
++void *
++__tls_get_addr (tls_index *ti)
++{
++ dtv_t *dtv = THREAD_DTV ();
++ return (char *) dtv[1].pointer.val + ti->ti_offset;
++}
++
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/Makefile.arch uClibc-git/libpthread/nptl/sysdeps/metag/Makefile.arch
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/Makefile.arch 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/Makefile.arch 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,17 @@
++# Makefile for uClibc NPTL
++#
++# Copyright (C) 2005 Steven J. Hill <sjhill@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++CFLAGS-pthread_spin_init.c = -DNOT_IN_libc -DIS_IN_libpthread
++ASFLAGS-pthread_spin_lock.S = -DNOT_IN_libc -DIS_IN_libpthread
++ASFLAGS-pthread_spin_unlock.S = -DNOT_IN_libc -DIS_IN_libpthread
++ASFLAGS-pthread_spin_trylock.S = -DNOT_IN_libc -DIS_IN_libpthread
++
++ASFLAGS-pthread_spin_lock.c += -D_GNU_SOURCE
++
++CFLAGS-metag = $(SSP_ALL_CFLAGS)
++
++libc_arch_a_CSRC := libc-tls.c
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/metag_load_tp.S uClibc-git/libpthread/nptl/sysdeps/metag/metag_load_tp.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/metag_load_tp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/metag_load_tp.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <../../../../ldso/ldso/metag/metag_load_tp.S>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/metag/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthreaddef.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Copyright (C) 2003 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <sysdep.h>
++
++/* Default stack size. */
++#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
++
++/* Required stack pointer alignment at beginning. */
++#define STACK_ALIGN 8
++
++/* Minimal stack size after allocating thread descriptor and guard size. */
++#define MINIMAL_REST_STACK 2048
++
++/* Alignment requirement for TCB. */
++#define TCB_ALIGNMENT 8
++
++
++/* Location of current stack frame. */
++#define CURRENT_STACK_FRAME __builtin_frame_address (0)
++
++
++/* XXX Until we have a better place keep the definitions here. */
++#define __exit_thread_inline(val) \
++ INLINE_SYSCALL (exit, 1, (val))
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_init.c uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_init.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,20 @@
++/* Copyright (C) 2002 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* Not needed. pthread_spin_init is an alias for pthread_spin_unlock. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_lock.S uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_lock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_lock.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_lock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,20 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++ .text
++ .global _pthread_spin_lock
++ .type _pthread_spin_lock,function
++_pthread_spin_lock:
++1: LNKGETD D0Ar2, [D1Ar1]
++ CMP D0Ar2, #0
++ ADD D0Ar2, D0Ar2, #1
++ LNKSETDEQ [D1Ar1], D0Ar2
++ BNE 1b
++ DEFR D0Ar2, TXSTAT
++ ANDT D0Ar2, D0Ar2, #HI(0x3f000000)
++ CMPT D0Ar2, #HI(0x02000000)
++ BNZ 1b
++ MOV D0Re0, #0
++ MOV PC, D1RtP
++ .size _pthread_spin_lock,.-_pthread_spin_lock
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_trylock.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,24 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++#include <pthread-errnos.h>
++
++ .text
++ .global _pthread_spin_trylock
++ .type _pthread_spin_trylock,function
++_pthread_spin_trylock:
++1: MOVT D0Re0, #HI(#EBUSY)
++ ADD D0Re0, D0Re0, #LO(#EBUSY)
++ LNKGETD D0Ar2, [D1Ar1]
++ CMP D0Ar2, #0
++ ADD D0Ar2, D0Ar2, #1
++ LNKSETDEQ [D1Ar1], D0Ar2
++ BNE 2f
++ DEFR D0Ar2, TXSTAT
++ ANDT D0Ar2, D0Ar2, #HI(0x3f000000)
++ CMPT D0Ar2, #HI(0x02000000)
++ BNZ 1b
++ MOV D0Re0, #0
++2: MOV PC, D1RtP
++ .size _pthread_spin_trylock,.-_pthread_spin_trylock
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_unlock.S uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/pthread_spin_unlock.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/pthread_spin_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,16 @@
++! Copyright (C) 2013 Imagination Technologies Ltd.
++
++! Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++
++ .text
++ .global _pthread_spin_unlock
++ .type _pthread_spin_unlock,function
++_pthread_spin_unlock:
++ MOV D0Re0, #0
++ SETD [D1Ar1], D0Re0
++ MOV PC, D1RtP
++ .size _pthread_spin_unlock,.-_pthread_spin_unlock
++
++ /* The implementation of pthread_spin_init is identical. */
++ .global _pthread_spin_init
++_pthread_spin_init = _pthread_spin_unlock
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/tcb-offsets.sym uClibc-git/libpthread/nptl/sysdeps/metag/tcb-offsets.sym
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/tcb-offsets.sym 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/tcb-offsets.sym 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,15 @@
++#include <sysdep.h>
++#include <tls.h>
++
++RESULT offsetof (struct pthread, result)
++TID offsetof (struct pthread, tid)
++PID offsetof (struct pthread, pid)
++CANCELHANDLING offsetof (struct pthread, cancelhandling)
++CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf)
++MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads)
++TLS_PRE_TCB_SIZE sizeof (struct pthread)
++MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock)
++POINTER_GUARD offsetof (tcbhead_t, pointer_guard)
++#ifndef __ASSUME_PRIVATE_FUTEX
++PRIVATE_FUTEX offsetof (struct pthread, header.private_futex)
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/tls.h uClibc-git/libpthread/nptl/sysdeps/metag/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/metag/tls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/metag/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,163 @@
++/* Definition for thread-local data handling. NPTL/Meta version.
++ Copyright (C) 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _TLS_H
++#define _TLS_H
++
++#ifndef __ASSEMBLER__
++# include <stdbool.h>
++# include <stddef.h>
++# include <stdint.h>
++# include <stdlib.h>
++# include <list.h>
++# include <sysdep.h>
++# include <bits/kernel-features.h>
++
++/* Type for the dtv. */
++typedef union dtv
++{
++ size_t counter;
++ struct
++ {
++ void *val;
++ bool is_static;
++ } pointer;
++} dtv_t;
++
++typedef struct
++{
++ dtv_t *dtv;
++ uintptr_t pointer_guard;
++} tcbhead_t;
++
++# define TLS_MULTIPLE_THREADS_IN_TCB 1
++
++#else /* __ASSEMBLER__ */
++# include <tcb-offsets.h>
++#endif /* __ASSEMBLER__ */
++
++
++/* We require TLS support in the tools. */
++#define HAVE_TLS_SUPPORT
++#define HAVE___THREAD 1
++#define HAVE_TLS_MODEL_ATTRIBUTE 1
++/* Signal that TLS support is available. */
++# define USE_TLS 1
++
++#ifndef __ASSEMBLER__
++
++/* Get system call information. */
++# include <sysdep.h>
++
++/* This is the size of the initial TCB. */
++# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
++
++/* Alignment requirements for the initial TCB. */
++# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
++
++/* This is the size of the TCB. */
++# define TLS_TCB_SIZE sizeof (tcbhead_t)
++
++/* This is the size we need before TCB. */
++# define TLS_PRE_TCB_SIZE sizeof (struct pthread)
++
++/* Alignment requirements for the TCB. */
++# define TLS_TCB_ALIGN __alignof__ (struct pthread)
++
++/* The TLS blocks start right after the TCB. */
++# define TLS_DTV_AT_TP 1
++
++/* Get the thread descriptor definition. */
++# include <descr.h>
++
++/* Install the dtv pointer. The pointer passed is to the element with
++ index -1 which contain the length. */
++# define INSTALL_DTV(tcbp, dtvp) \
++ ((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1
++
++/* Install new dtv for current thread. */
++# define INSTALL_NEW_DTV(dtv) \
++ (((tcbhead_t *)__builtin_thread_pointer ())->dtv = (dtv))
++
++/* Return dtv of given thread descriptor. */
++# define GET_DTV(tcbp) \
++ (((tcbhead_t *) (tcbp))->dtv)
++
++/* Code to initially initialize the thread pointer. This might need
++ special attention since 'errno' is not yet available and if the
++ operation can cause a failure 'errno' must not be touched. */
++# define TLS_INIT_TP(tcbp, secondcall) \
++ ({ INTERNAL_SYSCALL_DECL (err); \
++ long result_var; \
++ result_var = INTERNAL_SYSCALL (metag_set_tls, err, 1, (tcbp)); \
++ INTERNAL_SYSCALL_ERROR_P (result_var, err) \
++ ? "unknown error" : NULL; })
++
++/* Return the address of the dtv for the current thread. */
++# define THREAD_DTV() \
++ (((tcbhead_t *)__builtin_thread_pointer ())->dtv)
++
++/* Return the thread descriptor for the current thread.
++ The contained asm must *not* be marked volatile since otherwise
++ assignments like
++ struct pthread *self = thread_self();
++ do not get optimized away. */
++# define THREAD_SELF \
++ ((struct pthread *)__builtin_thread_pointer () - 1)
++
++/* Magic for libthread_db to know how to do THREAD_SELF. */
++# define DB_THREAD_SELF \
++ CONST_THREAD_AREA (32, sizeof (struct pthread))
++
++/* Access to data in the thread descriptor is easy. */
++#define THREAD_GETMEM(descr, member) \
++ descr->member
++#define THREAD_GETMEM_NC(descr, member, idx) \
++ descr->member[idx]
++#define THREAD_SETMEM(descr, member, value) \
++ descr->member = (value)
++#define THREAD_SETMEM_NC(descr, member, idx, value) \
++ descr->member[idx] = (value)
++
++/* Get and set the global scope generation counter in struct pthread. */
++#define THREAD_GSCOPE_FLAG_UNUSED 0
++#define THREAD_GSCOPE_FLAG_USED 1
++#define THREAD_GSCOPE_FLAG_WAIT 2
++#define THREAD_GSCOPE_RESET_FLAG() \
++ do \
++ { int __res \
++ = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
++ THREAD_GSCOPE_FLAG_UNUSED); \
++ if (__res == THREAD_GSCOPE_FLAG_WAIT) \
++ lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
++ } \
++ while (0)
++#define THREAD_GSCOPE_SET_FLAG() \
++ do \
++ { \
++ THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \
++ atomic_write_barrier (); \
++ } \
++ while (0)
++#define THREAD_GSCOPE_WAIT() \
++ GL(dl_wait_lookup_done) ()
++
++#endif /* __ASSEMBLER__ */
++
++#endif /* tls.h */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/mips/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/mips/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -25,6 +24,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[0].__sp - (_adj))
+-
+-/* We use the normal longjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/libc-tls.c uClibc-git/libpthread/nptl/sysdeps/mips/libc-tls.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/libc-tls.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/libc-tls.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdeps/generic/libc-tls.c>
+ #include <dl-tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/mips/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/pthread_spin_lock.S uClibc-git/libpthread/nptl/sysdeps/mips/pthread_spin_lock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/pthread_spin_lock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/pthread_spin_lock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/asm.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/mips/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/asm.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/regdef.h uClibc-git/libpthread/nptl/sysdeps/mips/regdef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/regdef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/regdef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _REGDEF_H
+ #define _REGDEF_H
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/tls.h uClibc-git/libpthread/nptl/sysdeps/mips/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/mips/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/mips/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H 1
+@@ -121,7 +120,7 @@
+ operation can cause a failure 'errno' must not be touched. */
+ # define TLS_INIT_TP(tcbp, secondcall) \
+ ({ INTERNAL_SYSCALL_DECL (err); \
+- long result_var; \
++ long result_var attribute_unused; \
+ result_var = INTERNAL_SYSCALL (set_thread_area, err, 1, \
+ (char *) (tcbp) + TLS_TCB_OFFSET); \
+ INTERNAL_SYSCALL_ERROR_P (result_var, err) \
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/powerpc/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/powerpc/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the TOC. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/powerpc/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/powerpc/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,6 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_GPR1] - (_adj))
+-
+-/* We use the normal lobngjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/powerpc/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/powerpc/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/pthread_spin_lock.c uClibc-git/libpthread/nptl/sysdeps/powerpc/pthread_spin_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/pthread_spin_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/powerpc/pthread_spin_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/pthread_spin_trylock.c uClibc-git/libpthread/nptl/sysdeps/powerpc/pthread_spin_trylock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/pthread_spin_trylock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/powerpc/pthread_spin_trylock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/tls.h uClibc-git/libpthread/nptl/sysdeps/powerpc/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/powerpc/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/powerpc/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/allocalim.h uClibc-git/libpthread/nptl/sysdeps/pthread/allocalim.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/allocalim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/allocalim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <alloca.h>
+ #include <limits.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/bits/libc-lock.h uClibc-git/libpthread/nptl/sysdeps/pthread/bits/libc-lock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/bits/libc-lock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/bits/libc-lock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_LIBC_LOCK_H
+ #define _BITS_LIBC_LOCK_H 1
+@@ -475,7 +474,7 @@
+ library. */
+
+ extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutex_attr);
++ const pthread_mutexattr_t *__mutex_attr);
+
+ extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+
+@@ -494,7 +493,7 @@
+
+ #ifdef __USE_UNIX98
+ extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
+- __const pthread_rwlockattr_t *__attr);
++ const pthread_rwlockattr_t *__attr);
+
+ extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
+
+@@ -513,7 +512,7 @@
+ void (*__destr_function) (void *));
+
+ extern int __pthread_setspecific (pthread_key_t __key,
+- __const void *__pointer);
++ const void *__pointer);
+
+ extern void *__pthread_getspecific (pthread_key_t __key);
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/bits/libc-tsd.h uClibc-git/libpthread/nptl/sysdeps/pthread/bits/libc-tsd.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/bits/libc-tsd.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/bits/libc-tsd.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GENERIC_BITS_LIBC_TSD_H
+ #define _GENERIC_BITS_LIBC_TSD_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/bits/stdio-lock.h uClibc-git/libpthread/nptl/sysdeps/pthread/bits/stdio-lock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/bits/stdio-lock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/bits/stdio-lock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_STDIO_LOCK_H
+ #define _BITS_STDIO_LOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/createthread.c uClibc-git/libpthread/nptl/sysdeps/pthread/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <setjmp.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/librt-cancellation.c uClibc-git/libpthread/nptl/sysdeps/pthread/librt-cancellation.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/librt-cancellation.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/librt-cancellation.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/list.h uClibc-git/libpthread/nptl/sysdeps/pthread/list.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/list.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/list.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LIST_H
+ #define _LIST_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/Makefile.in uClibc-git/libpthread/nptl/sysdeps/pthread/Makefile.in
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -33,7 +33,6 @@
+ pthread_spin_init.c \
+ pthread_spin_unlock.c \
+ pt-longjmp.c \
+- pt-sigaction.c \
+ tpp.c
+ CFLAGS-pthread = $(SSP_ALL_CFLAGS) -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pthread_barrier_wait.c = -D_GNU_SOURCE
+@@ -49,8 +48,7 @@
+ CFLAGS-rt-unwind-resume.c = -DIS_IN_librt \
+ -fexceptions -fasynchronous-unwind-tables
+
+-libpthread-so-y += $(patsubst %,$(libpthread_pthread_OUT)/%.oS, \
+- unwind-forcedunwind)
++libpthread-so-y += $(patsubst %,$(libpthread_pthread_OUT)/%.oS, unwind-forcedunwind)
+
+ librt-pt-routines-y = librt-cancellation.c
+ librt-pt-shared-only-routines-y = rt-unwind-resume.c
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/malloc-machine.h uClibc-git/libpthread/nptl/sysdeps/pthread/malloc-machine.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/malloc-machine.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/malloc-machine.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _MALLOC_MACHINE_H
+ #define _MALLOC_MACHINE_H
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/posix-timer.h uClibc-git/libpthread/nptl/sysdeps/pthread/posix-timer.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/posix-timer.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/posix-timer.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_barrier_destroy.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_barrier_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_barrier_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_barrier_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_barrier_init.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_barrier_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_barrier_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_barrier_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_barrier_wait.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_barrier_wait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_barrier_wait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_barrier_wait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_broadcast.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_broadcast.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_broadcast.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_broadcast.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <endian.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_signal.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_signal.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_signal.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_signal.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <endian.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_timedwait.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_timedwait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_timedwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_timedwait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <endian.h>
+ #include <errno.h>
+@@ -100,8 +99,10 @@
+ {
+ #ifdef __NR_clock_gettime
+ INTERNAL_SYSCALL_DECL (err);
+- int ret;
+- ret = INTERNAL_SYSCALL (clock_gettime, err, 2,
++# ifndef __ASSUME_POSIX_TIMERS
++ int ret =
++# endif
++ INTERNAL_SYSCALL (clock_gettime, err, 2,
+ (cond->__data.__nwaiters
+ & ((1 << COND_NWAITERS_SHIFT) - 1)),
+ &rt);
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_wait.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_wait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_cond_wait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_cond_wait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <endian.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread-functions.h uClibc-git/libpthread/nptl/sysdeps/pthread/pthread-functions.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread-functions.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread-functions.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTHREAD_FUNCTIONS_H
+ #define _PTHREAD_FUNCTIONS_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread.h uClibc-git/libpthread/nptl/sysdeps/pthread/pthread.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _PTHREAD_H
+ #define _PTHREAD_H 1
+@@ -228,7 +227,7 @@
+ getting passed ARG. Creation attributed come from ATTR. The new
+ handle is stored in *NEWTHREAD. */
+ extern int pthread_create (pthread_t *__restrict __newthread,
+- __const pthread_attr_t *__restrict __attr,
++ const pthread_attr_t *__restrict __attr,
+ void *(*__start_routine) (void *),
+ void *__restrict __arg) __THROW __nonnull ((1, 3));
+
+@@ -258,7 +257,7 @@
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+ extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
+- __const struct timespec *__abstime);
++ const struct timespec *__abstime);
+ #endif
+
+ /* Indicate that the thread TH is never to be joined with PTHREAD_JOIN.
+@@ -287,7 +286,7 @@
+ __THROW __nonnull ((1));
+
+ /* Get detach state attribute. */
+-extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
++extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+ int *__detachstate)
+ __THROW __nonnull ((1, 2));
+
+@@ -298,7 +297,7 @@
+
+
+ /* Get the size of the guard area created for stack overflow protection. */
+-extern int pthread_attr_getguardsize (__const pthread_attr_t *__attr,
++extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
+ size_t *__guardsize)
+ __THROW __nonnull ((1, 2));
+
+@@ -309,18 +308,18 @@
+
+
+ /* Return in *PARAM the scheduling parameters of *ATTR. */
+-extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
++extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict
+ __attr,
+ struct sched_param *__restrict __param)
+ __THROW __nonnull ((1, 2));
+
+ /* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */
+ extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+- __const struct sched_param *__restrict
++ const struct sched_param *__restrict
+ __param) __THROW __nonnull ((1, 2));
+
+ /* Return in *POLICY the scheduling policy of *ATTR. */
+-extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
++extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
+ __attr, int *__restrict __policy)
+ __THROW __nonnull ((1, 2));
+
+@@ -329,7 +328,7 @@
+ __THROW __nonnull ((1));
+
+ /* Return in *INHERIT the scheduling inheritance mode of *ATTR. */
+-extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
++extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
+ __attr, int *__restrict __inherit)
+ __THROW __nonnull ((1, 2));
+
+@@ -340,7 +339,7 @@
+
+
+ /* Return in *SCOPE the scheduling contention scope of *ATTR. */
+-extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
++extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+ int *__restrict __scope)
+ __THROW __nonnull ((1, 2));
+
+@@ -349,7 +348,7 @@
+ __THROW __nonnull ((1));
+
+ /* Return the previously set address for the stack. */
+-extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
++extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+ __attr, void **__restrict __stackaddr)
+ __THROW __nonnull ((1, 2)) __attribute_deprecated__;
+
+@@ -362,7 +361,7 @@
+ __THROW __nonnull ((1)) __attribute_deprecated__;
+
+ /* Return the currently used minimal stack size. */
+-extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
++extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
+ __attr, size_t *__restrict __stacksize)
+ __THROW __nonnull ((1, 2));
+
+@@ -375,7 +374,7 @@
+
+ #ifdef __USE_XOPEN2K
+ /* Return the previously set address for the stack. */
+-extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
++extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+ void **__restrict __stackaddr,
+ size_t *__restrict __stacksize)
+ __THROW __nonnull ((1, 2, 3));
+@@ -392,12 +391,12 @@
+ the processors represented in CPUSET. */
+ extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
+ size_t __cpusetsize,
+- __const cpu_set_t *__cpuset)
++ const cpu_set_t *__cpuset)
+ __THROW __nonnull ((1, 3));
+
+ /* Get bit set in CPUSET representing the processors threads created with
+ ATTR can run on. */
+-extern int pthread_attr_getaffinity_np (__const pthread_attr_t *__attr,
++extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
+ size_t __cpusetsize,
+ cpu_set_t *__cpuset)
+ __THROW __nonnull ((1, 3));
+@@ -416,7 +415,7 @@
+ /* Set the scheduling parameters for TARGET_THREAD according to POLICY
+ and *PARAM. */
+ extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+- __const struct sched_param *__param)
++ const struct sched_param *__param)
+ __THROW __nonnull ((3));
+
+ /* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */
+@@ -449,7 +448,7 @@
+ /* Limit specified thread TH to run only on the processors represented
+ in CPUSET. */
+ extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
+- __const cpu_set_t *__cpuset)
++ const cpu_set_t *__cpuset)
+ __THROW __nonnull ((3));
+
+ /* Get bit set in CPUSET representing the processors TH can run on. */
+@@ -581,6 +580,7 @@
+ function the compiler is free to decide inlining the change when
+ needed or fall back on the copy which must exist somewhere
+ else. */
++void __pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame);
+ __extern_inline void
+ __pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame)
+ {
+@@ -724,7 +724,7 @@
+
+ /* Initialize a mutex. */
+ extern int pthread_mutex_init (pthread_mutex_t *__mutex,
+- __const pthread_mutexattr_t *__mutexattr)
++ const pthread_mutexattr_t *__mutexattr)
+ __THROW __nonnull ((1));
+
+ /* Destroy a mutex. */
+@@ -742,7 +742,7 @@
+ #ifdef __USE_XOPEN2K
+ /* Wait until lock becomes available, or specified time passes. */
+ extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW __nonnull ((1, 2));
+ #endif
+
+@@ -752,7 +752,7 @@
+
+
+ /* Get the priority ceiling of MUTEX. */
+-extern int pthread_mutex_getprioceiling (__const pthread_mutex_t *
++extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
+ __restrict __mutex,
+ int *__restrict __prioceiling)
+ __THROW __nonnull ((1, 2));
+@@ -788,7 +788,7 @@
+ __THROW __nonnull ((1));
+
+ /* Get the process-shared flag of the mutex attribute ATTR. */
+-extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
++extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
+ __restrict __attr,
+ int *__restrict __pshared)
+ __THROW __nonnull ((1, 2));
+@@ -800,7 +800,7 @@
+
+ #if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+ /* Return in *KIND the mutex kind attribute in *ATTR. */
+-extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict
++extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
+ __attr, int *__restrict __kind)
+ __THROW __nonnull ((1, 2));
+
+@@ -812,7 +812,7 @@
+ #endif
+
+ /* Return in *PROTOCOL the mutex protocol attribute in *ATTR. */
+-extern int pthread_mutexattr_getprotocol (__const pthread_mutexattr_t *
++extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
+ __restrict __attr,
+ int *__restrict __protocol)
+ __THROW __nonnull ((1, 2));
+@@ -824,7 +824,7 @@
+ __THROW __nonnull ((1));
+
+ /* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR. */
+-extern int pthread_mutexattr_getprioceiling (__const pthread_mutexattr_t *
++extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
+ __restrict __attr,
+ int *__restrict __prioceiling)
+ __THROW __nonnull ((1, 2));
+@@ -836,11 +836,11 @@
+
+ #ifdef __USE_XOPEN2K
+ /* Get the robustness flag of the mutex attribute ATTR. */
+-extern int pthread_mutexattr_getrobust (__const pthread_mutexattr_t *__attr,
++extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
+ int *__robustness)
+ __THROW __nonnull ((1, 2));
+ # ifdef __USE_GNU
+-extern int pthread_mutexattr_getrobust_np (__const pthread_mutexattr_t *__attr,
++extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
+ int *__robustness)
+ __THROW __nonnull ((1, 2));
+ # endif
+@@ -863,7 +863,7 @@
+ /* Initialize read-write lock RWLOCK using attributes ATTR, or use
+ the default values if later is NULL. */
+ extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+- __const pthread_rwlockattr_t *__restrict
++ const pthread_rwlockattr_t *__restrict
+ __attr) __THROW __nonnull ((1));
+
+ /* Destroy read-write lock RWLOCK. */
+@@ -881,7 +881,7 @@
+ # ifdef __USE_XOPEN2K
+ /* Try to acquire read lock for RWLOCK or return after specfied time. */
+ extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW __nonnull ((1, 2));
+ # endif
+
+@@ -896,7 +896,7 @@
+ # ifdef __USE_XOPEN2K
+ /* Try to acquire write lock for RWLOCK or return after specfied time. */
+ extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __THROW __nonnull ((1, 2));
+ # endif
+
+@@ -916,7 +916,7 @@
+ __THROW __nonnull ((1));
+
+ /* Return current setting of process-shared attribute of ATTR in PSHARED. */
+-extern int pthread_rwlockattr_getpshared (__const pthread_rwlockattr_t *
++extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
+ __restrict __attr,
+ int *__restrict __pshared)
+ __THROW __nonnull ((1, 2));
+@@ -927,7 +927,7 @@
+ __THROW __nonnull ((1));
+
+ /* Return current setting of reader/writer preference. */
+-extern int pthread_rwlockattr_getkind_np (__const pthread_rwlockattr_t *
++extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
+ __restrict __attr,
+ int *__restrict __pref)
+ __THROW __nonnull ((1, 2));
+@@ -943,7 +943,7 @@
+ /* Initialize condition variable COND using attributes ATTR, or use
+ the default values if later is NULL. */
+ extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+- __const pthread_condattr_t *__restrict
++ const pthread_condattr_t *__restrict
+ __cond_attr) __THROW __nonnull ((1));
+
+ /* Destroy condition variable COND. */
+@@ -976,7 +976,7 @@
+ __THROW. */
+ extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+ pthread_mutex_t *__restrict __mutex,
+- __const struct timespec *__restrict
++ const struct timespec *__restrict
+ __abstime) __nonnull ((1, 2, 3));
+
+ /* Functions for handling condition variable attributes. */
+@@ -990,7 +990,7 @@
+ __THROW __nonnull ((1));
+
+ /* Get the process-shared flag of the condition variable attribute ATTR. */
+-extern int pthread_condattr_getpshared (__const pthread_condattr_t *
++extern int pthread_condattr_getpshared (const pthread_condattr_t *
+ __restrict __attr,
+ int *__restrict __pshared)
+ __THROW __nonnull ((1, 2));
+@@ -1001,7 +1001,7 @@
+
+ #ifdef __USE_XOPEN2K
+ /* Get the clock selected for the conditon variable attribute ATTR. */
+-extern int pthread_condattr_getclock (__const pthread_condattr_t *
++extern int pthread_condattr_getclock (const pthread_condattr_t *
+ __restrict __attr,
+ __clockid_t *__restrict __clock_id)
+ __THROW __nonnull ((1, 2));
+@@ -1043,7 +1043,7 @@
+ /* Initialize BARRIER with the attributes in ATTR. The barrier is
+ opened when COUNT waiters arrived. */
+ extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+- __const pthread_barrierattr_t *__restrict
++ const pthread_barrierattr_t *__restrict
+ __attr, unsigned int __count)
+ __THROW __nonnull ((1));
+
+@@ -1065,7 +1065,7 @@
+ __THROW __nonnull ((1));
+
+ /* Get the process-shared flag of the barrier attribute ATTR. */
+-extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
++extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+ __restrict __attr,
+ int *__restrict __pshared)
+ __THROW __nonnull ((1, 2));
+@@ -1097,7 +1097,7 @@
+
+ /* Store POINTER in the thread-specific data slot identified by KEY. */
+ extern int pthread_setspecific (pthread_key_t __key,
+- __const void *__pointer) __THROW ;
++ const void *__pointer) __THROW ;
+
+
+ #ifdef __USE_XOPEN2K
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_once.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_rdlock.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_rdlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_rdlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_rdlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedrdlock.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedrdlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedrdlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedrdlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_unlock.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_unlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_unlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_unlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_sigmask.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_sigmask.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_sigmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_sigmask.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_spin_destroy.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_spin_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_spin_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_spin_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_spin_init.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_spin_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_spin_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_spin_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_spin_unlock.c uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_spin_unlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pthread_spin_unlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pthread_spin_unlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <atomic.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pt-initfini.c uClibc-git/libpthread/nptl/sysdeps/pthread/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pt-longjmp.c uClibc-git/libpthread/nptl/sysdeps/pthread/pt-longjmp.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pt-longjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pt-longjmp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,14 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdlib.h>
+ #include "pthreadP.h"
+
++extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
++
+ void
+ longjmp (jmp_buf env, int val)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pt-sigaction.c uClibc-git/libpthread/nptl/sysdeps/pthread/pt-sigaction.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/pt-sigaction.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/pt-sigaction.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/setxid.h uClibc-git/libpthread/nptl/sysdeps/pthread/setxid.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/setxid.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/setxid.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/sigfillset.c uClibc-git/libpthread/nptl/sysdeps/pthread/sigfillset.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/sigfillset.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/sigfillset.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,20 @@
++/* Copyright (C) 2003, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <pthreadP.h>
++
++#include <../../../../libc/signal/sigfillset.c>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/sigprocmask.c uClibc-git/libpthread/nptl/sysdeps/pthread/sigprocmask.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/sigprocmask.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/sigprocmask.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,21 @@
++/* Copyright (C) 1997,1998,1999,2000,2001,2003 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <pthreadP.h>
++#undef _LARGEFILE64_SOURCE
++
++#include <../../../../libc/sysdeps/linux/common/sigprocmask.c>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_create.c uClibc-git/libpthread/nptl/sysdeps/pthread/timer_create.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_create.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/timer_create.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_delete.c uClibc-git/libpthread/nptl/sysdeps/pthread/timer_delete.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/timer_delete.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_getoverr.c uClibc-git/libpthread/nptl/sysdeps/pthread/timer_getoverr.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_getoverr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/timer_getoverr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_gettime.c uClibc-git/libpthread/nptl/sysdeps/pthread/timer_gettime.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/timer_gettime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_routines.c uClibc-git/libpthread/nptl/sysdeps/pthread/timer_routines.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_routines.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/timer_routines.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_settime.c uClibc-git/libpthread/nptl/sysdeps/pthread/timer_settime.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/timer_settime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/timer_settime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/tpp.c uClibc-git/libpthread/nptl/sysdeps/pthread/tpp.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/tpp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/tpp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <atomic.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/unwind-forcedunwind.c uClibc-git/libpthread/nptl/sysdeps/pthread/unwind-forcedunwind.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/unwind-forcedunwind.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/unwind-forcedunwind.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <stdio.h>
+@@ -112,6 +111,11 @@
+ _Unwind_Reason_Code
+ __gcc_personality_v0 (int version, _Unwind_Action actions,
+ _Unwind_Exception_Class exception_class,
++ struct _Unwind_Exception *ue_header,
++ struct _Unwind_Context *context);
++_Unwind_Reason_Code
++__gcc_personality_v0 (int version, _Unwind_Action actions,
++ _Unwind_Exception_Class exception_class,
+ struct _Unwind_Exception *ue_header,
+ struct _Unwind_Context *context)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/unwind-resume.c uClibc-git/libpthread/nptl/sysdeps/pthread/unwind-resume.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/pthread/unwind-resume.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/pthread/unwind-resume.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <stdio.h>
+@@ -66,6 +65,11 @@
+ _Unwind_Reason_Code
+ __gcc_personality_v0 (int version, _Unwind_Action actions,
+ _Unwind_Exception_Class exception_class,
++ struct _Unwind_Exception *ue_header,
++ struct _Unwind_Context *context);
++_Unwind_Reason_Code
++__gcc_personality_v0 (int version, _Unwind_Action actions,
++ _Unwind_Exception_Class exception_class,
+ struct _Unwind_Exception *ue_header,
+ struct _Unwind_Context *context)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/sh/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,8 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(jmpbuf, address, adj) \
+ ((uintptr_t) (address) - (adj) < (uintptr_t) (jmpbuf)[0].__regs[7] - (adj))
+-
+-extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
+-
+-/* We use the normal lobngjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/sh/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_init.c uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Not needed. pthread_spin_init is an alias for pthread_spin_unlock. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_lock.c uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread-errnos.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_unlock.S uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/pthread_spin_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/pthread_spin_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .globl pthread_spin_unlock
+ .type pthread_spin_unlock,@function
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/tls.h uClibc-git/libpthread/nptl/sysdeps/sh/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sh/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sh/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/sparc/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,7 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
+-
+-/* We use the normal longjmp for unwinding. */
+-extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+ int
+ pthread_spin_lock (pthread_spinlock_t *lock)
+ {
+- __asm__ __volatile
++ __asm__ __volatile__
+ ("1: ldstub [%0], %%g2\n"
+ " orcc %%g2, 0x0, %%g0\n"
+ " bne,a 2f\n"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+ int
+ pthread_spin_lock (pthread_spinlock_t *lock)
+ {
+- __asm__ __volatile
++ __asm__ __volatile__
+ ("1: ldstub [%0], %%g2\n"
+ " brnz,pn %%g2, 2f\n"
+ " membar #StoreLoad | #StoreStore\n"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,6 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
+-
+-/* We use the normal lobngjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,16 +13,15 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+
+ int
+ pthread_spin_lock (pthread_spinlock_t *lock)
+ {
+- __asm__ __volatile
++ __asm__ __volatile__
+ ("1: ldstub [%0], %%g5\n"
+ " brnz,pn %%g5, 2f\n"
+ " membar #StoreLoad | #StoreStore\n"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+@@ -24,7 +23,7 @@
+ pthread_spin_trylock (pthread_spinlock_t *lock)
+ {
+ int res;
+- __asm__ __volatile
++ __asm__ __volatile__
+ ("ldstub [%1], %0\n"
+ "membar #StoreLoad | #StoreStore"
+ : "=r" (res)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <atomic.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/tls.h uClibc-git/libpthread/nptl/sysdeps/sparc/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/sparc/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/sparc/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Value passed to 'clone' for initialization of the thread register. */
+ #define TLS_VALUE (pd + 1)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Libr \ary; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Value passed to 'clone' for initialization of the thread register. */
+ #define TLS_VALUE (pd + 1)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/libc-lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/libc-lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/libc-lowlevellock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/libc-lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* No difference to lowlevellock.c, except we lose a couple of functions. */
+ #include "lowlevellock.c"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pthread_once.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tcb-offsets.h>
+
+@@ -35,4 +34,4 @@
+ cmp r0, #0; /* If we are the parent... */ \
+ strne r3, [r2, #PID_OFFSET] /* ... restore the saved PID. */
+
+-#INCLUDE <../../../../../../../LIBC/SYSDEPS/LINUX/ARM/VFORK.S>
++#include "../../../../../../../libc/sysdeps/linux/arm/vfork.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tcb-offsets.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_POSIX_OPT_H
+ #define _BITS_POSIX_OPT_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Value passed to 'clone' for initialization of the thread register. */
+ #define TLS_VALUE pd
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/exit-thread.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/exit-thread.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/exit-thread.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/exit-thread.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <stdlib.h>
+@@ -58,9 +57,15 @@
+ #endif
+ }
+
+-extern __typeof(fork) __libc_fork;
+ pid_t
+-__libc_fork (void)
++#if defined __arm__ && defined __thumb__ && __GNUC_PREREQ (4,6)
++/* GCC PR target/53735
++ * In thumb1 we run out of registers when compiling with Os so relax that
++ * to have more registers available for spilling by using O2 here.
++ */
++attribute_optimize("O2")
++#endif
++fork (void)
+ {
+ pid_t pid;
+ struct used_handler
+@@ -223,7 +228,4 @@
+
+ return pid;
+ }
+-weak_alias(__libc_fork,__fork)
+-libc_hidden_proto(fork)
+-weak_alias(__libc_fork,fork)
+-libc_hidden_weak(fork)
++libc_hidden_def(fork)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/fork.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/fork.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/fork.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/fork.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <lowlevellock.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,14 +13,17 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <tls.h>
+ #include <sysdep.h>
+
++#ifdef __NR_getxpid
++# undef __NR_getpid
++# define __NR_getpid __NR_getxpid
++#endif
+
+ #ifndef NOT_IN_libc
+ static inline __attribute__((always_inline)) pid_t really_getpid (pid_t oldval);
+@@ -46,8 +49,7 @@
+ }
+ #endif
+
+-extern __typeof(getpid) __getpid;
+-pid_t
++static pid_t
+ __getpid (void)
+ {
+ #ifdef NOT_IN_libc
+@@ -60,6 +62,8 @@
+ #endif
+ return result;
+ }
+-libc_hidden_proto(getpid)
+ weak_alias(__getpid, getpid)
+ libc_hidden_weak(getpid)
++#if !defined NOT_IN_libc && !defined __NR_getppid
++strong_alias(getpid,getppid)
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The "thread register" gets initialized from a segment descriptor.
+ Initialize such a descriptor first. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "lowlevellock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+@@ -25,10 +24,10 @@
+
+ .text
+
+- .globl __new_sem_post
+- .type __new_sem_post,@function
++ .globl sem_post
++ .type sem_post,@function
+ .align 16
+-__new_sem_post:
++sem_post:
+ cfi_startproc
+ pushl %ebx
+ cfi_adjust_cfa_offset(4)
+@@ -126,9 +125,7 @@
+ cfi_restore(%ebx)
+ ret
+ cfi_endproc
+- .size __new_sem_post,.-__new_sem_post
+-weak_alias(__new_sem_post, sem_post)
+-
++ .size sem_post,.-sem_post
+
+ #ifdef __PIC__
+ .section .gnu.linkonce.t.__x86.get_pc_thunk.bx,"ax",@progbits
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+@@ -23,10 +22,10 @@
+
+ .text
+
+- .globl __new_sem_trywait
+- .type __new_sem_trywait,@function
++ .globl sem_trywait
++ .type sem_trywait,@function
+ .align 16
+-__new_sem_trywait:
++sem_trywait:
+ movl 4(%esp), %ecx
+
+ movl (%ecx), %eax
+@@ -63,9 +62,7 @@
+ #endif
+ orl $-1, %eax
+ ret
+- .size __new_sem_trywait,.-__new_sem_trywait
+-weak_alias(__new_sem_trywait, sem_trywait)
+-
++ .size sem_trywait,.-sem_trywait
+
+ #ifdef __PIC__
+ .section .gnu.linkonce.t.__x86.get_pc_thunk.cx,"ax",@progbits
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+@@ -29,10 +28,10 @@
+
+ .text
+
+- .globl __new_sem_wait
+- .type __new_sem_wait,@function
++ .globl sem_wait
++ .type sem_wait,@function
+ .align 16
+-__new_sem_wait:
++sem_wait:
+ .LSTARTCODE:
+ pushl %ebx
+ .Lpush_ebx:
+@@ -129,8 +128,7 @@
+ orl $-1, %eax
+
+ jmp 9b
+- .size __new_sem_wait,.-__new_sem_wait
+-weak_alias(__new_sem_wait, sem_wait)
++ .size sem_wait,.-sem_wait
+
+
+ .type sem_wait_cleanup,@function
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/lowlevellock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevelrobustlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevelrobustlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevelrobustlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/lowlevelrobustlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/lowlevelrobustlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_barrier_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_barrier_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_barrier_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_barrier_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_barrier_wait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_broadcast.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_broadcast.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_broadcast.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_broadcast.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_broadcast.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_signal.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_signal.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_signal.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_signal.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_signal.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_timedwait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_cond_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_wait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_rdlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_timedrdlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_timedwrlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_unlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_wrlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_post.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_post.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_post.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_post.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_post.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_timedwait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_trywait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_trywait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_trywait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_trywait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_trywait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_wait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/lowlevellock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevelrobustlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevelrobustlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevelrobustlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/lowlevelrobustlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/lowlevelrobustlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_barrier_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_barrier_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_barrier_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_barrier_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_barrier_wait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_broadcast.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_broadcast.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_broadcast.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_broadcast.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_broadcast.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_signal.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_signal.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_signal.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_signal.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_signal.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define HAVE_CMOV 1
+ #include "../i486/pthread_cond_timedwait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_cond_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_cond_wait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_rdlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_timedrdlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_timedwrlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define HAVE_CMOV 1
+ #include "../i486/pthread_rwlock_unlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/pthread_rwlock_wrlock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_post.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_post.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_post.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_post.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_post.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_timedwait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_trywait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_trywait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_trywait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_trywait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_trywait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "../i486/sem_wait.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unwindbuf.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/smp.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/smp.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/smp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/smp.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tcb-offsets.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/internaltypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/internaltypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/internaltypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/internaltypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _INTERNALTYPES_H
+ #define _INTERNALTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stddef.h>
+@@ -25,7 +24,6 @@
+ #pragma weak __pthread_cleanup_upto
+
+
+-void _longjmp_unwind (jmp_buf env, int val);
+ void
+ _longjmp_unwind (jmp_buf env, int val)
+ {
+@@ -38,3 +36,4 @@
+ __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME);
+ #endif
+ }
++libc_hidden_def(_longjmp_unwind)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* No difference to lowlevellock.c, except we lose a couple of functions. */
+ #include "lowlevellock.c"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <list.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch 2014-02-03 12:32:57.000000000 +0100
+@@ -62,22 +62,24 @@
+ pthread_getcpuclockid.c pthread_kill.c \
+ pthread_mutex_cond_lock.c pthread_yield.c \
+ sem_post.c sem_timedwait.c sem_trywait.c sem_wait.c \
+- pt-fork.c pt-sleep.c pthread_sigqueue.c pt-tempname.c \
+- sigtimedwait.c sigwaitinfo.c sigwait.c \
++ pt-tempname.c \
++ pthread_sigqueue.c \
+ lowlevellock.c lowlevelrobustlock.c
++# pt-sleep.c pt-fork.c sigtimedwait.c sigwaitinfo.c sigwait.c
+
+ libpthread_linux_SSRC := #ptw-close.S ptw-open.S ptw-waitid.S ptw-waidpid.S ptw-write.S
+
+ libc_linux_CSRC += libc_pthread_init.c libc_multiple_threads.c \
+ register-atfork.c unregister-atfork.c getpid.c \
+- raise.c sleep.c jmp-unwind.c libc-lowlevellock.c
++ raise.c jmp-unwind.c libc-lowlevellock.c
++ #sleep.c
+
+ librt_linux_CSRC += mq_notify.c timer_create.c timer_delete.c \
+ timer_getoverr.c timer_gettime.c timer_routines.c \
+ timer_settime.c
+
+ # These provide both a cancellable and a not cancellable implementation
+-libc_linux_SSRC = close.S open.S write.S read.S waitpid.S
++libc_linux_SSRC = #close.S open.S write.S read.S waitpid.S
+ libc_linux_SSRC := $(filter-out $(libc_linux_arch_SSRC-OMIT),$(libc_linux_SSRC))
+
+ libpthread_linux_CSRC := $(filter-out $(notdir $(libpthread_linux_arch_OBJS:.o=.c)),$(libpthread_linux_CSRC))
+@@ -141,13 +143,14 @@
+ CFLAGS-OMIT-getpid.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-OMIT-raise.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-OMIT-sleep.c = -DNOT_IN_libc -DIS_IN_libpthread
++CFLAGS-OMIT-jmp-unwind.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-OMIT-libc-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+
+-CFLAGS-OMIT-close.S = -DNOT_IN_libc -DIS_IN_libpthread
+-CFLAGS-OMIT-open.S = -DNOT_IN_libc -DIS_IN_libpthread
+-CFLAGS-OMIT-read.S = -DNOT_IN_libc -DIS_IN_libpthread
+-CFLAGS-OMIT-write.S = -DNOT_IN_libc -DIS_IN_libpthread
+-CFLAGS-OMIT-waitpid.S = -DNOT_IN_libc -DIS_IN_libpthread
++#CFLAGS-OMIT-close.S = -DNOT_IN_libc -DIS_IN_libpthread
++#CFLAGS-OMIT-open.S = -DNOT_IN_libc -DIS_IN_libpthread
++#CFLAGS-OMIT-read.S = -DNOT_IN_libc -DIS_IN_libpthread
++#CFLAGS-OMIT-write.S = -DNOT_IN_libc -DIS_IN_libpthread
++#CFLAGS-OMIT-waitpid.S = -DNOT_IN_libc -DIS_IN_libpthread
+
+ CFLAGS-OMIT-mq_notify.c = -DIS_IN_libpthread
+ CFLAGS-OMIT-timer_create.c = -DIS_IN_libpthread
+@@ -157,11 +160,11 @@
+ CFLAGS-OMIT-timer_routines.c = -DIS_IN_libpthread
+ CFLAGS-OMIT-timer_settime.c = -DIS_IN_libpthread
+
+-ASFLAGS-open.S = -D_LIBC_REENTRANT
+-ASFLAGS-close.S = -D_LIBC_REENTRANT
+-ASFLAGS-read.S = -D_LIBC_REENTRANT
+-ASFLAGS-write.S = -D_LIBC_REENTRANT
+-ASFLAGS-waitpid.S = -D_LIBC_REENTRANT
++#ASFLAGS-open.S = -D_LIBC_REENTRANT
++#ASFLAGS-close.S = -D_LIBC_REENTRANT
++#ASFLAGS-read.S = -D_LIBC_REENTRANT
++#ASFLAGS-write.S = -D_LIBC_REENTRANT
++#ASFLAGS-waitpid.S = -D_LIBC_REENTRANT
+
+ #
+ # Create header files.
+@@ -174,8 +177,6 @@
+ CFLAGS-gen_structsem.c = -S
+ CFLAGS-gen_unwindbuf.c = -S
+
+-PTHREAD_GENERATE_MANGLE ?= -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*\$$/\#define \1 \2/p"
+-
+ PTHREAD_LINUX_SYM := $(notdir $(wildcard $(libpthread_linux_DIR)/*.sym))
+ PTHREAD_LINUX_SYM_C := $(addprefix $(libpthread_linux_OUT)/gen_,$(PTHREAD_LINUX_SYM:.sym=.c))
+ PTHREAD_LINUX_SYM_S := $(PTHREAD_LINUX_SYM_C:.c=.s)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/pthreadtypes.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,181 @@
++/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _BITS_PTHREADTYPES_H
++#define _BITS_PTHREADTYPES_H 1
++
++#include <endian.h>
++
++#define __SIZEOF_PTHREAD_ATTR_T 36
++#define __SIZEOF_PTHREAD_MUTEX_T 24
++#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
++#define __SIZEOF_PTHREAD_COND_T 48
++#define __SIZEOF_PTHREAD_COND_COMPAT_T 12
++#define __SIZEOF_PTHREAD_CONDATTR_T 4
++#define __SIZEOF_PTHREAD_RWLOCK_T 32
++#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
++#define __SIZEOF_PTHREAD_BARRIER_T 20
++#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
++
++
++/* Thread identifiers. The structure of the attribute type is not
++ exposed on purpose. */
++typedef unsigned long int pthread_t;
++
++
++typedef union
++{
++ char __size[__SIZEOF_PTHREAD_ATTR_T];
++ long int __align;
++} pthread_attr_t;
++
++
++typedef struct __pthread_internal_slist
++{
++ struct __pthread_internal_slist *__next;
++} __pthread_slist_t;
++
++
++/* Data structures for mutex handling. The structure of the attribute
++ type is not exposed on purpose. */
++typedef union
++{
++ struct __pthread_mutex_s
++ {
++ int __lock;
++ unsigned int __count;
++ int __owner;
++ /* KIND must stay at this position in the structure to maintain
++ binary compatibility. */
++ int __kind;
++ unsigned int __nusers;
++ __extension__ union
++ {
++ int __spins;
++ __pthread_slist_t __list;
++ };
++ } __data;
++ char __size[__SIZEOF_PTHREAD_MUTEX_T];
++ long int __align;
++} pthread_mutex_t;
++
++typedef union
++{
++ char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
++ long int __align;
++} pthread_mutexattr_t;
++
++
++/* Data structure for conditional variable handling. The structure of
++ the attribute type is not exposed on purpose. */
++typedef union
++{
++ struct
++ {
++ int __lock;
++ unsigned int __futex;
++ __extension__ unsigned long long int __total_seq;
++ __extension__ unsigned long long int __wakeup_seq;
++ __extension__ unsigned long long int __woken_seq;
++ void *__mutex;
++ unsigned int __nwaiters;
++ unsigned int __broadcast_seq;
++ } __data;
++ char __size[__SIZEOF_PTHREAD_COND_T];
++ __extension__ long long int __align;
++} pthread_cond_t;
++
++typedef union
++{
++ char __size[__SIZEOF_PTHREAD_CONDATTR_T];
++ long int __align;
++} pthread_condattr_t;
++
++
++/* Keys for thread-specific data */
++typedef unsigned int pthread_key_t;
++
++
++/* Once-only execution */
++typedef int pthread_once_t;
++
++
++#if defined __USE_UNIX98 || defined __USE_XOPEN2K
++/* Data structure for read-write lock variable handling. The
++ structure of the attribute type is not exposed on purpose. */
++typedef union
++{
++ struct
++ {
++ int __lock;
++ unsigned int __nr_readers;
++ unsigned int __readers_wakeup;
++ unsigned int __writer_wakeup;
++ unsigned int __nr_readers_queued;
++ unsigned int __nr_writers_queued;
++#if __BYTE_ORDER == __BIG_ENDIAN
++ unsigned char __pad1;
++ unsigned char __pad2;
++ unsigned char __shared;
++ /* FLAGS must stay at this position in the structure to maintain
++ binary compatibility. */
++ unsigned char __flags;
++#else
++ /* FLAGS must stay at this position in the structure to maintain
++ binary compatibility. */
++ unsigned char __flags;
++ unsigned char __shared;
++ unsigned char __pad1;
++ unsigned char __pad2;
++#endif
++ int __writer;
++ } __data;
++ char __size[__SIZEOF_PTHREAD_RWLOCK_T];
++ long int __align;
++} pthread_rwlock_t;
++
++typedef union
++{
++ char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
++ long int __align;
++} pthread_rwlockattr_t;
++#endif
++
++
++#ifdef __USE_XOPEN2K
++/* POSIX spinlock data type. */
++typedef volatile int pthread_spinlock_t;
++
++
++/* POSIX barriers data type. The structure of the type is
++ deliberately not exposed. */
++typedef union
++{
++ char __size[__SIZEOF_PTHREAD_BARRIER_T];
++ long int __align;
++} pthread_barrier_t;
++
++typedef union
++{
++ char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
++ int __align;
++} pthread_barrierattr_t;
++#endif
++
++
++#endif /* bits/pthreadtypes.h */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/semaphore.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,35 @@
++/* Copyright (C) 2002, 2005, 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SEMAPHORE_H
++# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
++#endif
++
++
++#define __SIZEOF_SEM_T 16
++
++
++/* Value returned if `sem_open' failed. */
++#define SEM_FAILED ((sem_t *) 0)
++
++
++typedef union
++{
++ char __size[__SIZEOF_SEM_T];
++ long int __align;
++} sem_t;
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,9 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#define RESET_PID
++#include <tcb-offsets.h>
++#include "../../../../../../../libc/sysdeps/linux/metag/clone.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/createthread.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,23 @@
++/* Copyright (C) 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* Value passed to 'clone' for initialization of the thread register. */
++#define TLS_VALUE (pd + 1)
++
++/* Get the real implementation. */
++#include <sysdeps/pthread/createthread.c>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/fork.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Phil Blundell <pb@nexus.co.uk>, 2005
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <sched.h>
++#include <signal.h>
++#include <sysdep.h>
++#include <tls.h>
++
++
++#define ARCH_FORK() \
++ INLINE_SYSCALL (clone, 5, \
++ CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \
++ NULL, NULL, &THREAD_SELF->tid, NULL)
++
++#include "../fork.c"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/libc-lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/libc-lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/libc-lowlevellock.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/libc-lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,21 @@
++/* Copyright (C) 2003 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* No difference to lowlevellock.c, except we lose a couple of functions. */
++#include "lowlevellock.c"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,134 @@
++/* low level locking for pthread library. Generic futex-using version.
++ Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <errno.h>
++#include <sysdep.h>
++#include <lowlevellock.h>
++#include <sys/time.h>
++#include <tls.h>
++
++void
++__lll_lock_wait_private (int *futex)
++{
++ do
++ {
++ int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
++ if (oldval != 0)
++ lll_futex_wait (futex, 2, LLL_PRIVATE);
++ }
++ while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
++}
++
++
++/* These functions don't get included in libc.so */
++#ifdef IS_IN_libpthread
++void
++__lll_lock_wait (int *futex, int private)
++{
++ do
++ {
++ int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
++ if (oldval != 0)
++ lll_futex_wait (futex, 2, private);
++ }
++ while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
++}
++
++
++int
++__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private)
++{
++ struct timespec rt;
++
++ /* Reject invalid timeouts. */
++ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
++ return EINVAL;
++
++ /* Upgrade the lock. */
++ if (atomic_exchange_acq (futex, 2) == 0)
++ return 0;
++
++ do
++ {
++ struct timeval tv;
++
++ /* Get the current time. */
++ (void) gettimeofday (&tv, NULL);
++
++ /* Compute relative timeout. */
++ rt.tv_sec = abstime->tv_sec - tv.tv_sec;
++ rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
++ if (rt.tv_nsec < 0)
++ {
++ rt.tv_nsec += 1000000000;
++ --rt.tv_sec;
++ }
++
++ /* Already timed out? */
++ if (rt.tv_sec < 0)
++ return ETIMEDOUT;
++
++ // XYZ: Lost the lock to check whether it was private.
++ lll_futex_timed_wait (futex, 2, &rt, private);
++ }
++ while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
++
++ return 0;
++}
++
++
++int
++__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
++{
++ int tid;
++
++ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
++ return EINVAL;
++
++ /* Repeat until thread terminated. */
++ while ((tid = *tidp) != 0)
++ {
++ struct timeval tv;
++ struct timespec rt;
++
++ /* Get the current time. */
++ (void) gettimeofday (&tv, NULL);
++
++ /* Compute relative timeout. */
++ rt.tv_sec = abstime->tv_sec - tv.tv_sec;
++ rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
++ if (rt.tv_nsec < 0)
++ {
++ rt.tv_nsec += 1000000000;
++ --rt.tv_sec;
++ }
++
++ /* Already timed out? */
++ if (rt.tv_sec < 0)
++ return ETIMEDOUT;
++
++ /* Wait until thread terminates. */
++ // XYZ: Lost the lock to check whether it was private.
++ if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT)
++ return ETIMEDOUT;
++ }
++
++ return 0;
++}
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,279 @@
++/* Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _LOWLEVELLOCK_H
++#define _LOWLEVELLOCK_H 1
++
++#include <time.h>
++#include <sys/param.h>
++#include <bits/pthreadtypes.h>
++#include <atomic.h>
++#include <sysdep.h>
++#include <bits/kernel-features.h>
++
++#define FUTEX_WAIT 0
++#define FUTEX_WAKE 1
++#define FUTEX_REQUEUE 3
++#define FUTEX_CMP_REQUEUE 4
++#define FUTEX_WAKE_OP 5
++#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1)
++#define FUTEX_LOCK_PI 6
++#define FUTEX_UNLOCK_PI 7
++#define FUTEX_TRYLOCK_PI 8
++#define FUTEX_WAIT_BITSET 9
++#define FUTEX_WAKE_BITSET 10
++#define FUTEX_PRIVATE_FLAG 128
++#define FUTEX_CLOCK_REALTIME 256
++
++#define FUTEX_BITSET_MATCH_ANY 0xffffffff
++
++/* Values for 'private' parameter of locking macros. Yes, the
++ definition seems to be backwards. But it is not. The bit will be
++ reversed before passing to the system call. */
++#define LLL_PRIVATE 0
++#define LLL_SHARED FUTEX_PRIVATE_FLAG
++
++
++#if !defined NOT_IN_libc || defined IS_IN_rtld
++/* In libc.so or ld.so all futexes are private. */
++# ifdef __ASSUME_PRIVATE_FUTEX
++# define __lll_private_flag(fl, private) \
++ ((fl) | FUTEX_PRIVATE_FLAG)
++# else
++# define __lll_private_flag(fl, private) \
++ ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))
++# endif
++#else
++# ifdef __ASSUME_PRIVATE_FUTEX
++# define __lll_private_flag(fl, private) \
++ (((fl) | FUTEX_PRIVATE_FLAG) ^ (private))
++# else
++# define __lll_private_flag(fl, private) \
++ (__builtin_constant_p (private) \
++ ? ((private) == 0 \
++ ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \
++ : (fl)) \
++ : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \
++ & THREAD_GETMEM (THREAD_SELF, header.private_futex))))
++# endif
++#endif
++
++
++#define lll_futex_wait(futexp, val, private) \
++ lll_futex_timed_wait(futexp, val, NULL, private)
++
++#define lll_futex_timed_wait(futexp, val, timespec, private) \
++ ({ \
++ INTERNAL_SYSCALL_DECL (__err); \
++ long int __ret; \
++ __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \
++ __lll_private_flag (FUTEX_WAIT, private), \
++ (val), (timespec)); \
++ __ret; \
++ })
++
++#define lll_futex_wake(futexp, nr, private) \
++ ({ \
++ INTERNAL_SYSCALL_DECL (__err); \
++ long int __ret; \
++ __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \
++ __lll_private_flag (FUTEX_WAKE, private), \
++ (nr), 0); \
++ __ret; \
++ })
++
++#define lll_robust_dead(futexv, private) \
++ do \
++ { \
++ int *__futexp = &(futexv); \
++ atomic_or (__futexp, FUTEX_OWNER_DIED); \
++ lll_futex_wake (__futexp, 1, private); \
++ } \
++ while (0)
++
++/* Returns non-zero if error happened, zero if success. */
++#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \
++ ({ \
++ INTERNAL_SYSCALL_DECL (__err); \
++ long int __ret; \
++ __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
++ __lll_private_flag (FUTEX_CMP_REQUEUE, private),\
++ (nr_wake), (nr_move), (mutex), (val)); \
++ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \
++ })
++
++
++/* Returns non-zero if error happened, zero if success. */
++#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \
++ ({ \
++ INTERNAL_SYSCALL_DECL (__err); \
++ long int __ret; \
++ __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
++ __lll_private_flag (FUTEX_WAKE_OP, private), \
++ (nr_wake), (nr_wake2), (futexp2), \
++ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \
++ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \
++ })
++
++
++#define lll_trylock(lock) \
++ atomic_compare_and_exchange_val_acq(&(lock), 1, 0)
++
++#define lll_cond_trylock(lock) \
++ atomic_compare_and_exchange_val_acq(&(lock), 2, 0)
++
++#define __lll_robust_trylock(futex, id) \
++ (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0)
++#define lll_robust_trylock(lock, id) \
++ __lll_robust_trylock (&(lock), id)
++
++extern void __lll_lock_wait_private (int *futex) attribute_hidden;
++extern void __lll_lock_wait (int *futex, int private) attribute_hidden;
++extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden;
++
++#define __lll_lock(futex, private) \
++ ((void) ({ \
++ int *__futex = (futex); \
++ if (unlikely(atomic_compare_and_exchange_val_acq (__futex, 1, 0))) \
++ { \
++ if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \
++ __lll_lock_wait_private (__futex); \
++ else \
++ __lll_lock_wait (__futex, private); \
++ } \
++ }))
++#define lll_lock(futex, private) __lll_lock (&(futex), private)
++
++
++#define __lll_robust_lock(futex, id, private) \
++ ({ \
++ int *__futex = (futex); \
++ int __val = 0; \
++ \
++ if (unlikely(atomic_compare_and_exchange_bool_acq (__futex, id, 0))) \
++ __val = __lll_robust_lock_wait (__futex, private); \
++ __val; \
++ })
++#define lll_robust_lock(futex, id, private) \
++ __lll_robust_lock (&(futex), id, private)
++
++
++#define __lll_cond_lock(futex, private) \
++ ((void) ({ \
++ int *__futex = (futex); \
++ if (unlikely(atomic_exchange_acq (__futex, 2))) \
++ __lll_lock_wait (__futex, private); \
++ }))
++#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
++
++
++#define lll_robust_cond_lock(futex, id, private) \
++ __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private)
++
++
++extern int __lll_timedlock_wait (int *futex, const struct timespec *,
++ int private) attribute_hidden;
++extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *,
++ int private) attribute_hidden;
++
++#define __lll_timedlock(futex, abstime, private) \
++ ({ \
++ int *__futex = (futex); \
++ int __val = 0; \
++ \
++ if (unlikely(atomic_exchange_acq (__futex, 1))) \
++ __val = __lll_timedlock_wait (__futex, abstime, private); \
++ __val; \
++ })
++#define lll_timedlock(futex, abstime, private) \
++ __lll_timedlock (&(futex), abstime, private)
++
++
++#define __lll_robust_timedlock(futex, abstime, id, private) \
++ ({ \
++ int *__futex = (futex); \
++ int __val = 0; \
++ \
++ if (unlikely(atomic_compare_and_exchange_bool_acq (__futex, id, 0))) \
++ __val = __lll_robust_timedlock_wait (__futex, abstime, private); \
++ __val; \
++ })
++#define lll_robust_timedlock(futex, abstime, id, private) \
++ __lll_robust_timedlock (&(futex), abstime, id, private)
++
++
++#define __lll_unlock(futex, private) \
++ (void) \
++ ({ int *__futex = (futex); \
++ int __oldval = atomic_exchange_rel (__futex, 0); \
++ if (unlikely(__oldval > 1)) \
++ lll_futex_wake (__futex, 1, private); \
++ })
++#define lll_unlock(futex, private) __lll_unlock(&(futex), private)
++
++
++#define __lll_robust_unlock(futex, private) \
++ (void) \
++ ({ int *__futex = (futex); \
++ int __oldval = atomic_exchange_rel (__futex, 0); \
++ if (unlikely(__oldval & FUTEX_WAITERS)) \
++ lll_futex_wake (__futex, 1, private); \
++ })
++#define lll_robust_unlock(futex, private) \
++ __lll_robust_unlock(&(futex), private)
++
++
++#define lll_islocked(futex) \
++ (futex != 0)
++
++
++/* Our internal lock implementation is identical to the binary-compatible
++ mutex implementation. */
++
++/* Initializers for lock. */
++#define LLL_LOCK_INITIALIZER (0)
++#define LLL_LOCK_INITIALIZER_LOCKED (1)
++
++/* The states of a lock are:
++ 0 - untaken
++ 1 - taken by one user
++ >1 - taken by more users */
++
++/* The kernel notifies a process which uses CLONE_CLEARTID via futex
++ wakeup when the clone terminates. The memory location contains the
++ thread ID while the clone is running and is reset to zero
++ afterwards. */
++#define lll_wait_tid(tid) \
++ do { \
++ __typeof (tid) __tid; \
++ while ((__tid = (tid)) != 0) \
++ lll_futex_wait (&(tid), __tid, LLL_SHARED);\
++ } while (0)
++
++extern int __lll_timedwait_tid (int *, const struct timespec *)
++ attribute_hidden;
++
++#define lll_timedwait_tid(tid, abstime) \
++ ({ \
++ int __res = 0; \
++ if ((tid) != 0) \
++ __res = __lll_timedwait_tid (&(tid), (abstime)); \
++ __res; \
++ })
++
++#endif /* lowlevellock.h */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,13 @@
++# Makefile for uClibc NPTL
++#
++# Copyright (C) 2005 Steven J. Hill <sjhill@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++top_srcdir=../../../../../../../
++top_builddir=../../../../../../../
++all: objs
++include $(top_builddir)Rules.mak
++include Makefile.arch
++include $(top_srcdir)Makerules
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,31 @@
++# Makefile for uClibc NPTL
++#
++# Copyright (C) 2006 Steven J. Hill <sjhill@uclibc.org>
++#
++# Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++#
++
++libpthread_linux_arch_SSRC = pt-vfork.S
++libpthread_linux_arch_CSRC = pthread_once.c \
++ pt-__syscall_rt_sigaction.c pt-__syscall_error.c \
++ lowlevellock.c
++
++libc_linux_arch_CSRC = fork.c libc-lowlevellock.c
++libc_linux_arch_SSRC = clone.S vfork.S
++libc_linux_arch_SSRC-OMIT = waitpid.S
++
++CFLAGS += $(SSP_ALL_CFLAGS)
++
++CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
++CFLAGS-pt-__syscall_rt_sigaction.c = -DNOT_IN_libc -DIS_IN_libpthread
++CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
++CFLAGS-pt-__syscall_error.c = -DNOT_IN_libc -DIS_IN_libpthread
++ASFLAGS-vfork.S = -DIS_IN_libc -DNOT_IN_libpthread
++ASFLAGS-clone.S = -DIS_IN_libc -DNOT_IN_libpthread
++ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread
++
++ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y)
++CFLAGS-fork.c = -D__USE_STDIO_FUTEXES__
++endif
++CFLAGS-OMIT-fork.c = -DNOT_IN_libc -DIS_IN_libpthread
++CFLAGS-OMIT-libc-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-gettimeofday.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-gettimeofday.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-gettimeofday.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-gettimeofday.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <sys/syscall.h>
++#include <sys/time.h>
++
++int gettimeofday (struct timeval *, struct timezone *) attribute_hidden;
++_syscall2(int, gettimeofday, struct timeval *, tv, struct timezone *, tz);
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pthread_once.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,100 @@
++/* Copyright (C) 2004, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include "pthreadP.h"
++#include <lowlevellock.h>
++
++unsigned long int __fork_generation attribute_hidden;
++
++static void
++clear_once_control (void *arg)
++{
++ pthread_once_t *once_control = (pthread_once_t *) arg;
++
++ *once_control = 0;
++ lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
++}
++
++int
++attribute_protected
++__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
++{
++ for (;;)
++ {
++ int oldval;
++ int newval;
++
++ /* Pseudo code:
++ newval = __fork_generation | 1;
++ oldval = *once_control;
++ if ((oldval & 2) == 0)
++ *once_control = newval;
++ Do this atomically.
++ */
++ do
++ {
++ newval = __fork_generation | 1;
++ oldval = *once_control;
++ if (oldval & 2)
++ break;
++ } while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
++
++ /* Check if the initializer has already been done. */
++ if ((oldval & 2) != 0)
++ return 0;
++
++ /* Check if another thread already runs the initializer. */
++ if ((oldval & 1) == 0)
++ break;
++
++ /* Check whether the initializer execution was interrupted by a fork. */
++ if (oldval != newval)
++ break;
++
++ /* Same generation, some other thread was faster. Wait. */
++ lll_futex_wait (once_control, oldval, LLL_PRIVATE);
++ }
++
++ /* This thread is the first here. Do the initialization.
++ Register a cleanup handler so that in case the thread gets
++ interrupted the initialization can be restarted. */
++ pthread_cleanup_push (clear_once_control, once_control);
++
++ init_routine ();
++
++ pthread_cleanup_pop (0);
++
++ /* Say that the initialisation is done. */
++ *once_control = __fork_generation | 2;
++
++ /* Wake up all other threads. */
++ lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
++
++ return 0;
++}
++weak_alias (__pthread_once, pthread_once)
++strong_alias (__pthread_once, __pthread_once_internal)
++
++#if defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__PIC__)
++/* When statically linked, if pthread_create is used, this file
++ will be brought in. The exception handling code in GCC assumes
++ that if pthread_create is available, so are these. */
++const void *include_pthread_getspecific attribute_hidden = pthread_getspecific;
++const void *include_pthread_setspecific attribute_hidden = pthread_setspecific;
++const void *include_pthread_key_create attribute_hidden = pthread_key_create;
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_error.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_error.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_error.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_error.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <../../../../../../../libc/sysdeps/linux/metag/__syscall_error.c>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_rt_sigaction.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_rt_sigaction.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_rt_sigaction.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-__syscall_rt_sigaction.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,7 @@
++/*
++ * Copyright (C) 2013 Imagination Technologies Ltd.
++ *
++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
++ */
++
++#include <../../../../../../../libc/sysdeps/linux/common/__syscall_rt_sigaction.c>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,51 @@
++/* Copyright (C) 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <tcb-offsets.h>
++#include <asm/unistd.h>
++
++#ifdef __PIC__
++#define __VFORK_METAG_LOAD_TP ___metag_load_tp@PLT
++#else
++#define __VFORK_METAG_LOAD_TP ___metag_load_tp
++#endif
++
++/* Save the PID value. */
++#define SAVE_PID \
++ SETL [A0StP++], D0FrT, D1RtP; \
++ CALLR D1RtP, __VFORK_METAG_LOAD_TP; \
++ SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \
++ GETD D0FrT, [D0Re0 + #PID]; \
++ NEG D0FrT, D0FrT; \
++ SETD [D0Re0 + #PID], D0FrT; \
++ GETL D0FrT, D1RtP, [--A0StP];
++
++#define RESTORE_PID \
++ CMP D0Re0, #0; \
++ BEQ 1f; \
++ MSETL [A0StP++], D0Re0, D0FrT; \
++ CALLR D1RtP, __VFORK_METAG_LOAD_TP; \
++ SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \
++ GETD D0FrT, [D0Re0 + #PID]; \
++ NEG D0FrT, D0FrT; \
++ SETD [D0Re0 + #PID], D0FrT; \
++ GETL D0FrT, D1RtP, [--A0StP]; \
++ GETL D0Re0, D1Re0, [--A0StP]; \
++1:
++
++#include <../../../../../../../libc/sysdeps/linux/metag/vfork.S>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/sysdep-cancel.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,152 @@
++/* Copyright (C) 2003, 2004, 2005, 2009 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <tls.h>
++#include <sysdep.h>
++#ifndef __ASSEMBLER__
++# include <pthreadP.h>
++#endif
++
++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
++
++/* NOTE: We do mark syscalls with unwind annotations, for the benefit of
++ cancellation; but they're really only accurate at the point of the
++ syscall. The ARM unwind directives are not rich enough without adding
++ a custom personality function. */
++
++#ifdef __ASSEMBLER__
++#undef ret
++#define ret \
++ CMP D0Re0, #-4095; \
++ MOVLO PC, D1RtP; \
++ MOV D1Ar1, D0Re0; \
++ B SYSCALL_ERROR;
++#endif /* __ASSEMBLER__ */
++
++# undef PSEUDO
++# define PSEUDO(name, syscall_name, args) \
++ .section ".text"; \
++ .type ___##syscall_name##_nocancel,%function; \
++ .globl ___##syscall_name##_nocancel; \
++ ___##syscall_name##_nocancel: \
++ cfi_startproc; \
++ DO_CALL (syscall_name, args); \
++ MOV PC, D1RtP; \
++ cfi_endproc; \
++ .size ___##syscall_name##_nocancel,.-___##syscall_name##_nocancel; \
++ .globl _##name; \
++ .type _##name, @function; \
++name##: \
++_##name##: \
++ DOCARGS_##args; \
++ SINGLE_THREAD_P; \
++ UNDOCARGS_##args; \
++ BNE .Lpseudo_cancel; \
++ cfi_remember_state; \
++ DO_CALL (syscall_name, 0); \
++ ret \
++ cfi_restore_state; \
++ .Lpseudo_cancel: \
++ MSETL [A0StP++], D0FrT, D0.5; \
++ DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \
++ CENABLE; \
++ MOV D0FrT, D0Re0; /* put mask in safe place. */ \
++ UNDOCARGS_##args; /* restore syscall args. */ \
++ DO_CALL(syscall_name, 0); /* do the call. */ \
++ MOV D0.5, D0Re0; /* save syscall return value. */ \
++ MOV D1Ar1, D0FrT; /* get mask back. */ \
++ CDISABLE; \
++ MOV D0Re0, D0.5; /* retrieve return value. */ \
++ GETL D0.5, D1.5, [--A0StP]; \
++ GETL D0FrT, D1RtP, [--A0StP];
++
++# define DOCARGS_0
++# define UNDOCARGS_0
++
++# define DOCARGS_1 \
++ SETL [A0StP++], D1Ar1, D0Ar2
++# define UNDOCARGS_1 \
++ GETL D1Ar1, D0Ar2, [--A0StP]
++
++# define DOCARGS_2 DOCARGS_1
++
++# define UNDOCARGS_2 UNDOCARGS_2
++
++# define DOCARGS_3 \
++ MSETL [A0StP++], D1Ar1, D1Ar3
++
++# define UNDOCARGS_3 \
++ GETL D1Ar1, D0Ar2, [--A0StP]; \
++ GETL D1Ar3, D0Ar4, [--A0StP]
++
++# define DOCARGS_4 DOCARGS_3
++# define UNDOCARGS_4 UNDOCARGS_3
++
++# define DOCARGS_5 \
++ MSETL [A0StP++], D1Ar1, D1Ar3, D1Ar5
++# define UNDOCARGS_5 \
++ GETL D1Ar1, D0Ar2, [--A0StP]; \
++ GETL D1Ar3, D0Ar4, [--A0StP]; \
++ GETL D1Ar5, D0Ar6, [--A0StP]
++
++# define DOCARGS_6 DOCARGS_5
++# define UNDOCARGS_6 UNDOCARGS_5
++
++# ifdef IS_IN_libpthread
++# define CENABLE CALLR D1RtP, ___pthread_enable_asynccancel@PLT
++# define CDISABLE CALLR D1RtP, ___pthread_disable_asynccancel@PLT
++# define __local_multiple_threads __pthread_multiple_threads
++# elif !defined NOT_IN_libc
++# define CENABLE CALLR D1RtP, ___libc_enable_asynccancel@PLT
++# define CDISABLE CALLR D1RtP, ___libc_disable_asynccancel@PLT
++# define __local_multiple_threads __libc_multiple_threads
++# elif defined IS_IN_librt
++# define CENABLE CALLR D1RtP, ___librt_enable_asynccancel@PLT
++# define CDISABLE CALLR D1RtP, ___librt_disable_asynccancel@PLT
++# else
++# error Unsupported library
++# endif
++
++#ifndef __ASSEMBLER__
++# define SINGLE_THREAD_P \
++ likely(THREAD_GETMEM (THREAD_SELF, \
++ header.multiple_threads) == 0)
++#else
++# define SINGLE_THREAD_P \
++ SETL [A0StP++], D0FrT, D1RtP; \
++ CALLR D1RtP, ___metag_load_tp@PLT; \
++ SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \
++ GETD D0Re0, [D0Re0 + #MULTIPLE_THREADS_OFFSET]; \
++ CMP D0Re0, #0; \
++ GETL D0FrT, D1RtP, [--A0StP]
++#endif
++
++
++#elif !defined __ASSEMBLER__
++
++/* For rtld, et cetera. */
++# define SINGLE_THREAD_P 1
++# define NO_CANCELLATION 1
++
++#endif
++
++#ifndef __ASSEMBLER__
++# define RTLD_SINGLE_THREAD_P \
++ likely(THREAD_GETMEM (THREAD_SELF, \
++ header.multiple_threads) == 0)
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,56 @@
++/* Copyright (C) 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <tcb-offsets.h>
++#include <asm/unistd.h>
++
++#ifdef __PIC__
++#define __VFORK_METAG_LOAD_TP ___metag_load_tp@PLT
++#else
++#define __VFORK_METAG_LOAD_TP ___metag_load_tp
++#endif
++
++/* Save the PID value. */
++#define SAVE_PID \
++ SETL [A0StP++], D0FrT, D1RtP; \
++ CALLR D1RtP, __VFORK_METAG_LOAD_TP; \
++ SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \
++ GETD D0FrT, [D0Re0 + #PID]; \
++ NEGS D0FrT, D0FrT; \
++ BNZ 1f; \
++ MOVT D0FrT, #0x8000; \
++1: SETD [D0Re0 + #PID], D0FrT; \
++ GETL D0FrT, D1RtP, [--A0StP];
++
++#define RESTORE_PID \
++ CMP D0Re0, #0; \
++ BEQ 1f; \
++ MSETL [A0StP++], D0Re0, D0FrT; \
++ CALLR D1RtP, __VFORK_METAG_LOAD_TP; \
++ SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \
++ GETD D0FrT, [D0Re0 + #PID]; \
++ NEG D0FrT, D0FrT; \
++ MOVT D1Re0, #0x8000; \
++ CMP D0FrT, D1Re0; \
++ XOREQ D0FrT, D0FrT, D0FrT; \
++ SETD [D0Re0 + #PID], D0FrT; \
++ GETL D0FrT, D1RtP, [--A0StP]; \
++ GETL D0Re0, D1Re0, [--A0StP]; \
++1:
++
++#include <../../../../../../../libc/sysdeps/linux/metag/vfork.S>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Value passed to 'clone' for initialization of the thread register. */
+ #define TLS_VALUE ((void *) (pd) \
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pthread_once.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <features.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mq_notify.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mq_notify.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/mq_notify.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/mq_notify.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/not-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,18 +14,26 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <sysdep.h>
+
+ /* Uncancelable open. */
++#if defined __NR_openat && !defined __NR_open
++#define open_not_cancel(name, flags, mode) \
++ INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), \
++ (flags), (mode))
++#define open_not_cancel_2(name, flags) \
++ INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), \
++ (flags))
++#else
+ #define open_not_cancel(name, flags, mode) \
+ INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode))
+ #define open_not_cancel_2(name, flags) \
+ INLINE_SYSCALL (open, 2, (const char *) (name), (flags))
++#endif
+
+ /* Uncancelable openat. */
+ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Value passed to 'clone' for initialization of the thread register. */
+ #define TLS_VALUE ((void *) (pd) \
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+- 02110-1301 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+- 02110-1301 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -25,7 +24,7 @@
+ #include <semaphore.h>
+
+ int
+-__new_sem_post (sem_t *sem)
++sem_post (sem_t *sem)
+ {
+ struct new_sem *isem = (struct new_sem *) sem;
+
+@@ -44,4 +43,3 @@
+ }
+ return 0;
+ }
+-weak_alias(__new_sem_post, sem_post)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pt-fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,17 +13,16 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+
+-extern int __libc_fork (void);
+-
+-pid_t
++#if 0
++static pid_t
+ __fork (void)
+ {
+ return __libc_fork ();
+ }
+ strong_alias (__fork, fork)
++#endif
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_getaffinity.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_getaffinity.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_getaffinity.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_getaffinity.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_attr_setaffinity.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getaffinity.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getaffinity.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getaffinity.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getaffinity.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <limits.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <alloca.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_yield.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_yield.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_yield.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_yield.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <sched.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pt-raise.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pt-raise.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/pt-raise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/pt-raise.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <limits.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_post.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_post.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_post.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_post.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -26,7 +25,7 @@
+ #include <tls.h>
+
+ int
+-__new_sem_post (sem_t *sem)
++sem_post (sem_t *sem)
+ {
+ struct new_sem *isem = (struct new_sem *) sem;
+
+@@ -55,4 +54,3 @@
+ }
+ return 0;
+ }
+-weak_alias(__new_sem_post, sem_post)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_trywait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_trywait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_trywait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_trywait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -26,7 +25,7 @@
+
+
+ int
+-__new_sem_trywait (sem_t *sem)
++sem_trywait (sem_t *sem)
+ {
+ int *futex = (int *) sem;
+ int val;
+@@ -41,4 +40,3 @@
+ __set_errno (EAGAIN);
+ return -1;
+ }
+-weak_alias(__new_sem_trywait, sem_trywait)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_wait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_wait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sem_wait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sem_wait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -38,7 +37,7 @@
+
+
+ int
+-__new_sem_wait (sem_t *sem)
++sem_wait (sem_t *sem)
+ {
+ struct new_sem *isem = (struct new_sem *) sem;
+ int err;
+@@ -81,4 +80,3 @@
+
+ return err;
+ }
+-weak_alias(__new_sem_wait, sem_wait)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/createthread.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/createthread.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/createthread.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/createthread.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Value passed to 'clone' for initialization of the thread register. */
+ #define TLS_VALUE (pd + 1)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,8 +12,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "lowlevellock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifdef __ASSEMBLER__
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+@@ -396,9 +395,9 @@
+
+ #define lll_wait_tid(tid) \
+ do { \
+- __typeof (tid) *__tid = &(tid); \
+- while (*__tid != 0) \
+- lll_futex_wait (__tid, *__tid, LLL_SHARED); \
++ __typeof (tid) __tid; \
++ while ((__tid = (tid)) != 0) \
++ lll_futex_wait (&(tid), __tid, LLL_SHARED); \
+ } while (0)
+
+ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unwindbuf.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-initfini.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-initfini.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-initfini.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-initfini.c 2014-02-03 12:32:57.000000000 +0100
+@@ -23,8 +23,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+@@ -25,10 +24,10 @@
+
+ .text
+
+- .globl __new_sem_post
+- .type __new_sem_post,@function
++ .globl sem_post
++ .type sem_post,@function
+ .align 5
+-__new_sem_post:
++sem_post:
+ mov.l @(VALUE,r4), r2
+ 0:
+ mov.l .Lmax, r1
+@@ -106,5 +105,4 @@
+ .Lerrloc3:
+ .long __errno_location@PLT-(.Lerrloc3b-.)
+ #endif
+- .size __new_sem_post,.-__new_sem_post
+- weak_alias(__new_sem_post, sem_post)
++ .size sem_post,.-sem_post
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+@@ -24,10 +23,10 @@
+
+ .text
+
+- .globl __new_sem_trywait
+- .type __new_sem_trywait,@function
++ .globl sem_trywait
++ .type sem_trywait,@function
+ .align 5
+-__new_sem_trywait:
++sem_trywait:
+ mov.l r12, @-r15
+ mov.l r8, @-r15
+ sts.l pr, @-r15
+@@ -86,5 +85,4 @@
+ .Lerrloc1:
+ .long __errno_location@PLT-(.Lerrloc1b-.)
+ #endif
+- .size __new_sem_trywait,.-__new_sem_trywait
+- weak_alias(__new_sem_trywait, sem_trywait)
++ .size sem_trywait,.-sem_trywait
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+@@ -30,10 +29,10 @@
+
+ .text
+
+- .globl __new_sem_wait
+- .type __new_sem_wait,@function
++ .globl sem_wait
++ .type sem_wait,@function
+ .align 5
+-__new_sem_wait:
++sem_wait:
+ .LSTARTCODE:
+ mov.l r8, @-r15
+ .Lpush_r8:
+@@ -161,8 +160,7 @@
+ .long __pthread_enable_asynccancel-.Lenable0b
+ .Ldisable0:
+ .long __pthread_disable_asynccancel-.Ldisable0b
+- .size __new_sem_wait,.-__new_sem_wait
+- weak_alias(__new_sem_wait, sem_wait)
++ .size sem_wait,.-sem_wait
+
+
+ .type sem_wait_cleanup,@function
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/smp.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/smp.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/smp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/smp.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ static inline int
+ is_smp_system (void)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tls.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sigtimedwait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sigtimedwait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sigtimedwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sigtimedwait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+ #include <errno.h>
+@@ -67,7 +66,7 @@
+
+
+ /* Return any pending signal or wait for one for the given time. */
+-int attribute_hidden
++int
+ __sigtimedwait (const sigset_t *set, siginfo_t *info,
+ const struct timespec *timeout)
+ {
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sigwaitinfo.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sigwaitinfo.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sigwaitinfo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sigwaitinfo.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/smp.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/smp.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/smp.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/smp.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* Test whether the machine has more than one processor. This is not the
+ best test but good enough. More complicated tests would require `malloc'
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ see <http://www.gnu.org/licenses/>. */
+
+ /* The kernel header pollutes the namespace with the NR_OPEN symbol
+ and defines LINK_MAX although filesystems have different maxima. A
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/libc-lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/libc-lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/libc-lowlevellock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/libc-lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* No difference to lowlevellock.c, except we lose a couple of functions. */
+ #include "lowlevellock.c"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Libr \ary; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include "pthreadP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <string.h>
+@@ -26,7 +25,7 @@
+
+
+ int
+-__new_sem_init (sem, pshared, value)
++sem_init (sem, pshared, value)
+ sem_t *sem;
+ int pshared;
+ unsigned int value;
+@@ -53,5 +52,3 @@
+
+ return 0;
+ }
+-weak_alias(__new_sem_init, sem_init)
+-
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -25,7 +24,7 @@
+ #include <semaphore.h>
+
+ int
+-__new_sem_post (sem_t *sem)
++sem_post (sem_t *sem)
+ {
+ struct sparc_new_sem *isem = (struct sparc_new_sem *) sem;
+ int nr;
+@@ -51,5 +50,3 @@
+ }
+ return 0;
+ }
+-weak_alias(__new_sem_post, sem_post)
+-
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -26,7 +25,7 @@
+
+
+ int
+-__new_sem_trywait (sem_t *sem)
++sem_trywait (sem_t *sem)
+ {
+ struct sparc_old_sem *isem = (struct sparc_old_sem *) sem;
+ int val;
+@@ -50,5 +49,3 @@
+ __set_errno (EAGAIN);
+ return -1;
+ }
+-weak_alias(__new_sem_trywait, sem_trywait)
+-
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <sysdep.h>
+@@ -45,7 +44,7 @@
+
+
+ int
+-__new_sem_wait (sem_t *sem)
++sem_wait (sem_t *sem)
+ {
+ struct sparc_new_sem *isem = (struct sparc_new_sem *) sem;
+ int err;
+@@ -123,5 +122,3 @@
+
+ return err;
+ }
+-weak_alias(__new_sem_wait, sem_wait)
+-
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tls.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_create.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_create.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_create.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_create.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_delete.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_delete.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_delete.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_getoverr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <time.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_gettime.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_gettime.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_gettime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <setjmp.h>
+@@ -49,7 +48,7 @@
+ surprising for user code, although valid. We unblock all
+ signals. */
+ sigset_t ss;
+- sigemptyset (&ss);
++ __sigemptyset (&ss);
+ INTERNAL_SYSCALL_DECL (err);
+ INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8);
+
+@@ -69,13 +68,13 @@
+
+
+ /* Helper function to support starting threads for SIGEV_THREAD. */
+-static void *
++static attribute_noreturn void *
+ timer_helper_thread (void *arg)
+ {
+ /* Wait for the SIGTIMER signal, allowing the setXid signal, and
+ none else. */
+ sigset_t ss;
+- sigemptyset (&ss);
++ __sigemptyset (&ss);
+ __sigaddset (&ss, SIGTIMER);
+
+ /* Endless loop of waiting for signals. The loop is only ended when
+@@ -175,7 +174,7 @@
+ sigset_t ss;
+ sigset_t oss;
+ sigfillset (&ss);
+- /*__sigaddset (&ss, SIGCANCEL); - already done by sigfillset */
++ __sigaddset (&ss, SIGCANCEL);
+ INTERNAL_SYSCALL_DECL (err);
+ INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, &oss, _NSIG / 8);
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _BITS_PTHREADTYPES_H
+ #define _BITS_PTHREADTYPES_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _SEMAPHORE_H
+ # error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tcb-offsets.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/compat-timer.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/compat-timer.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/compat-timer.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/compat-timer.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <signal.h>
+ #include <time.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/fork.c uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/fork.c
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/fork.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/fork.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __pthread_enable_asynccancel __libc_enable_asynccancel
+ #define __pthread_disable_asynccancel __libc_disable_asynccancel
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,8 +13,7 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "lowlevellock.S"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define __pthread_enable_asynccancel __librt_enable_asynccancel
+ #define __pthread_disable_asynccancel __librt_disable_asynccancel
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <pthread-errnos.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <bits/kernel-features.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <tcb-offsets.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <bits/kernel-features.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* We want an #include_next, but we are the main source file.
+ So, #include ourselves and in that incarnation we can use #include_next. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/dl-tls.h uClibc-git/libpthread/nptl/sysdeps/x86_64/dl-tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/dl-tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/x86_64/dl-tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+
+ /* Type used for the representation of TLS information in the GOT. */
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/jmpbuf-unwind.h uClibc-git/libpthread/nptl/sysdeps/x86_64/jmpbuf-unwind.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/jmpbuf-unwind.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/x86_64/jmpbuf-unwind.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdint.h>
+@@ -26,6 +25,3 @@
+
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_RSP] - (_adj))
+-
+-/* We use the normal lobngjmp for unwinding. */
+-#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/pthreaddef.h uClibc-git/libpthread/nptl/sysdeps/x86_64/pthreaddef.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/pthreaddef.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/x86_64/pthreaddef.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Default stack size. */
+ #define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/pthread_spin_trylock.S uClibc-git/libpthread/nptl/sysdeps/x86_64/pthread_spin_trylock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/pthread_spin_trylock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/x86_64/pthread_spin_trylock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread-errnos.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/pthread_spin_unlock.S uClibc-git/libpthread/nptl/sysdeps/x86_64/pthread_spin_unlock.S
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/pthread_spin_unlock.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/x86_64/pthread_spin_unlock.S 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ .globl pthread_spin_unlock
+ .type pthread_spin_unlock,@function
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/tls.h uClibc-git/libpthread/nptl/sysdeps/x86_64/tls.h
+--- uClibc-0.9.33.2/libpthread/nptl/sysdeps/x86_64/tls.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/sysdeps/x86_64/tls.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _TLS_H
+ #define _TLS_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/unwind.c uClibc-git/libpthread/nptl/unwind.c
+--- uClibc-0.9.33.2/libpthread/nptl/unwind.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/unwind.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <stdlib.h>
+@@ -99,7 +98,7 @@
+ }
+
+
+-static void
++static attribute_noreturn void
+ unwind_cleanup (_Unwind_Reason_Code reason, struct _Unwind_Exception *exc)
+ {
+ /* When we get here a C++ catch block didn't rethrow the object. We
+@@ -115,7 +114,7 @@
+
+
+ void
+-attribute_protected
++/*does not apply due to hidden_proto(): attribute_protected*/
+ __cleanup_fct_attribute __attribute ((noreturn))
+ #if !defined SHARED && !defined IS_IN_libpthread
+ weak_function
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/vars.c uClibc-git/libpthread/nptl/vars.c
+--- uClibc-0.9.33.2/libpthread/nptl/vars.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/vars.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthreadP.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl/version.c uClibc-git/libpthread/nptl/version.c
+--- uClibc-0.9.33.2/libpthread/nptl/version.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl/version.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+ #include <sysdep.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/db_info.c uClibc-git/libpthread/nptl_db/db_info.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/db_info.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/db_info.c 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <tls.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/fetch-value.c uClibc-git/libpthread/nptl_db/fetch-value.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/fetch-value.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/fetch-value.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <byteswap.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/proc_service.h uClibc-git/libpthread/nptl_db/proc_service.h
+--- uClibc-0.9.33.2/libpthread/nptl_db/proc_service.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/proc_service.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* The definitions in this file must correspond to those in the debugger. */
+ #include <sys/procfs.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/structs.def uClibc-git/libpthread/nptl_db/structs.def
+--- uClibc-0.9.33.2/libpthread/nptl_db/structs.def 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/structs.def 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef DB_STRUCT_ARRAY_FIELD
+ # define DB_STRUCT_ARRAY_FIELD(type, field) DB_STRUCT_FIELD (type, field)
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_init.c uClibc-git/libpthread/nptl_db/td_init.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_init.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_log.c uClibc-git/libpthread/nptl_db/td_log.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_log.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_log.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_symbol_list.c uClibc-git/libpthread/nptl_db/td_symbol_list.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_symbol_list.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_symbol_list.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <assert.h>
+ #ifndef __UCLIBC__
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_clear_event.c uClibc-git/libpthread/nptl_db/td_ta_clear_event.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_clear_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_clear_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_delete.c uClibc-git/libpthread/nptl_db/td_ta_delete.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_delete.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_delete.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_enable_stats.c uClibc-git/libpthread/nptl_db/td_ta_enable_stats.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_enable_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_enable_stats.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_event_addr.c uClibc-git/libpthread/nptl_db/td_ta_event_addr.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_event_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_event_addr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_event_getmsg.c uClibc-git/libpthread/nptl_db/td_ta_event_getmsg.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_event_getmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_event_getmsg.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_get_nthreads.c uClibc-git/libpthread/nptl_db/td_ta_get_nthreads.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_get_nthreads.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_get_nthreads.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_get_ph.c uClibc-git/libpthread/nptl_db/td_ta_get_ph.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_get_ph.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_get_ph.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_get_stats.c uClibc-git/libpthread/nptl_db/td_ta_get_stats.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_get_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_get_stats.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_map_id2thr.c uClibc-git/libpthread/nptl_db/td_ta_map_id2thr.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_map_id2thr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_map_id2thr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_map_lwp2thr.c uClibc-git/libpthread/nptl_db/td_ta_map_lwp2thr.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_map_lwp2thr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_map_lwp2thr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_new.c uClibc-git/libpthread/nptl_db/td_ta_new.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_new.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_new.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_reset_stats.c uClibc-git/libpthread/nptl_db/td_ta_reset_stats.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_reset_stats.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_reset_stats.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_setconcurrency.c uClibc-git/libpthread/nptl_db/td_ta_setconcurrency.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_setconcurrency.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_setconcurrency.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_set_event.c uClibc-git/libpthread/nptl_db/td_ta_set_event.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_set_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_set_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_thr_iter.c uClibc-git/libpthread/nptl_db/td_ta_thr_iter.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_thr_iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_thr_iter.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_ta_tsd_iter.c uClibc-git/libpthread/nptl_db/td_ta_tsd_iter.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_ta_tsd_iter.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_ta_tsd_iter.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <alloca.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_clear_event.c uClibc-git/libpthread/nptl_db/td_thr_clear_event.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_clear_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_clear_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_dbresume.c uClibc-git/libpthread/nptl_db/td_thr_dbresume.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_dbresume.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_dbresume.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_dbsuspend.c uClibc-git/libpthread/nptl_db/td_thr_dbsuspend.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_dbsuspend.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_dbsuspend.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_event_enable.c uClibc-git/libpthread/nptl_db/td_thr_event_enable.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_event_enable.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_event_enable.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_event_getmsg.c uClibc-git/libpthread/nptl_db/td_thr_event_getmsg.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_event_getmsg.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_event_getmsg.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <assert.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getfpregs.c uClibc-git/libpthread/nptl_db/td_thr_getfpregs.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getfpregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_getfpregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getgregs.c uClibc-git/libpthread/nptl_db/td_thr_getgregs.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getgregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_getgregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_get_info.c uClibc-git/libpthread/nptl_db/td_thr_get_info.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_get_info.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_get_info.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getxregs.c uClibc-git/libpthread/nptl_db/td_thr_getxregs.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getxregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_getxregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getxregsize.c uClibc-git/libpthread/nptl_db/td_thr_getxregsize.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_getxregsize.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_getxregsize.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_set_event.c uClibc-git/libpthread/nptl_db/td_thr_set_event.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_set_event.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_set_event.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stddef.h>
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setfpregs.c uClibc-git/libpthread/nptl_db/td_thr_setfpregs.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setfpregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_setfpregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setgregs.c uClibc-git/libpthread/nptl_db/td_thr_setgregs.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setgregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_setgregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setprio.c uClibc-git/libpthread/nptl_db/td_thr_setprio.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setprio.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_setprio.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setsigpending.c uClibc-git/libpthread/nptl_db/td_thr_setsigpending.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setsigpending.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_setsigpending.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setxregs.c uClibc-git/libpthread/nptl_db/td_thr_setxregs.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_setxregs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_setxregs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_sigsetmask.c uClibc-git/libpthread/nptl_db/td_thr_sigsetmask.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_sigsetmask.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_sigsetmask.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_tlsbase.c uClibc-git/libpthread/nptl_db/td_thr_tlsbase.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_tlsbase.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_tlsbase.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_tls_get_addr.c uClibc-git/libpthread/nptl_db/td_thr_tls_get_addr.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_tls_get_addr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_tls_get_addr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <link.h>
+ #include "thread_dbP.h"
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_tsd.c uClibc-git/libpthread/nptl_db/td_thr_tsd.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_tsd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_tsd.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/td_thr_validate.c uClibc-git/libpthread/nptl_db/td_thr_validate.c
+--- uClibc-0.9.33.2/libpthread/nptl_db/td_thr_validate.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/td_thr_validate.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include "thread_dbP.h"
+ #include <stdbool.h>
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/thread_db.h uClibc-git/libpthread/nptl_db/thread_db.h
+--- uClibc-0.9.33.2/libpthread/nptl_db/thread_db.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/thread_db.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _THREAD_DB_H
+ #define _THREAD_DB_H 1
+diff -Nur uClibc-0.9.33.2/libpthread/nptl_db/thread_dbP.h uClibc-git/libpthread/nptl_db/thread_dbP.h
+--- uClibc-0.9.33.2/libpthread/nptl_db/thread_dbP.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libpthread/nptl_db/thread_dbP.h 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _THREAD_DBP_H
+ #define _THREAD_DBP_H 1
+diff -Nur uClibc-0.9.33.2/libresolv/resolv.c uClibc-git/libresolv/resolv.c
+--- uClibc-0.9.33.2/libresolv/resolv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libresolv/resolv.c 2014-02-03 12:32:57.000000000 +0100
+@@ -7,8 +7,6 @@
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+-#include <features.h>
+-
+ void __stub1(void);
+ void __stub1(void)
+ {
+diff -Nur uClibc-0.9.33.2/librt/clock_getcpuclockid.c uClibc-git/librt/clock_getcpuclockid.c
+--- uClibc-0.9.33.2/librt/clock_getcpuclockid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/clock_getcpuclockid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <time.h>
+diff -Nur uClibc-0.9.33.2/librt/clock_gettime.c uClibc-git/librt/clock_gettime.c
+--- uClibc-0.9.33.2/librt/clock_gettime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/clock_gettime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+ #include <errno.h>
+@@ -186,7 +185,6 @@
+ #include <stdint.h>
+ #include <time.h>
+ #include <sys/time.h>
+-#include <libc-internal.h>
+ #include <ldsodefs.h>
+
+
+diff -Nur uClibc-0.9.33.2/librt/clock_nanosleep.c uClibc-git/librt/clock_nanosleep.c
+--- uClibc-0.9.33.2/librt/clock_nanosleep.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/clock_nanosleep.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <time.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/librt/Makefile.in uClibc-git/librt/Makefile.in
+--- uClibc-0.9.33.2/librt/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -28,11 +28,20 @@
+ ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+ librt_filter_SRC += mq_notify.c timer_create.c timer_delete.c \
+ timer_getoverr.c timer_gettime.c timer_settime.c
++# these should really be guarded by ADVANCED_REALTIME, we use them in mq_send.c/mq_receive.c
+ librt_SSRC := $(wildcard $(librt_DIR)/*.S)
+ else
+ librt_filter_SRC += clock_nanosleep.c clock_getcpuclockid.c clock_gettime.c
+ librt_SSRC :=
+ endif
++
++librt_filter_SRC += $(if $(UCLIBC_HAS_ADVANCED_REALTIME),, \
++ spawn.c \
++ spawn_faction_addclose.c \
++ spawn_faction_adddup2.c \
++ spawn_faction_addopen.c \
++ spawn_faction_init.c)
++
+ librt_SRC := $(filter-out $(librt_filter_SRC),$(librt_SRC))
+
+ librt_OBJ := $(patsubst %.c,$(librt_OUT)/%.o,$(librt_SRC))
+diff -Nur uClibc-0.9.33.2/librt/mq_receive.c uClibc-git/librt/mq_receive.c
+--- uClibc-0.9.33.2/librt/mq_receive.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/mq_receive.c 2014-02-03 12:32:57.000000000 +0100
+@@ -10,13 +10,18 @@
+ #include <mqueue.h>
+
+ #ifdef __UCLIBC_HAS_THREADS_NATIVE__
++# ifndef __UCLIBC_HAS_ADVANCED_REALTIME__
++extern ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len,
++ unsigned int *msg_prio,
++ const struct timespec *abs_timeout);
++# endif
+ librt_hidden_proto(mq_timedreceive)
+ #else
+
+ # define __NR___syscall_mq_timedreceive __NR_mq_timedreceive
+ static _syscall5(int, __syscall_mq_timedreceive, int, mqdes,
+ char *, msg_ptr, size_t, msg_len, unsigned int *,
+- msg_prio, const void *, abs_timeout);
++ msg_prio, const void *, abs_timeout)
+
+ # ifdef __UCLIBC_HAS_ADVANCED_REALTIME__
+ /*
+diff -Nur uClibc-0.9.33.2/librt/mq_send.c uClibc-git/librt/mq_send.c
+--- uClibc-0.9.33.2/librt/mq_send.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/mq_send.c 2014-02-03 12:32:57.000000000 +0100
+@@ -10,13 +10,17 @@
+ #include <mqueue.h>
+
+ #ifdef __UCLIBC_HAS_THREADS_NATIVE__
++# ifndef __UCLIBC_HAS_ADVANCED_REALTIME__
++extern int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
++ unsigned int msg_prio, const struct timespec *abs_timeout);
++# endif
+ librt_hidden_proto(mq_timedsend)
+ #else
+
+ # define __NR___syscall_mq_timedsend __NR_mq_timedsend
+ static _syscall5(int, __syscall_mq_timedsend, int, mqdes,
+ const char *, msg_ptr, size_t, msg_len, unsigned int,
+- msg_prio, const void *, abs_timeout);
++ msg_prio, const void *, abs_timeout)
+
+ # ifdef __UCLIBC_HAS_ADVANCED_REALTIME__
+ /*
+diff -Nur uClibc-0.9.33.2/librt/mq_timedreceive.S uClibc-git/librt/mq_timedreceive.S
+--- uClibc-0.9.33.2/librt/mq_timedreceive.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/mq_timedreceive.S 2014-02-03 12:32:57.000000000 +0100
+@@ -2,9 +2,7 @@
+ #ifndef __NR_mq_timedreceive
+ #error Missing definition of NR_timedreceive needed for cancellation.
+ #endif
+-PSEUDO (__mq_timedreceive, mq_timedreceive, 5)
+-ret
+-PSEUDO_END(__mq_timedreceive)
+-librt_hidden_def (__mq_timedreceive)
+-weak_alias (__mq_timedreceive, mq_timedreceive)
+-librt_hidden_weak (mq_timedreceive)
++PSEUDO(mq_timedreceive, mq_timedreceive, 5)
++ret_ERRVAL
++PSEUDO_END(mq_timedreceive)
++librt_hidden_def(mq_timedreceive)
+diff -Nur uClibc-0.9.33.2/librt/mq_timedsend.S uClibc-git/librt/mq_timedsend.S
+--- uClibc-0.9.33.2/librt/mq_timedsend.S 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/mq_timedsend.S 2014-02-03 12:32:57.000000000 +0100
+@@ -2,9 +2,7 @@
+ #ifndef __NR_mq_timedsend
+ #error Missing definition of NR_timedsend needed for cancellation.
+ #endif
+-PSEUDO (__mq_timedsend, mq_timedsend, 5)
+-ret
+-PSEUDO_END(__mq_timedsend)
+-librt_hidden_def (__mq_timedsend)
+-weak_alias (__mq_timedsend, mq_timedsend)
+-librt_hidden_weak (mq_timedsend)
++PSEUDO(mq_timedsend, mq_timedsend, 5)
++ret_ERRVAL
++PSEUDO_END(mq_timedsend)
++librt_hidden_def(mq_timedsend)
+diff -Nur uClibc-0.9.33.2/librt/spawn.c uClibc-git/librt/spawn.c
+--- uClibc-0.9.33.2/librt/spawn.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/librt/spawn.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,266 @@
++/* Copyright (C) 2000, 2011 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <alloca.h>
++#include <unistd.h>
++#include <signal.h>
++#include <stdbool.h>
++#include <fcntl.h>
++
++#include <sys/resource.h>
++#include <not-cancel.h>
++
++#include <spawn.h>
++#include "spawn_int.h"
++
++/* The Unix standard contains a long explanation of the way to signal
++ an error after the fork() was successful. Since no new wait status
++ was wanted there is no way to signal an error using one of the
++ available methods. The committee chose to signal an error by a
++ normal program exit with the exit code 127. */
++#define SPAWN_ERROR 127
++
++/* Execute file actions.
++ * Returns true on error.
++ */
++inline static bool execute_file_actions(const posix_spawn_file_actions_t *fa)
++{
++ struct rlimit64 fdlimit;
++ bool have_fdlimit = false;
++ int cnt;
++
++ for (cnt = 0; cnt < fa->__used; ++cnt) {
++ struct __spawn_action *action = &fa->__actions[cnt];
++
++ switch (action->tag) {
++ case spawn_do_close:
++ if (close_not_cancel(action->action.close_action.fd) != 0) {
++ if (!have_fdlimit) {
++ getrlimit64(RLIMIT_NOFILE, &fdlimit);
++ have_fdlimit = true;
++ }
++
++ /* Only signal errors for file descriptors out of range. */
++ if (0 > action->action.close_action.fd
++ || action->action.close_action.fd >= fdlimit.rlim_cur)
++ /* Signal the error. */
++ return true;
++ }
++ break;
++
++ case spawn_do_open:;
++ int new_fd = open_not_cancel(action->action.open_action.path,
++ action->action.open_action.oflag
++ | O_LARGEFILE,
++ action->action.open_action.mode);
++
++ if (new_fd == -1)
++ return true;
++
++ /* Make sure the desired file descriptor is used. */
++ if (new_fd != action->action.open_action.fd) {
++ if (dup2(new_fd, action->action.open_action.fd)
++ != action->action.open_action.fd)
++ return true;
++
++ if (close_not_cancel(new_fd) != 0)
++ return true;
++ }
++ break;
++
++ case spawn_do_dup2:
++ if (dup2(action->action.dup2_action.fd,
++ action->action.dup2_action.newfd)
++ != action->action.dup2_action.newfd)
++ return true;
++ break;
++ }
++ }
++
++ return false;
++}
++
++#define DANGEROUS (POSIX_SPAWN_SETSIGMASK \
++ | POSIX_SPAWN_SETSIGDEF \
++ | POSIX_SPAWN_SETSCHEDPARAM \
++ | POSIX_SPAWN_SETSCHEDULER \
++ | POSIX_SPAWN_SETPGROUP \
++ | POSIX_SPAWN_RESETIDS)
++inline static bool is_vfork_safe(short int flags)
++{
++ return ((flags & POSIX_SPAWN_USEVFORK) || !(flags & DANGEROUS));
++}
++
++
++/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
++ Before running the process perform the actions described in FILE-ACTIONS. */
++static int
++__spawni(pid_t *pid, const char *file,
++ const posix_spawn_file_actions_t *fa,
++ const posix_spawnattr_t *attrp, char *const argv[],
++ char *const envp[], const char *path)
++{
++ short int flags = attrp ? attrp->__flags : 0;
++
++ pid_t new_pid;
++ if (is_vfork_safe(flags) && !fa)
++ new_pid = vfork();
++ else {
++#ifdef __ARCH_USE_MMU__
++ new_pid = fork();
++#else
++ return ENOSYS;
++#endif
++ }
++
++ if (new_pid) {
++ if (new_pid < 0)
++ return errno;
++
++ if (pid)
++ *pid = new_pid;
++
++ return 0;
++ }
++
++ if (flags & POSIX_SPAWN_SETSIGMASK) {
++ if (sigprocmask(SIG_SETMASK, &attrp->__ss, NULL) != 0)
++ goto error;
++ }
++
++ if (flags & POSIX_SPAWN_SETSIGDEF) {
++ /* We have to iterate over all signals. This could possibly be
++ done better but it requires system specific solutions since
++ the sigset_t data type can be very different on different
++ architectures. */
++ struct sigaction sa;
++ int sig;
++
++ memset(&sa, 0, sizeof(sa));
++ sa.sa_handler = SIG_DFL;
++
++ for (sig = 1; sig <= _NSIG; ++sig) {
++ if (sigismember(&attrp->__sd, sig)) {
++ if (sigaction(sig, &sa, NULL) != 0)
++ goto error;
++ }
++ }
++ }
++
++ if (flags & POSIX_SPAWN_SETSCHEDULER) {
++ if (sched_setscheduler(0, attrp->__policy, &attrp->__sp) == -1)
++ goto error;
++ } else if (flags & POSIX_SPAWN_SETSCHEDPARAM) {
++ if (sched_setparam(0, &attrp->__sp) == -1)
++ goto error;
++ }
++
++ if (flags & POSIX_SPAWN_SETPGROUP) {
++ if (setpgid(0, attrp->__pgrp) != 0)
++ goto error;
++ }
++
++ if (flags & POSIX_SPAWN_RESETIDS) {
++ if (seteuid(getuid()) || setegid(getgid()))
++ goto error;
++ }
++
++ if (fa && execute_file_actions(fa))
++ goto error;
++
++ if (!path || strchr(file, '/')) {
++ execve(file, argv, envp);
++ goto error;
++ }
++
++
++ char *name;
++ {
++ size_t filelen = strlen(file) + 1;
++ size_t pathlen = strlen(path) + 1;
++ name = alloca(pathlen + filelen);
++
++ /* Copy the file name at the top. */
++ name = (char *) memcpy(name + pathlen, file, filelen);
++
++ /* And add the slash. */
++ *--name = '/';
++ }
++
++ char *p;
++ do {
++ char *startp;
++ p = strchrnul(path, ':');
++
++ /* Two adjacent colons, or a colon at the beginning or the end
++ of `PATH' means to search the current directory. */
++ if (p == path)
++ startp = name + 1;
++ else
++ startp = (char *) memcpy(name - (p - path), path, p - path);
++
++ execve(startp, argv, envp);
++
++ switch (errno) {
++ case EACCES:
++ case ENOENT:
++ case ESTALE:
++ case ENOTDIR:
++ /* Those errors indicate the file is missing or not
++ executable by us, in which case we want to just try
++ the next path directory. */
++ break;
++ default:
++ /* Some other error means we found an executable file,
++ but something went wrong executing it; return the
++ error to our caller. */
++ goto error;
++ }
++
++ path = p;
++ } while (*p++ != '\0');
++
++error:
++ _exit(SPAWN_ERROR);
++}
++
++/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
++ Before running the process perform the actions described in FILE-ACTIONS. */
++int posix_spawn (pid_t *pid, const char *path,
++ const posix_spawn_file_actions_t *fa,
++ const posix_spawnattr_t *attrp, char *const argv[],
++ char *const envp[])
++{
++ return __spawni(pid, path, fa, attrp, argv, envp, NULL);
++}
++
++/* Spawn a new process executing FILE with the attributes describes in *ATTRP.
++ Before running the process perform the actions described in FILE-ACTIONS. */
++int
++posix_spawnp(pid_t *pid, const char *file,
++ const posix_spawn_file_actions_t *fa,
++ const posix_spawnattr_t *attrp, char *const argv[],
++ char *const envp[])
++{
++ const char *path = getenv("PATH");
++
++ if (!path)
++ path = ":/bin:/usr/bin";
++
++ return __spawni(pid, file, fa, attrp, argv, envp, path);
++}
+diff -Nur uClibc-0.9.33.2/librt/spawn_faction_addclose.c uClibc-git/librt/spawn_faction_addclose.c
+--- uClibc-0.9.33.2/librt/spawn_faction_addclose.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/librt/spawn_faction_addclose.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,51 @@
++/* Copyright (C) 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <spawn.h>
++#include <unistd.h>
++
++#include "spawn_int.h"
++
++/* Add an action to FILE-ACTIONS which tells the implementation to call
++ `close' for the given file descriptor during the `spawn' call. */
++int
++posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *file_actions,
++ int fd)
++{
++ int maxfd = sysconf(_SC_OPEN_MAX);
++ struct __spawn_action *rec;
++
++ /* Test for the validity of the file descriptor. */
++ if (fd < 0 || fd >= maxfd)
++ return EBADF;
++
++ /* Allocate more memory if needed. */
++ if (file_actions->__used == file_actions->__allocated
++ && __posix_spawn_file_actions_realloc(file_actions) != 0)
++ /* This can only mean we ran out of memory. */
++ return ENOMEM;
++
++ /* Add the new value. */
++ rec = &file_actions->__actions[file_actions->__used];
++ rec->tag = spawn_do_close;
++ rec->action.open_action.fd = fd;
++
++ /* Account for the new entry. */
++ ++file_actions->__used;
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/librt/spawn_faction_adddup2.c uClibc-git/librt/spawn_faction_adddup2.c
+--- uClibc-0.9.33.2/librt/spawn_faction_adddup2.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/librt/spawn_faction_adddup2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,52 @@
++/* Copyright (C) 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <spawn.h>
++#include <unistd.h>
++
++#include "spawn_int.h"
++
++/* Add an action to FILE-ACTIONS which tells the implementation to call
++ `dup2' for the given file descriptors during the `spawn' call. */
++int
++posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *file_actions,
++ int fd, int newfd)
++{
++ int maxfd = sysconf(_SC_OPEN_MAX);
++ struct __spawn_action *rec;
++
++ /* Test for the validity of the file descriptor. */
++ if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd)
++ return EBADF;
++
++ /* Allocate more memory if needed. */
++ if (file_actions->__used == file_actions->__allocated
++ && __posix_spawn_file_actions_realloc (file_actions) != 0)
++ /* This can only mean we ran out of memory. */
++ return ENOMEM;
++
++ /* Add the new value. */
++ rec = &file_actions->__actions[file_actions->__used];
++ rec->tag = spawn_do_dup2;
++ rec->action.dup2_action.fd = fd;
++ rec->action.dup2_action.newfd = newfd;
++
++ /* Account for the new entry. */
++ ++file_actions->__used;
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/librt/spawn_faction_addopen.c uClibc-git/librt/spawn_faction_addopen.c
+--- uClibc-0.9.33.2/librt/spawn_faction_addopen.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/librt/spawn_faction_addopen.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,55 @@
++/* Copyright (C) 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <spawn.h>
++#include <unistd.h>
++
++#include "spawn_int.h"
++
++/* Add an action to FILE-ACTIONS which tells the implementation to call
++ `open' for the given file during the `spawn' call. */
++int
++posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *file_actions,
++ int fd, const char *path, int oflag,
++ mode_t mode)
++{
++ int maxfd = sysconf(_SC_OPEN_MAX);
++ struct __spawn_action *rec;
++
++ /* Test for the validity of the file descriptor. */
++ if (fd < 0 || fd >= maxfd)
++ return EBADF;
++
++ /* Allocate more memory if needed. */
++ if (file_actions->__used == file_actions->__allocated
++ && __posix_spawn_file_actions_realloc (file_actions) != 0)
++ /* This can only mean we ran out of memory. */
++ return ENOMEM;
++
++ /* Add the new value. */
++ rec = &file_actions->__actions[file_actions->__used];
++ rec->tag = spawn_do_open;
++ rec->action.open_action.fd = fd;
++ rec->action.open_action.path = path;
++ rec->action.open_action.oflag = oflag;
++ rec->action.open_action.mode = mode;
++
++ /* Account for the new entry. */
++ ++file_actions->__used;
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/librt/spawn_faction_init.c uClibc-git/librt/spawn_faction_init.c
+--- uClibc-0.9.33.2/librt/spawn_faction_init.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/librt/spawn_faction_init.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,42 @@
++/* Copyright (C) 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <spawn.h>
++#include <stdlib.h>
++#include <string.h>
++
++#include "spawn_int.h"
++
++
++/* Function used to increase the size of the allocated array. This
++ function is called from the `add'-functions. */
++int
++__posix_spawn_file_actions_realloc(posix_spawn_file_actions_t *file_actions)
++{
++ int newalloc = file_actions->__allocated + 8;
++ void *newmem = realloc(file_actions->__actions,
++ newalloc * sizeof(struct __spawn_action));
++
++ if (newmem == NULL)
++ /* Not enough memory. */
++ return ENOMEM;
++
++ file_actions->__actions = (struct __spawn_action *)newmem;
++ file_actions->__allocated = newalloc;
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/librt/spawn_int.h uClibc-git/librt/spawn_int.h
+--- uClibc-0.9.33.2/librt/spawn_int.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/librt/spawn_int.h 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,35 @@
++/* Data structure to contain the action information. */
++struct __spawn_action {
++ enum {
++ spawn_do_close,
++ spawn_do_dup2,
++ spawn_do_open
++ } tag;
++
++ union {
++ struct {
++ int fd;
++ } close_action;
++ struct {
++ int fd;
++ int newfd;
++ } dup2_action;
++ struct {
++ int fd;
++ const char *path;
++ int oflag;
++ mode_t mode;
++ } open_action;
++ } action;
++};
++
++int __posix_spawn_file_actions_realloc(posix_spawn_file_actions_t *fa);
++
++/* handle !LFS */
++#ifndef __UCLIBC_HAS_LFS__
++# define rlimit64 rlimit
++# define getrlimit64 getrlimit
++#endif
++#ifndef O_LARGEFILE
++# define O_LARGEFILE 0
++#endif
+diff -Nur uClibc-0.9.33.2/librt/timer_create.c uClibc-git/librt/timer_create.c
+--- uClibc-0.9.33.2/librt/timer_create.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/librt/timer_create.c 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ * timer_create.c - create a per-process timer.
+ */
+
++#include <stddef.h>
+ #include <errno.h>
+ #include <signal.h>
+ #include <stdlib.h>
+@@ -13,10 +14,6 @@
+
+ #ifdef __NR_timer_create
+
+-#ifndef offsetof
+-# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+-#endif
+-
+ #define __NR___syscall_timer_create __NR_timer_create
+ static __inline__ _syscall3(int, __syscall_timer_create, clockid_t, clock_id,
+ struct sigevent *, evp, kernel_timer_t *, ktimerid);
+diff -Nur uClibc-0.9.33.2/libubacktrace/arm/backtrace.c uClibc-git/libubacktrace/arm/backtrace.c
+--- uClibc-0.9.33.2/libubacktrace/arm/backtrace.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libubacktrace/arm/backtrace.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,6 +12,7 @@
+ *
+ */
+
++#include <libgcc_s.h>
+ #include <execinfo.h>
+ #include <dlfcn.h>
+ #include <stdlib.h>
+@@ -25,6 +26,7 @@
+ int cnt, size;
+ };
+
++#ifdef SHARED
+ static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+ static _Unwind_VRS_Result (*unwind_vrs_get) (_Unwind_Context *,
+ _Unwind_VRS_RegClass,
+@@ -34,14 +36,18 @@
+
+ static void backtrace_init (void)
+ {
+- void *handle = dlopen ("libgcc_s.so.1", RTLD_LAZY);
++ void *handle = dlopen (LIBGCC_S_SO, RTLD_LAZY);
+ if (handle == NULL
+ || ((unwind_backtrace = dlsym (handle, "_Unwind_Backtrace")) == NULL)
+ || ((unwind_vrs_get = dlsym (handle, "_Unwind_VRS_Get")) == NULL)) {
+- printf("libgcc_s.so.1 must be installed for backtrace to work\n");
++ printf(LIBGCC_S_SO " must be installed for backtrace to work\n");
+ abort();
+ }
+ }
++#else
++# define unwind_backtrace _Unwind_Backtrace
++# define unwind_vrs_get _Unwind_VRS_Get
++#endif
+ /* This function is identical to "_Unwind_GetGR", except that it uses
+ "unwind_vrs_get" instead of "_Unwind_VRS_Get". */
+ static inline _Unwind_Word
+@@ -62,7 +68,7 @@
+ {
+ struct trace_arg *arg = a;
+
+- assert (unwind_getip != NULL);
++ assert (unwind_getip(ctx) != NULL);
+
+ /* We are first called with address in the __backtrace function. Skip it. */
+ if (arg->cnt != -1)
+@@ -80,8 +86,10 @@
+ {
+ struct trace_arg arg = { .array = array, .size = size, .cnt = -1 };
+
++#ifdef SHARED
+ if (unwind_backtrace == NULL)
+ backtrace_init();
++#endif
+
+ if (size >= 1)
+ unwind_backtrace (backtrace_helper, &arg);
+diff -Nur uClibc-0.9.33.2/libubacktrace/arm/Makefile.arch uClibc-git/libubacktrace/arm/Makefile.arch
+--- uClibc-0.9.33.2/libubacktrace/arm/Makefile.arch 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libubacktrace/arm/Makefile.arch 2014-02-03 12:32:57.000000000 +0100
+@@ -14,4 +14,4 @@
+ else
+ libubacktrace-a-y+=$(libubacktrace_ARCH_OBJS)
+ endif
+-libubacktrace-so-y+=$(libubacktrace_ARCH_OBJS:.o=.os)
++libubacktrace-so-y+=$(libubacktrace_ARCH_OBJS:.o=.oS)
+diff -Nur uClibc-0.9.33.2/libubacktrace/backtrace.c uClibc-git/libubacktrace/backtrace.c
+--- uClibc-0.9.33.2/libubacktrace/backtrace.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libubacktrace/backtrace.c 2014-02-03 12:32:57.000000000 +0100
+@@ -20,6 +20,7 @@
+ *
+ */
+
++#include <libgcc_s.h>
+ #include <execinfo.h>
+ #include <dlfcn.h>
+ #include <stdlib.h>
+@@ -33,20 +34,25 @@
+ int cnt, size;
+ };
+
++#ifdef SHARED
+ static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+ static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *);
+
+ static void backtrace_init (void)
+ {
+- void *handle = dlopen ("libgcc_s.so.1", RTLD_LAZY);
++ void *handle = dlopen (LIBGCC_S_SO, RTLD_LAZY);
+
+ if (handle == NULL
+ || ((unwind_backtrace = dlsym (handle, "_Unwind_Backtrace")) == NULL)
+ || ((unwind_getip = dlsym (handle, "_Unwind_GetIP")) == NULL)) {
+- printf("libgcc_s.so.1 must be installed for backtrace to work\n");
++ printf(LIBGCC_S_SO " must be installed for backtrace to work\n");
+ abort();
+ }
+ }
++#else
++# define unwind_backtrace _Unwind_Backtrace
++# define unwind_getip _Unwind_GetIP
++#endif
+
+ static _Unwind_Reason_Code
+ backtrace_helper (struct _Unwind_Context *ctx, void *a)
+@@ -71,8 +77,10 @@
+ {
+ struct trace_arg arg = { .array = array, .size = size, .cnt = -1 };
+
++#ifdef SHARED
+ if (unwind_backtrace == NULL)
+ backtrace_init();
++#endif
+
+ if (size >= 1)
+ unwind_backtrace (backtrace_helper, &arg);
+diff -Nur uClibc-0.9.33.2/libubacktrace/backtracesyms.c uClibc-git/libubacktrace/backtracesyms.c
+--- uClibc-0.9.33.2/libubacktrace/backtracesyms.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libubacktrace/backtracesyms.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>.
+
+ Based on glibc/sysdeps/generic/elf/backtracesyms.c
+
+diff -Nur uClibc-0.9.33.2/libubacktrace/backtracesymsfd.c uClibc-git/libubacktrace/backtracesymsfd.c
+--- uClibc-0.9.33.2/libubacktrace/backtracesymsfd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libubacktrace/backtracesymsfd.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA.
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>.
+
+ Based on glibc/sysdeps/generic/elf/backtracesymsfd.c
+
+diff -Nur uClibc-0.9.33.2/libubacktrace/Makefile.in uClibc-git/libubacktrace/Makefile.in
+--- uClibc-0.9.33.2/libubacktrace/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libubacktrace/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -25,11 +25,13 @@
+ -include $(libubacktrace_ARCH_DIR)/Makefile.arch
+
+ libubacktrace_SRC-y :=
+-libubacktrace_SRC-$(UCLIBC_HAS_BACKTRACE) := backtrace.c backtracesyms.c backtracesymsfd.c
++libubacktrace_SRC-$(UCLIBC_HAS_BACKTRACE) := backtracesyms.c backtracesymsfd.c
++libubacktrace_SRC_SHARED-$(UCLIBC_HAS_BACKTRACE) := backtrace.c
+
+ # remove generic sources, if arch specific version is present
+ ifneq ($(strip $(libubacktrace_ARCH_SRC-y)),)
+ libubacktrace_SRC-y := $(filter-out $(notdir $(libubacktrace_ARCH_SRC-y)),$(libubacktrace_SRC-y))
++libubacktrace_SRC_SHARED-y := $(filter-out $(notdir $(libubacktrace_ARCH_SRC-y)),$(libubacktrace_SRC_SHARED-y))
+ endif
+
+ # -fasynchronous-unwind-tables is required for backtrace to work using dwarf2
+@@ -43,12 +45,19 @@
+ libubacktrace_SRCS := $(patsubst %.c,$(libubacktrace_DIR)/%.c,$(libubacktrace_SRC-y))
+ libubacktrace_OBJS := $(patsubst $(libubacktrace_DIR)/%.c,$(libubacktrace_OUT)/%.o,$(libubacktrace_SRCS))
+
++libubacktrace_SHARED_SRCS := $(patsubst %.c,$(libubacktrace_DIR)/%.c,$(libubacktrace_SRC_SHARED-y))
++libubacktrace_SHARED_OBJS := $(patsubst $(libubacktrace_DIR)/%.c,$(libubacktrace_OUT)/%.o,$(libubacktrace_SHARED_SRCS))
++
++libubacktrace-shared-y := $(libubacktrace_SHARED_OBJS:.o=.oS)
++libubacktrace-static-y := $(libubacktrace_SHARED_OBJS)
++
+ ifeq ($(DOPIC),y)
+-libubacktrace-a-y += $(libubacktrace_OBJS:.o=.os)
++libubacktrace-a-y += $(libubacktrace_OBJS:.o=.os) $(libubacktrace-static-y:.o=.os)
+ else
+-libubacktrace-a-y += $(libubacktrace_OBJS)
++libubacktrace-a-y += $(libubacktrace_OBJS) $(libubacktrace-static-y)
+ endif
+-libubacktrace-so-y += $(libubacktrace_OBJS:.o=.os)
++libubacktrace-so-y += $(libubacktrace_OBJS:.o=.os) $(libubacktrace-shared-y)
++
+
+ lib-a-$(UCLIBC_HAS_BACKTRACE) += $(top_builddir)lib/libubacktrace.a
+ lib-so-$(UCLIBC_HAS_BACKTRACE) += $(top_builddir)lib/libubacktrace.so
+@@ -56,11 +65,7 @@
+ objclean-y += CLEAN_libubacktrace
+
+ ifeq ($(DOMULTI),n)
+-ifeq ($(DOPIC),y)
+-$(top_builddir)lib/libubacktrace.so: $(top_builddir)lib/libubacktrace.a $(libdl.depend)
+-else
+ $(top_builddir)lib/libubacktrace.so: $(libubacktrace_OUT)/libubacktrace_so.a $(libdl.depend)
+-endif
+ $(call link.so,$(libubacktrace_FULL_NAME),$(ABI_VERSION))
+ else
+ $(top_builddir)lib/libubacktrace.so: $(libubacktrace_OUT)/libubacktrace.oS | $(libdl.depend)
+@@ -71,7 +76,7 @@
+ $(Q)$(RM) $@
+ $(do_ar)
+
+-$(libubacktrace_OUT)/libubacktrace.oS: $(libubacktrace_SRCS) $(libubacktrace_ARCH_SRCS)
++$(libubacktrace_OUT)/libubacktrace.oS: $(libubacktrace_SRCS) $(libubacktrace_ARCH_SRCS) $(libubacktrace_SHARED_SRCS)
+ $(Q)$(RM) $@
+ $(compile-m)
+
+diff -Nur uClibc-0.9.33.2/libutil/forkpty.c uClibc-git/libutil/forkpty.c
+--- uClibc-0.9.33.2/libutil/forkpty.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libutil/forkpty.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <termios.h>
+diff -Nur uClibc-0.9.33.2/libutil/logout.c uClibc-git/libutil/logout.c
+--- uClibc-0.9.33.2/libutil/logout.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libutil/logout.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/libutil/openpty.c uClibc-git/libutil/openpty.c
+--- uClibc-0.9.33.2/libutil/openpty.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/libutil/openpty.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/Makefile.help uClibc-git/Makefile.help
+--- uClibc-0.9.33.2/Makefile.help 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/Makefile.help 2014-02-03 12:32:56.000000000 +0100
+@@ -27,6 +27,7 @@
+ @echo ' menuconfig - interactive curses-based configurator'
+ @echo ' oldconfig - resolve any unresolved symbols in .config'
+ @echo ' silentoldconfig - resolve any unresolved symbols in .config, silently'
++ @echo ' savedefconfig - Save current config (minimal config)'
+ @echo ' randconfig - generate a random .config'
+ @$(if $(arch-defconfigs), \
+ @echo ''; \
+@@ -58,7 +59,7 @@
+ @echo ' ARCH= - Use given arch for config targets'
+ @echo ' SHELL= - Shell to use for make'
+ @echo ' BUILD_CFLAGS= - extra CFLAGS for compiling host binaries'
+- @echo ' BUILD_LFLAGS= - extra LDFLAGS for linking host binaries'
++ @echo ' BUILD_LDFLAGS= - extra LDFLAGS for linking host binaries'
+ @echo ' CONFIG_SHELL= - Shell to use for menuconfig'
+ @echo
+ @echo ' PREFIX= - Prepended prefix'
+diff -Nur uClibc-0.9.33.2/Makefile.in uClibc-git/Makefile.in
+--- uClibc-0.9.33.2/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/Makefile.in 2014-02-03 12:32:56.000000000 +0100
+@@ -8,18 +8,8 @@
+ #--------------------------------------------------------------
+ # You shouldn't need to mess with anything beyond this point...
+ #--------------------------------------------------------------
+-clean_targets := clean realclean distclean \
+- objclean-y headers_clean-y CLEAN_utils
+-noconfig_targets := menuconfig config oldconfig silentoldconfig randconfig \
+- defconfig allyesconfig allnoconfig \
+- release dist tags help
+-
+ include $(top_srcdir)Rules.mak
+ sub_headers := headers
+-ifndef KCONFIG_CONFIG
+-KCONFIG_CONFIG := $(top_builddir).config
+-endif
+-export KCONFIG_CONFIG
+
+ ifeq ($(HAVE_DOT_CONFIG),y)
+
+@@ -56,6 +46,7 @@
+
+ conf := $(top_builddir)extra/config/conf
+ mconf := $(top_builddir)extra/config/mconf
++nconf := $(top_builddir)extra/config/nconf
+
+ ifeq ($(HAVE_DOT_CONFIG),y)
+ # If the .config changes then we have to make sure that our includes are
+@@ -63,9 +54,9 @@
+ # have uClibc_config.h as prerequisite but since we _symlink_ the headers
+ # and do not (?) want to rely on 'make -L' we better update them right here,
+ # on spot to save us from alot of hazzle.
+-$(top_builddir)include/bits/uClibc_config.h: $(conf) $(KCONFIG_CONFIG) $(top_srcdir)extra/scripts/conf-header.sh | $(top_builddir)include/bits $(top_builddir)include/config
++$(top_builddir)include/bits/uClibc_config.h: $(conf) $(KCONFIG_CONFIG) $(top_srcdir)extra/scripts/conf-header.sh | $(top_builddir)include/bits
+ @$(disp_gen)
+- $(Q)@$< -s $(top_srcdir)extra/Configs/Config.in
++ $(Q)$< -s $(Kconfig)
+ $(Q)$(top_srcdir)extra/scripts/conf-header.sh $(KCONFIG_CONFIG) > $@
+ $(Q)$(MAKE) headers-y
+
+@@ -76,6 +67,10 @@
+ $(top_builddir)include/config/linuxthreads/old.h $(top_builddir)include/config/linuxthreads/new.h:
+ @true
+
++$(top_builddir)include/generated/unifdef_config.h: $(top_builddir)include/bits/uClibc_config.h | $(top_builddir)include/generated
++ @$(disp_gen)
++ $(Q)$(SED) -e '1,3d' $^ > $@
++
+ # For the moment, we have to keep re-running this target
+ # because the fix includes scripts rely on pre-processers
+ # in order to generate the headers correctly :(. That
+@@ -87,11 +82,21 @@
+ export header_extra_args = -n
+ endif
+ HEADERS_BITS_COMMON := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common/bits/*.h))
++ifneq ($(ARCH_HAS_DEPRECATED_SYSCALLS),y)
++HEADERS_BITS_COMMON_NO_LEGACY := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common-generic/bits/*.h))
++HEADERS_BITS_COMMON := $(filter-out $(HEADERS_BITS_COMMON_NO_LEGACY),$(HEADERS_BITS_COMMON))
++ALL_HEADERS_BITS_COMMON_NO_LEGACY := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_COMMON_NO_LEGACY))
++endif
++
+ HEADERS_BITS_ARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/*.h))
+ HEADERS_BITS_SUBARCH :=
+ ifneq ($(TARGET_SUBARCH),)
+ HEADERS_BITS_SUBARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/*.h))
+ endif
++ifneq ($(HEADERS_BITS_PTHREAD),)
++HEADERS_BITS_ARCH := $(filter-out $(HEADERS_BITS_PTHREAD),$(HEADERS_BITS_ARCH))
++HEADERS_BITS_SUBARCH:= $(filter-out $(HEADERS_BITS_PTHREAD),$(HEADERS_BITS_SUBARCH))
++endif
+ HEADERS_BITS_COMMON := $(filter-out $(HEADERS_BITS_ARCH) $(HEADERS_BITS_SUBARCH) $(HEADERS_BITS_PTHREAD),$(HEADERS_BITS_COMMON))
+
+ HEADERS_SYS_COMMON := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common/sys/*.h))
+@@ -99,8 +104,11 @@
+ HEADERS_SYS_COMMON := $(filter-out $(HEADERS_SYS_ARCH),$(HEADERS_SYS_COMMON))
+
+ ALL_HEADERS_COMMON := $(top_builddir)include/fpu_control.h \
++ $(top_builddir)include/jmpbuf-offsets.h \
++ $(top_builddir)include/jmpbuf-unwind.h \
+ $(top_builddir)include/dl-osinfo.h \
+- $(top_builddir)include/hp-timing.h
++ $(top_builddir)include/hp-timing.h \
++ $(top_builddir)include/not-cancel.h
+ ALL_HEADERS_BITS_COMMON := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_COMMON))
+ ALL_HEADERS_BITS_ARCH := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_ARCH))
+ ifneq ($(TARGET_SUBARCH),)
+@@ -120,13 +128,17 @@
+ $(ALL_HEADERS_SYS_ARCH) \
+ $(ALL_HEADERS_BITS_PTHREAD)
+
+-$(top_builddir)include/fpu_control.h:
++ifneq ($(ARCH_HAS_DEPRECATED_SYSCALLS),y)
++ target-headers-sysdep += $(ALL_HEADERS_BITS_COMMON_NO_LEGACY)
++endif
++
++$(top_builddir)include/fpu_control.h $(top_builddir)include/jmpbuf-offsets.h $(top_builddir)include/jmpbuf-unwind.h:
+ @$(disp_ln)
+ $(Q)[ -r $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) ] && \
+ $(LN) -fs $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) $@ || \
+ $(LN) -fs $(call rel_srcdir)libc/sysdeps/linux/common/$(@F) $@
+
+-$(top_builddir)include/dl-osinfo.h $(top_builddir)include/hp-timing.h:
++$(top_builddir)include/dl-osinfo.h $(top_builddir)include/hp-timing.h $(top_builddir)include/not-cancel.h:
+ $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/common/$(@F) $@
+
+ $(ALL_HEADERS_BITS_COMMON):
+@@ -135,6 +147,11 @@
+ $(ALL_HEADERS_BITS_ARCH):
+ $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(@F) $@
+
++ifneq ($(ARCH_HAS_DEPRECATED_SYSCALLS),y)
++$(ALL_HEADERS_BITS_COMMON_NO_LEGACY):
++ $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/common-generic/bits/$(@F) $@
++endif
++
+ ifneq ($(TARGET_SUBARCH),)
+ $(ALL_HEADERS_BITS_SUBARCH):
+ $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/$(@F) $@
+@@ -155,6 +172,9 @@
+ HEADERCLEAN_common:
+ $(do_rm) $(ALL_HEADERS_COMMON)
+ headers_clean-y += HEADERCLEAN_common
++HEADERCLEAN_config:
++ $(do_rm) -r $(addprefix $(top_builddir)include/,config generated)
++menuconfig-clean-y: HEADERCLEAN_config
+
+ # The headers. Arch specific headers are specified via ARCH_HEADERS in
+ # libc/sysdeps/linux/$(TARGET_ARCH)/Makefile.arch which appends those via
+@@ -170,27 +190,22 @@
+ $(top_builddir)include/bits/sysnum.h: $(top_srcdir)extra/scripts/gen_bits_syscall_h.sh | $(top_builddir)include/bits
+ @$(disp_gen)
+ $(Q)set -e; \
+- tmp=`mktemp $(top_builddir)include/bits/sysnum.h.XXXXXX 2>/dev/null || true`; \
+- [ -z "$$tmp" ] && tmp='$(top_builddir)include/bits/sysnum.h.new'; \
+- KERNEL_HEADERS="${KERNEL_HEADERS}" top_builddir="$(top_builddir)" CC="$(CC) $(CPU_CFLAGS)" $(SHELL) $< > $$tmp; \
+- if cmp $(top_builddir)include/bits/sysnum.h $$tmp >/dev/null 2>&1; then \
+- $(RM) $$tmp; \
+- else \
+- mv -f $$tmp $(top_builddir)include/bits/sysnum.h; \
+- fi
++ KERNEL_HEADERS="${KERNEL_HEADERS}" CC="$(CC) $(CPU_CFLAGS)" $(SHELL) $< > $@.new; \
++ cmp -s $@ $@.new && $(RM) $@.new || mv -f $@.new $@
+ @# Ugly linux specific hack..
+ $(Q)if grep -q __NR_ $@; then true; else \
+ rm -f $@; \
+ echo "ERROR: Could not generate syscalls."; \
+- echo "Make sure that you have proper kernel headers."; \
+- echo "Your .config in KERNEL_HEADERS=\"\" was set to:"; \
++ echo "Make sure that you have properly installed kernel headers."; \
++ echo "Your .config KERNEL_HEADERS=\"\" was set to:"; \
+ echo "${KERNEL_HEADERS}"; \
+ exit 1; \
+ fi
+
+ .PHONY: $(LOCAL_INSTALL_PATH)
+ $(LOCAL_INSTALL_PATH):
+- $(Q)$(MAKE) PREFIX=$(shell pwd)/$(LOCAL_INSTALL_PATH) RUNTIME_PREFIX=/ \
++ $(Q)$(MAKE) PREFIX=$(LOCAL_INSTALL_PATH) \
++ RUNTIME_PREFIX=/ \
+ DEVEL_PREFIX=/usr/ \
+ HOSTCC="$(HOSTCC)" \
+ install
+@@ -210,16 +225,27 @@
+ # a "y" here means the feature is enabled and so we should *not* rm it.
+ # if the option expands to nothing though, we can punt the headers.
+ HEADERS_RM- := \
++ config \
++ generated \
++ internal \
++ cancel.h \
+ dl-osinfo.h \
++ jmpbuf-offsets.h \
++ jmpbuf-unwind.h \
+ hp-timing.h \
++ not-cancel.h \
+ _lfs_64.h \
+ bits/uClibc_arch_features.h \
+ bits/kernel_sigaction.h \
+ bits/kernel_stat.h \
+ bits/kernel_types.h \
++ bits/libc-lock.h \
++ bits/stdio-lock.h \
+ bits/syscalls.h \
+ bits/syscalls-common.h \
+ bits/uClibc_fpmax.h \
++ bits/uClibc_mutex.h \
++ bits/uClibc_pthread.h \
+ bits/uClibc_uintmaxtostr.h \
+ bits/uClibc_uwchar.h \
+ bits/uClibc_va_copy.h \
+@@ -259,18 +285,23 @@
+ HEADERS_RM-$(UCLIBC_HAS_REGEX) += regex.h regexp.h
+ HEADERS_RM-$(UCLIBC_HAS_RPC) += rpc
+ HEADERS_RM-$(UCLIBC_HAS_SHADOW) += shadow.h
+-HEADERS_RM-$(UCLIBC_HAS_SOCKET) += sys/socket.h bits/socket.h sys/socketvar.h
++HEADERS_RM-$(UCLIBC_HAS_SOCKET) += sys/socket.h bits/socket.h sys/socketvar.h bits/socket_type.h
+ HEADERS_RM-$(UCLIBC_HAS_SYSLOG) += syslog.h sys/syslog.h bits/syslog*.h
+ HEADERS_RM-$(UCLIBC_HAS_THREADS) += *thread*.h semaphore.h \
+ bits/*thread*.h \
+ bits/initspin.h
+ HEADERS_RM-$(UCLIBC_HAS_THREADS_NATIVE) += atomic.h bits/atomic.h
++HEADERS_RM-$(UCLIBC_HAS_OBSTACK) += obstack.h
+ HEADERS_RM-$(UCLIBC_HAS_UTMPX) += bits/utmpx.h utmpx.h
+ HEADERS_RM-$(UCLIBC_HAS_WCHAR) += wchar.h wctype.h
+ HEADERS_RM-$(UCLIBC_HAS_WORDEXP) += wordexp.h
+ HEADERS_RM-$(UCLIBC_HAS_XATTR) += sys/xattr.h
+ HEADERS_RM-$(UCLIBC_HAS_XLOCALE) += xlocale.h
+-HEADERS_RM-$(UCLIBC_LINUX_SPECIFIC) += sys/eventfd.h sys/fsuid.h \
++HEADERS_RM-$(UCLIBC_LINUX_SPECIFIC) += \
++ sys/cachectl.h \
++ bits/eventfd.h \
++ sys/eventfd.h \
++ sys/fsuid.h \
+ bits/inotify.h \
+ sys/inotify.h \
+ sys/kdaemon.h \
+@@ -288,11 +319,13 @@
+ sys/sysinfo.h \
+ bits/timerfd.h \
+ sys/timerfd.h \
++ sys/sysmips.h \
+ sys/vfs.h
+ HEADERS_RM-$(UCLIBC_SUPPORT_AI_ADDRCONFIG) += ifaddrs.h
+ HEADERS_RM-$(UCLIBC_SV4_DEPRECATED) += ustat.h sys/ustat.h bits/ustat.h
+ HEADERS_RM-$(UCLIBC_SUSV3_LEGACY) += sys/timeb.h regexp.h
+ HEADERS_RM-$(UCLIBC_SUSV4_LEGACY) += utime.h ucontext.h
++HEADERS_RM-$(UCLIBC_HAS_ADVANCED_REALTIME) += spawn.h
+
+ ifneq ($(findstring install,$(MAKECMDGOALS)),)
+ $(addprefix $(PREFIX)$(DEVEL_PREFIX),include $(MULTILIB_DIR)):
+@@ -303,7 +336,9 @@
+ $(do_mkdir)
+ endif
+ endif
+-install_headers: headers $(top_builddir)extra/scripts/unifdef | $(PREFIX)$(DEVEL_PREFIX)include
++
++
++install_headers: headers $(top_builddir)extra/scripts/unifdef $(top_builddir)include/generated/unifdef_config.h | $(PREFIX)$(DEVEL_PREFIX)include
+ @$(call disp_install,"include -> $(PREFIX)$(DEVEL_PREFIX)include")
+ $(Q)top_builddir=$(top_builddir) \
+ $(top_srcdir)extra/scripts/install_headers.sh \
+@@ -346,12 +381,7 @@
+ else
+ -$(INSTALL) -m 755 $(top_builddir)lib/libc.so $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/
+ endif
+-ifeq ($(UCLIBC_HAS_BACKTRACE),y)
+-# Add the AS_NEEDED entry for libubacktrace.so
+- if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME) ] ; then \
+- echo "GROUP ( $(UBACKTRACE_ASNEEDED) )" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \
+- fi
+-endif
++ echo "$(UBACKTRACE_ASNEEDED)" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so
+ ifeq ($(UCLIBC_HAS_THREADS),y)
+ ifneq ($(LINUXTHREADS_OLD),y)
+ ifeq ($(HARDWIRED_ABSPATH),y)
+@@ -422,49 +452,55 @@
+ install_hostutils: hostutils
+ $(Q)$(MAKE) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CC)" HOSTCC="$(HOSTCC)" DOTHOST=.host -C utils utils_install
+
+-$(addprefix $(top_builddir),include include/bits include/sys include/config lib extra/config/lxdialog extra/locale extra/scripts $(subdirs)):
++$(addprefix $(top_builddir),include include/bits include/sys include/config include/generated lib extra/config/lxdialog extra/locale extra/scripts $(subdirs)):
+ $(do_mkdir)
+
+ # configuration
+ # ---------------------------------------------------------------------------
+-$(conf) $(mconf): | $(top_builddir)include/config $(top_builddir)extra/config/lxdialog
++$(conf) $(mconf) $(nconf): | $(top_builddir)include/config $(top_builddir)include/generated $(top_builddir)extra/config/lxdialog
+ $(Q)$(MAKE) -C extra/config $(@F)
+
+ arch-defconfigs := $(notdir $(wildcard $(top_srcdir)extra/Configs/defconfigs/$(ARCH)/*_defconfig))
+
+ menuconfig: $(mconf)
+- $(Q)$< extra/Configs/Config.in
+-
++ $(Q)$< $(Kconfig)
+ config: $(conf)
+- $(Q)$< extra/Configs/Config.in
+-
+-oldconfig: $(conf)
+- $(Q)$< -o extra/Configs/Config.in
++ $(Q)$< $(Kconfig)
++nconfig: $(nconf)
++ $(Q)$< $(Kconfig)
+
++oldaskconfig: $(conf)
++ $(Q)$< -a $(Kconfig)
+ silentoldconfig: $(conf)
+- $(Q)$< -s extra/Configs/Config.in
+-
+-randconfig: $(conf)
+- $(Q)$< -r extra/Configs/Config.in
+-
++ $(Q)$< -s $(Kconfig)
++oldconfig: $(conf)
++ $(Q)$< -o $(Kconfig)
++allnoconfig: $(conf)
++ $(Q)$< -n $(Kconfig)
+ allyesconfig: $(conf)
+- $(Q)$< -y extra/Configs/Config.in
++ $(Q)$< -y $(Kconfig)
+ $(SED) -i -e "s/^DODEBUG=.*/# DODEBUG is not set/" \
+ -e "s/^DOASSERTS=.*/# DOASSERTS is not set/" \
+ -e "s/^SUPPORT_LD_DEBUG_EARLY=.*/# SUPPORT_LD_DEBUG_EARLY is not set/" \
+ -e "s/^SUPPORT_LD_DEBUG=.*/# SUPPORT_LD_DEBUG is not set/" \
+ -e "s/^UCLIBC_MJN3_ONLY=.*/# UCLIBC_MJN3_ONLY is not set/" \
+ $(KCONFIG_CONFIG)
+- $(Q)$< -o extra/Configs/Config.in
+-
+-allnoconfig: $(conf)
+- $(Q)$< -n extra/Configs/Config.in
+-
+-defconfig: $(conf)
+- $(Q)$< -D extra/Configs/defconfigs/$(ARCH)/$@ extra/Configs/Config.in
++ $(Q)$< -o $(Kconfig)
++alldefconfig: $(conf)
++ $(Q)$< -A $(Kconfig)
++randconfig: $(conf)
++ $(Q)$< -r $(Kconfig)
+
+-%_defconfig: $(conf)
+- $(Q)$< -D extra/Configs/defconfigs/$(ARCH)/$@ extra/Configs/Config.in
++cmd_defconfig = $(Q)$< -D extra/Configs/defconfigs/$(ARCH)/$@ $(Kconfig)
++defconfig: $(conf) ; $(cmd_defconfig)
++%_defconfig: $(conf) ; $(cmd_defconfig)
++
++savedefconfig: $(conf)
++ $(Q)$< -S defconfig $(Kconfig)
++listnewconfig: $(conf)
++ $(Q)$< -l $(Kconfig)
++olddefconfig: $(conf)
++ $(Q)$< -d $(Kconfig)
+
+ menuconfig-clean-y:
+ $(Q)$(MAKE) -C extra/config CLEAN_extra/config
+@@ -484,11 +520,11 @@
+ $(Q)$(RM) $(top_builddir)extra/scripts/unifdef
+ $(Q)$(RM) -r $(LOCAL_INSTALL_PATH)
+
+-distclean: clean
++distclean: realclean
+ -find . \( -name core -o -name \*.orig -o -name \*~ -o -name .\*.dep \) -exec $(RM) {} \;
+ $(RM) $(top_builddir).config $(top_builddir).config.old $(top_builddir).config.cmd
+- $(RM) $(top_builddir)extra/locale/*.tgz
+- $(MAKE) -C extra/config distclean
++ $(Q)$(RM) $(top_builddir)extra/locale/*.tgz
++ @$(MAKE) -C extra/config distclean
+
+ dist release:
+ $(RM) ../uClibc-$(VERSION).tar
+@@ -499,7 +535,9 @@
+ du -b ../uClibc-$(VERSION).tar.{bz2,xz}
+
+ test check: test_compile
+- $(Q)$(MAKE) -C test
++ $(Q)$(MAKE) -C test \
++ $(if $(O),top_builddir=$(O)/)
+
+ test_compile: $(LOCAL_INSTALL_PATH)
+- $(Q)$(MAKE) -C test compile
++ $(Q)$(MAKE) -C test compile \
++ $(if $(O),top_builddir=$(O)/)
+diff -Nur uClibc-0.9.33.2/Makerules uClibc-git/Makerules
+--- uClibc-0.9.33.2/Makerules 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/Makerules 2014-02-03 12:32:56.000000000 +0100
+@@ -50,6 +50,10 @@
+ endif
+ $(shared_objs) $(ar_objs): | $(sub_headers)
+
++define objects_with_syms
++ $(foreach o,$(2),$(if $(shell $(NM) $(1) $(o) | grep .),$(o)))
++endef
++
+ headers-y: $(headers-y)
+ @true
+
+@@ -243,7 +247,7 @@
+ cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@)) $(sort $(foreach d,$(^:$(top_srcdir)=),$(collect_multi_flags)))
+ cmd_strip = $(STRIPTOOL) $(STRIP_FLAGS) $^
+ cmd_t_strip = $(STRIPTOOL) $(STRIP_FLAGS) $@
+-cmd_ar = $(AR) $(ARFLAGS) $@ $^
++cmd_ar = $(AR) $(ARFLAGS) $@ $(call objects_with_syms,,$^)
+
+ define do_ln
+ @$(disp_ln)
+@@ -300,7 +304,7 @@
+ -Wl,-z,relro -Wl,--hash-style=gnu -Wl,-z,defs \
+ -Wl,--verbose 2>&1 | LC_ALL=C \
+ sed -e '/^=========/,/^=========/!d;/^=========/d' \
+- -e 's/\. = .* + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' > $@.lds
++ -e 's/\. = .* + SIZEOF_HEADERS;/& $(SYMBOL_PREFIX)_begin = . - SIZEOF_HEADERS;/' > $@.lds
+ endef
+
+ define link.so
+@@ -373,14 +377,9 @@
+ $(top_builddir)lib/interp.c: | $(top_builddir)lib
+ $(Q)echo "/* Force shared libraries to know about the correct library loader */" > $@.tmp
+ $(Q)echo "#include <features.h>" >> $@.tmp
+-ifeq ($(HARDWIRED_ABSPATH),y)
+ $(Q)echo "const char __dl_ldso__[] attribute_hidden __attribute__ ((weak)) __attribute__ ((section " \
+ "(\".interp\"))) =\""$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UCLIBC_LDSO)"\";" >> $@.tmp
+ $(Q)$(SED) -i -e 's://:/:g' $@.tmp
+-else
+- $(Q)echo "const char __dl_ldso__[] attribute_hidden __attribute__ ((weak)) __attribute__ ((section " \
+- "(\".interp\"))) =\""$(UCLIBC_LDSO)"\";" >> $@.tmp
+-endif
+ $(Q)mv $@.tmp $@
+
+ $(interp): $(top_builddir)lib/interp.c | $(sub_headers)
+@@ -470,6 +469,8 @@
+ $(libm-a-y) $(libm-so-y) \
+ $(libpthread-a-y) $(libpthread-so-y) $(libpthread-nonshared-y) \
+ $(libthread_db-a-y) $(libthread_db-so-y) $(libpthread-generated-y) \
++ $(START_FILE-libpthread.so) $(END_FILE-libpthread.so) \
++ $(PTHREAD_INITFINI:.c=.s) \
+ $(librt-a-y) $(librt-so-y) $(libresolv-a-y) $(libresolv-so-y) \
+ $(libcrypt-a-y) $(libcrypt-so-y) $(libutil-a-y) $(libutil-so-y) \
+ $(libnsl-a-y) $(libnsl-so-y) $(ldso-y) $(libdl-a-y) $(libdl-so-y) \
+diff -Nur uClibc-0.9.33.2/Rules.mak uClibc-git/Rules.mak
+--- uClibc-0.9.33.2/Rules.mak 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/Rules.mak 2014-02-17 12:32:28.000000000 +0100
+@@ -27,6 +27,15 @@
+ # file named ".config". Don't mess with this file unless
+ # you know what you are doing.
+
++clean_targets := clean realclean distclean \
++ objclean-y headers_clean-y CLEAN_utils
++noconfig_targets := menuconfig config nconfig \
++ oldaskconfig silentoldconfig oldconfig allnoconfig allyesconfig \
++ alldefconfig randconfig defconfig savedefconfig listnewconfig \
++ olddefconfig \
++ xconfig gconfig update-po-config mconf qconf gconf nconf conf \
++ release dist tags help
++
+
+ #-----------------------------------------------------------
+ # If you are running a cross compiler, you will want to set
+@@ -63,7 +72,7 @@
+
+ # Select the compiler needed to build binaries for your development system
+ HOSTCC = gcc
+-BUILD_CFLAGS = -Os -Wall
++BUILD_CFLAGS = -Os
+
+ #---------------------------------------------------------
+ # Nothing beyond this point should ever be touched by mere
+@@ -74,10 +83,25 @@
+ qstrip = $(strip $(subst ",,$(1)))
+ #"))
+
++# kconfig stuff
++KCONFIG_CONFIG ?= $(top_builddir).config
++KCONFIG_CONFIG := $(abspath $(KCONFIG_CONFIG))
++export KCONFIG_CONFIG
++KCONFIG_AUTOCONFIG := $(dir $(KCONFIG_CONFIG))include/config/auto.conf
++export KCONFIG_AUTOCONFIG
++KCONFIG_TRISTATE := $(dir $(KCONFIG_CONFIG))include/config/tristate.conf
++export KCONFIG_TRISTATE
++srctree := $(abspath $(top_srcdir))
++export srctree
++KCONFIG_AUTOHEADER := $(dir $(KCONFIG_CONFIG))include/generated/autoconf.h
++export KCONFIG_AUTOHEADER
++Kconfig := $(abspath $(top_srcdir)extra/Configs/Config.in)
++
+ # Pull in the user's uClibc configuration
+-ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
+--include $(top_builddir).config
++ifeq ($(filter $(noconfig_targets) clean CLEAN_%,$(MAKECMDGOALS)),)
++-include $(KCONFIG_CONFIG)
+ endif
++
+ TARGET_ARCH:=$(call qstrip,$(TARGET_ARCH))
+ ifeq ($(TARGET_ARCH),)
+ ARCH ?= $(shell uname -m | $(SED) -e s/i.86/i386/ \
+@@ -93,19 +117,20 @@
+ export ARCH
+
+ # Make certain these contain a final "/", but no "//"s.
+-TARGET_SUBARCH:=$(call qstrip,$(TARGET_SUBARCH))
+-RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(call qstrip,$(RUNTIME_PREFIX)))))
+-DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(call qstrip,$(DEVEL_PREFIX)))))
+-MULTILIB_DIR:=$(strip $(subst //,/, $(subst ,/, $(call qstrip,$(MULTILIB_DIR)))))
+-KERNEL_HEADERS:=$(strip $(subst //,/, $(subst ,/, $(call qstrip,$(KERNEL_HEADERS)))))
++scrub_path = $(strip $(subst //,/, $(subst ,/, $(call qstrip,$(1)))))
++TARGET_SUBARCH := $(call qstrip,$(TARGET_SUBARCH))
++RUNTIME_PREFIX := $(call scrub_path,$(RUNTIME_PREFIX))
++DEVEL_PREFIX := $(call scrub_path,$(DEVEL_PREFIX))
++MULTILIB_DIR := $(call scrub_path,$(MULTILIB_DIR))
++KERNEL_HEADERS := $(call scrub_path,$(KERNEL_HEADERS))
+ export RUNTIME_PREFIX DEVEL_PREFIX KERNEL_HEADERS MULTILIB_DIR
+
+
+ # Now config hard core
+ MAJOR_VERSION := 0
+ MINOR_VERSION := 9
+-SUBLEVEL := 33
+-EXTRAVERSION :=.2
++SUBLEVEL := 34
++EXTRAVERSION :=-git
+ VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL)
+ ABI_VERSION := $(MAJOR_VERSION)
+ ifneq ($(EXTRAVERSION),)
+@@ -118,13 +143,19 @@
+ LIBC := libc
+ SHARED_LIBNAME := $(LIBC).so.$(ABI_VERSION)
+ UBACKTRACE_DSO := libubacktrace.so.$(ABI_VERSION)
+-ifneq ($(findstring $(TARGET_ARCH) , hppa64 ia64 mips64 powerpc64 s390x sparc64 x86_64 ),)
++
++UCLIBC_LDSO_NAME := ld-uClibc
++ARCH_NATIVE_BIT := 32
++ifneq ($(findstring $(TARGET_ARCH) , hppa64 ia64 powerpc64 s390x sparc64 x86_64 ),)
+ UCLIBC_LDSO_NAME := ld64-uClibc
+ ARCH_NATIVE_BIT := 64
+ else
+-UCLIBC_LDSO_NAME := ld-uClibc
+-ARCH_NATIVE_BIT := 32
++ifeq ($(CONFIG_MIPS_N64_ABI),y)
++UCLIBC_LDSO_NAME := ld64-uClibc
++ARCH_NATIVE_BIT := 64
++endif
+ endif
++
+ UCLIBC_LDSO := $(UCLIBC_LDSO_NAME).so.$(ABI_VERSION)
+ NONSHARED_LIBNAME := uclibc_nonshared.a
+ libc := $(top_builddir)lib/$(SHARED_LIBNAME)
+@@ -170,7 +201,7 @@
+ if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \
+ then echo "-Wa,$(1)"; fi)
+ check_ld=$(shell \
+- if $(LD) $(1) -o /dev/null -b binary /dev/null > /dev/null 2>&1; \
++ if $(CC) $(LDFLAG-fuse-ld) -Wl,$(1) $(CFLAG_-nostdlib) -o /dev/null -Wl,-b,binary /dev/null > /dev/null 2>&1; \
+ then echo "$(1)"; fi)
+
+ # Use variable indirection here so that we can have variable
+@@ -221,6 +252,10 @@
+
+ ARFLAGS:=cr
+
++# Note: The check for -nostdlib has to be before all calls to check_ld
++$(eval $(call check-gcc-var,-nostdlib))
++LDFLAG-fuse-ld := $(filter -fuse-ld=%,$(EXTRA_UCLIBC_FLAGS))
++# deliberately not named CFLAG-fuse-ld since unchecked and from user
+
+ # Flags in OPTIMIZATION are used only for non-debug builds
+
+@@ -246,6 +281,7 @@
+ GCC_MAJOR_VER ?= $(word 1,$(GCC_VER))
+ #GCC_MINOR_VER ?= $(word 2,$(GCC_VER))
+
++ifneq ($(TARGET_ARCH),arc)
+ ifeq ($(GCC_MAJOR_VER),4)
+ # shrinks code, results are from 4.0.2
+ # 0.36%
+@@ -258,7 +294,7 @@
+ $(eval $(call check-gcc-var,-fno-strength-reduce))
+ OPTIMIZATION += $(CFLAG_-fno-strength-reduce)
+ endif
+-
++endif
+
+ # CPU_CFLAGS-y contain options which are not warnings,
+ # not include or library paths, and not optimizations.
+@@ -311,7 +347,9 @@
+ $(eval $(call check-gcc-var,-fomit-frame-pointer))
+ OPTIMIZATION += $(CFLAG_-fomit-frame-pointer)
+
+-ifeq ($(CONFIG_386)$(CONFIG_486)$(CONFIG_586)$(CONFIG_586MMX),y)
++ifeq ($(CONFIG_386)$(CONFIG_486)$(CONFIG_586),y)
++ # TODO: Change this to a gcc version check. This bug
++ # should be fixed with at least gcc-4.3.
+ # Non-SSE capable processor.
+ # NB: this may make SSE insns segfault!
+ # -O1 -march=pentium3, -Os -msse etc are known to be affected.
+@@ -330,18 +368,6 @@
+ # -falign-jumps: reachable only by a jump
+ # Generic: no alignment at all (smallest code)
+ GCC_FALIGN=$(call check_gcc,-falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1,-malign-jumps=1 -malign-loops=1)
+-ifeq ($(CONFIG_K7),y)
+- # Align functions to four bytes, use default for jumps and loops (why?)
+- GCC_FALIGN=$(call check_gcc,-falign-functions=4 -falign-labels=1,-malign-functions=4)
+-endif
+-ifeq ($(CONFIG_CRUSOE),y)
+- # Use compiler's default for functions, jumps and loops (why?)
+- GCC_FALIGN=$(call check_gcc,-falign-functions=0 -falign-labels=1,-malign-functions=0)
+-endif
+-ifeq ($(CONFIG_CYRIXIII),y)
+- # Use compiler's default for functions, jumps and loops (why?)
+- GCC_FALIGN=$(call check_gcc,-falign-functions=0 -falign-labels=1,-malign-functions=0)
+-endif
+ OPTIMIZATION+=$(GCC_FALIGN)
+
+ # Putting each function and data object into its own section
+@@ -366,22 +392,6 @@
+
+ CPU_LDFLAGS-y+=-m32
+ CPU_CFLAGS-y+=-m32
+- CPU_CFLAGS-$(CONFIG_386)+=-march=i386
+- CPU_CFLAGS-$(CONFIG_486)+=-march=i486
+- CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486
+- CPU_CFLAGS-$(CONFIG_586)+=-march=i586
+- CPU_CFLAGS-$(CONFIG_586MMX)+=$(call check_gcc,-march=pentium-mmx,-march=i586)
+- CPU_CFLAGS-$(CONFIG_686)+=-march=i686
+- CPU_CFLAGS-$(CONFIG_PENTIUMII)+=$(call check_gcc,-march=pentium2,-march=i686)
+- CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686)
+- CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686)
+- CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586)
+- CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-march=i686)
+- CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686
+- CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586)
+- CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586)
+- CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486)
+- CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686)
+ endif
+
+ ifeq ($(TARGET_ARCH),sparc)
+@@ -397,6 +407,12 @@
+ CPU_CFLAGS-$(COMPILE_IN_THUMB_MODE)+=-mthumb
+ endif
+
++ifeq ($(TARGET_ARCH),metag)
++ SYMBOL_PREFIX=_
++ CPU_CFLAGS-$(CONFIG_META_1_2)+=
++ CPU_CFLAGS-$(CONFIG_META_2_1)+=-Wa,-mcpu=metac21
++endif
++
+ ifeq ($(TARGET_ARCH),mips)
+ OPTIMIZATION+=-mno-split-addresses
+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1
+@@ -406,6 +422,7 @@
+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32
+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32R2)+=-march=mips32r2 -mtune=mips32r2
+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64R2)+=-mips64r2 -mtune=mips64r2
+ ifeq ($(strip $(ARCH_BIG_ENDIAN)),y)
+ CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64btsmip
+ CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32btsmip
+@@ -537,6 +554,12 @@
+ CPU_LDFLAGS-y += $(CPU_CFLAGS)
+ endif
+
++ifeq ($(TARGET_ARCH),arc)
++ CPU_CFLAGS-y += -mlock -mswape
++ CPU_CFLAGS-$(CONFIG_ARC_CPU_700) += -mA7
++ CPU_LDFLAGS-y += $(CPU_CFLAGS) -marclinux
++endif
++
+ $(eval $(call check-gcc-var,$(PIEFLAG_NAME)))
+ PIEFLAG := $(CFLAG_$(PIEFLAG_NAME))
+ ifeq ($(PIEFLAG),)
+@@ -546,11 +569,11 @@
+ # well as the LD PIE flag (below) because we can't rely on
+ # gcc passing -pie if we used -fPIE. We need to directly use -pie
+ # instead of -Wl,-pie as gcc picks up the wrong startfile/endfile
+-$(eval $(call cache-output-var,LDPIEFLAG,$(LD) --help 2>/dev/null | grep -q -- -pie && echo "-pie"))
++$(eval $(call cache-output-var,LDPIEFLAG,$(CC) -Wl$(comma)--help 2>/dev/null | grep -q -- -pie && echo "-pie"))
+
+ # Check for --as-needed support in linker
+ ifndef LD_FLAG_ASNEEDED
+-_LD_FLAG_ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -- --as-needed)
++_LD_FLAG_ASNEEDED:=$(shell $(CC) -Wl,--help 2>/dev/null | grep -- --as-needed)
+ ifneq ($(_LD_FLAG_ASNEEDED),)
+ export LD_FLAG_ASNEEDED:=--as-needed
+ endif
+@@ -574,11 +597,18 @@
+
+ # Check for AS_NEEDED support in linker script (binutils>=2.16.1 has it)
+ ifndef ASNEEDED
+-export ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -q -- --as-needed && echo "AS_NEEDED ( $(UCLIBC_LDSO) )" || echo "$(UCLIBC_LDSO)")
+-ifeq ($(UCLIBC_HAS_BACKTRACE),y)
++export ASNEEDED:=$(shell $(CC) -Wl,--help 2>/dev/null | grep -q -- --as-needed && echo "AS_NEEDED ( $(UCLIBC_LDSO) )" || echo "$(UCLIBC_LDSO)")
++
+ # Only used in installed libc.so linker script
+-UBACKTRACE_FULL_NAME := $(RUNTIME_PREFIX)lib/$(UBACKTRACE_DSO)
+-export UBACKTRACE_ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -q -- --as-needed && echo "AS_NEEDED ( $(UBACKTRACE_FULL_NAME) )" || echo "$(UBACKTRACE_FULL_NAME)")
++ifeq ($(UCLIBC_HAS_BACKTRACE),y)
++ifeq ($(HARDWIRED_ABSPATH),y)
++UBACKTRACE_FULL_NAME := $(subst //,/,$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UBACKTRACE_DSO))
++else
++UBACKTRACE_FULL_NAME := $(UBACKTRACE_DSO)
++endif
++export UBACKTRACE_ASNEEDED:=$(shell $(CC) -Wl,--help 2>/dev/null | grep -q -- --as-needed && \
++ echo "GROUP ( AS_NEEDED ( $(UBACKTRACE_FULL_NAME) ) )" || \
++ echo "GROUP ( $(UBACKTRACE_FULL_NAME) )")
+ else
+ export UBACKTRACE_ASNEEDED:=""
+ endif
+@@ -623,14 +653,17 @@
+ SSP_CFLAGS := $(SSP_DISABLE_FLAGS)
+ endif
+
+-$(eval $(call check-gcc-var,-nostdlib))
+-
+ # Collect all CFLAGS components
+-CFLAGS := -include $(top_srcdir)include/libc-symbols.h \
+- $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \
+- -nostdinc -I$(top_builddir)include -I$(top_srcdir)include -I. \
++CFLAGS := $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \
++ -nostdinc -I$(top_builddir)include \
++ -I$(top_srcdir)include -include libc-symbols.h \
++ -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) \
+ -I$(top_srcdir)libc/sysdeps/linux \
+- -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)
++ -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \
++ -I$(top_srcdir)ldso/include -I.
++ifneq ($(strip $(UCLIBC_EXTRA_CFLAGS)),"")
++CFLAGS += $(call qstrip,$(UCLIBC_EXTRA_CFLAGS))
++endif
+
+ # We need this to be checked within libc-symbols.h
+ ifneq ($(HAVE_SHARED),y)
+@@ -640,7 +673,7 @@
+ $(eval $(call check-ld-var,--warn-once))
+ $(eval $(call check-ld-var,--sort-common))
+ $(eval $(call check-ld-var,--discard-all))
+-LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared \
++LDFLAGS_NOSTRIP:=$(LDFLAG-fuse-ld) $(CPU_LDFLAGS-y) -shared \
+ -Wl,--warn-common $(CFLAG_-Wl--warn-once) -Wl,-z,combreloc
+ # binutils-2.16.1 warns about ignored sections, 2.16.91.0.3 and newer are ok
+ #$(eval $(call check-ld-var,--gc-sections))
+@@ -720,7 +753,7 @@
+ ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+ PTINC:= -I$(top_builddir)$(PTDIR) \
+ -I$(top_srcdir)$(PTDIR) \
+- $(if $(TARGET_ARCH),-I$(top_srcdir)$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/$(TARGET_SUBARCH)) \
++ $(if $(TARGET_SUBARCH),-I$(top_srcdir)$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/$(TARGET_SUBARCH)) \
+ -I$(top_srcdir)$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH) \
+ -I$(top_builddir)$(PTDIR)/sysdeps/$(TARGET_ARCH) \
+ -I$(top_srcdir)$(PTDIR)/sysdeps/$(TARGET_ARCH) \
+@@ -728,9 +761,7 @@
+ -I$(top_srcdir)$(PTDIR)/sysdeps/unix/sysv/linux \
+ -I$(top_srcdir)$(PTDIR)/sysdeps/pthread \
+ -I$(top_srcdir)$(PTDIR)/sysdeps/pthread/bits \
+- -I$(top_srcdir)$(PTDIR)/sysdeps/generic \
+- -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \
+- -I$(top_srcdir)ldso/include
++ -I$(top_srcdir)$(PTDIR)/sysdeps/generic
+ #
+ # Test for TLS if NPTL support was selected.
+ #
+@@ -763,13 +794,14 @@
+ PTINC :=
+ endif
+ CFLAGS += -I$(top_srcdir)libc/sysdeps/linux/common
+-CFLAGS += -I$(KERNEL_HEADERS)
+
+ #CFLAGS += -iwithprefix include-fixed -iwithprefix include
+ $(eval $(call cache-output-var,CC_IPREFIX,$(CC) -print-file-name=include))
+ CC_INC := -isystem $(dir $(CC_IPREFIX))include-fixed -isystem $(CC_IPREFIX)
+ CFLAGS += $(CC_INC)
+
++CFLAGS += -I$(KERNEL_HEADERS)
++
+ ifneq ($(DOASSERTS),y)
+ CFLAGS+=-DNDEBUG
+ endif
+@@ -786,7 +818,11 @@
+
+ LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y)
+ $(eval $(call cache-output-var,LIBGCC,$(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name))
++$(eval $(call cache-output-var,LIBGCC_EH,$(CC) $(LIBGCC_CFLAGS) -print-file-name=libgcc_eh.a))
++# with -O0 we (e.g. lockf) might end up with references to
++# _Unwind_Resume, so pull in gcc_eh in this case..
+ LIBGCC_DIR:=$(dir $(LIBGCC))
++LIBGCC += $(if $(DODEBUG),$(LIBGCC_EH))
+
+ # moved from libpthread/linuxthreads
+ ifeq ($(UCLIBC_CTOR_DTOR),y)
+@@ -794,4 +830,6 @@
+ SHARED_END_FILES:=$(LIBGCC_DIR)crtendS.o $(top_builddir)lib/crtn.o
+ endif
+
+-LOCAL_INSTALL_PATH := install_dir
++LOCAL_INSTALL_PATH := $(if $(O),$(O)/)install_dir
++
++PTHREAD_GENERATE_MANGLE ?= -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*\$$/\#define \1 \2/p"
+diff -Nur uClibc-0.9.33.2/test/API/Makefile uClibc-git/test/API/Makefile
+--- uClibc-0.9.33.2/test/API/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/API/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/args/Makefile uClibc-git/test/args/Makefile
+--- uClibc-0.9.33.2/test/args/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/args/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/assert/Makefile uClibc-git/test/assert/Makefile
+--- uClibc-0.9.33.2/test/assert/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/assert/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/build/Makefile uClibc-git/test/build/Makefile
+--- uClibc-0.9.33.2/test/build/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/build/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/crypt/Makefile uClibc-git/test/crypt/Makefile
+--- uClibc-0.9.33.2/test/crypt/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/crypt/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/ctype/Makefile uClibc-git/test/ctype/Makefile
+--- uClibc-0.9.33.2/test/ctype/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/ctype/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/dlopen/libA.c uClibc-git/test/dlopen/libA.c
+--- uClibc-0.9.33.2/test/dlopen/libA.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/dlopen/libA.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,7 @@
++extern void libB_func(void);
++
++void libA_func(void);
++void libA_func(void)
++{
++ libB_func();
++}
+diff -Nur uClibc-0.9.33.2/test/dlopen/libB.c uClibc-git/test/dlopen/libB.c
+--- uClibc-0.9.33.2/test/dlopen/libB.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/dlopen/libB.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,7 @@
++extern void libC_func(void);
++
++void libB_func(void);
++void libB_func(void)
++{
++ libC_func();
++}
+diff -Nur uClibc-0.9.33.2/test/dlopen/libC.c uClibc-git/test/dlopen/libC.c
+--- uClibc-0.9.33.2/test/dlopen/libC.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/dlopen/libC.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,30 @@
++#include <dlfcn.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++#define LIBNAME "libB.so"
++void _libC_fini(void);
++void _libC_fini(void)
++{
++ printf("libC_fini():finish - atexit()\n");
++}
++
++void libC_fini(void);
++void libC_fini(void)
++{
++ _libC_fini();
++}
++
++void libC_func(void);
++void libC_func(void)
++{
++ void *libB;
++
++ libB = dlopen(LIBNAME, RTLD_LAZY);
++ if (!libB) {
++ fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror());
++ exit(1);
++ }
++
++ atexit(libC_fini);
++}
+diff -Nur uClibc-0.9.33.2/test/dlopen/Makefile uClibc-git/test/dlopen/Makefile
+--- uClibc-0.9.33.2/test/dlopen/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/dlopen/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,11 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+-ifneq ($(HAVE_SHARED),y)
+-TESTS_DISABLED := test3
+-LDFLAGS_libtest.so := -lpthread
+-endif
+-
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/dlopen/Makefile.in uClibc-git/test/dlopen/Makefile.in
+--- uClibc-0.9.33.2/test/dlopen/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/dlopen/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -4,7 +4,13 @@
+ # rules need a little love to work with glibc ...
+ export UCLIBC_ONLY := 1
+
+-TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef dlafk dladdr
++TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef dlafk dladdr \
++ testscope
++
++ifneq ($(HAVE_SHARED),y)
++TESTS_DISABLED := test3
++LDFLAGS_libtest.so := -lpthread
++endif
+
+ CFLAGS_dltest := -DLIBNAME="\"./libtest.so\""
+ CFLAGS_dltest2 := -DLIBNAME="\"./libtest3.so\""
+@@ -18,22 +24,42 @@
+ LDFLAGS_test2 := -ldl
+ LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,.
+ LDFLAGS_dladdr := -ldl
++LDFLAGS_testscope:= -ldl
+
+ DEBUG_LIBS := X
+ WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)"
+
++# Build libC.so without -mprefergot compilation flag to force a
++# R_SH_JMP_SLOT relocation instead of R_SH_GLOB_DAT for _libC_fini. This is
++# needed to resolve the _libC_fini symbol when used (by libC.so destructor),
++# whereas with GLOB_DAT relocation the resolution happens in the GOT entry
++# when the libC is loaded, for the same reason remove also the "-z now"
++# linker flag.
++# These are needed to spot the issue test case want raise.
++
++ifeq ($(TARGET_ARCH),sh)
++CFLAGS-OMIT-libC.c = -mprefergot
++endif
++LDFLAGS-OMIT-libC.c = -Wl,-z,now
++
+ dltest: libtest.so
+ dltest2: libtest3.so
+ dlstatic: libstatic.so
+ dlundef: libundef.so
+ dlafk: libafk.so
++testscope:libA.so
+ libafk.so: libafk-temp.so
+ LDFLAGS_libafk.so := ./libafk-temp.so -Wl,-rpath,.
+ test1: libtest1.so
+ test2: libtest1.so libtest2.so
+ test3: libtest1.so libtest2.so
+ libtest1.so: libtest2.so
++libB.so: libC.so
++libA.so: libB.so
+ LDFLAGS_libtest.so := -lpthread
+ LDFLAGS_libtest1.so := ./libtest2.so -Wl,-rpath,.
+ LDFLAGS_libtest2.so := -Wl,-rpath,.
+ LDFLAGS_libtest3.so := -lpthread -Wl,-rpath,.
++LDFLAGS_libC.so := -ldl
++LDFLAGS_libB.so := ./libC.so -Wl,-rpath,.
++LDFLAGS_libA.so := ./libB.so -Wl,-rpath,.
+diff -Nur uClibc-0.9.33.2/test/dlopen/testscope.c uClibc-git/test/dlopen/testscope.c
+--- uClibc-0.9.33.2/test/dlopen/testscope.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/dlopen/testscope.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,29 @@
++#include <dlfcn.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++#define LIBNAME "libA.so"
++int main(int argc, char **argv)
++{
++ void *libA;
++ void (*libAfn)(void);
++ char *error;
++
++ libA = dlopen(LIBNAME, RTLD_LAZY);
++ if (!libA) {
++ fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror());
++ exit(1);
++ }
++
++ libAfn = dlsym(libA, "libA_func");
++ if ((error = dlerror()) != NULL) {
++ fprintf(stderr, "Could not locate symbol 'libA_func': %s\n", error);
++ exit(1);
++ }
++
++ libAfn();
++
++ dlclose(libA);
++
++ return EXIT_SUCCESS;
++}
+diff -Nur uClibc-0.9.33.2/test/.gitignore uClibc-git/test/.gitignore
+--- uClibc-0.9.33.2/test/.gitignore 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/.gitignore 2014-02-03 12:32:57.000000000 +0100
+@@ -29,13 +29,19 @@
+ dlopen/dlundef
+ dlopen/libafk.so
+ dlopen/libafk-temp.so
++dlopen/libA.so
++dlopen/libB.so
++dlopen/libC.so
+ dlopen/libstatic.so
+ dlopen/libtest[123].so
+ dlopen/libtest.so
+ dlopen/libundef.so
+ dlopen/test[1-3]
++dlopen/testscope
+ inet/bug-if1
+ inet/gethost_r-align
++inet/gethostid
++inet/getnetent
+ inet/if_nameindex
+ inet/tst-aton
+ inet/tst-ether_aton
+@@ -43,13 +49,28 @@
+ inet/tst-ethers-line
+ inet/tst-network
+ inet/tst-ntoa
+-inet/gethostid
+-inet/getnetent
++inet/tst-res
++inet/tst-sock-nonblock
+ librt/shmtest
+ locale/bug-iconv-trans
++locale/bug-usesetlocale
++locale/C
+ locale/collate-test
+ locale/dump-ctype
+ locale/gen-unicode-ctype
++locale/show-ucs-data
++locale/tst-digits
++locale/tst-langinfo
++locale/tst-mbswcs[1-6]
++locale/tst_nl_langinfo
++locale/tst-numeric
++locale/tst-setlocale
++locale/tst-sscanf
++locale/tst-trans
++locale/tst-wctype
++locale/tst-xlocale1
++locale/tst-xlocale2
++locale/xfrm-test
+ locale-mbwc/tst_iswalnum
+ locale-mbwc/tst_iswalpha
+ locale-mbwc/tst_iswcntrl
+@@ -100,16 +121,6 @@
+ locale-mbwc/tst_wctype
+ locale-mbwc/tst_wcwidth
+ locale-mbwc/tst2_mbrtowc
+-locale/show-ucs-data
+-locale/tst-digits
+-locale/tst-langinfo
+-locale/tst-mbswcs[1-6]
+-locale/tst_nl_langinfo
+-locale/tst-numeric
+-locale/tst-setlocale
+-locale/tst-sscanf
+-locale/tst-trans
+-locale/tst-wctype
+ malloc/malloc
+ malloc/mallocbug
+ malloc/malloc-standard-alignment
+@@ -146,8 +157,11 @@
+ misc/seek
+ misc/sem
+ misc/stdarg
++misc/tst-inotify
+ misc/tst-scandir
+ misc/tst-seekdir
++misc/tst-statfs
++misc/tst-statvfs
+ misc/tst-utmp
+ mmap/mmap
+ mmap/mmap2
+@@ -243,6 +257,7 @@
+ signal/signal
+ signal/tst-raise
+ signal/tst-signal
++signal/tst-signalfd
+ signal/tst-sigset
+ signal/tst-sigsimple
+ silly/hello
+@@ -250,10 +265,12 @@
+ stat/memcmp-stat
+ stat/stat
+ stat/stat64
++stat/stat-loop256
+ stdio/64bit
+ stdio/fclose-loop
+ stdlib/ptytest
+ stdlib/qsort
++stdlib/testarc4random
+ stdlib/testatexit
+ stdlib/test-canon
+ stdlib/test-canon2
+@@ -282,6 +299,7 @@
+ time/tst-mktime
+ time/tst-mktime3
+ time/tst-strptime2
++time/tst-timerfd
+ time/tst_wcsftime
+ tls/tst-tls[1-9]
+ tls/tst-tls1[0-8]
+@@ -302,6 +320,8 @@
+ unistd/getopt
+ unistd/getopt_long
+ unistd/tstgetopt
++unistd/tst-posix_fallocate
++unistd/tst-posix_fallocate64
+ unistd/tst-preadwrite
+ unistd/tst-preadwrite64
+ unistd/vfork
+diff -Nur uClibc-0.9.33.2/test/inet/bug-if1.c uClibc-git/test/inet/bug-if1.c
+--- uClibc-0.9.33.2/test/inet/bug-if1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/inet/bug-if1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <limits.h>
+diff -Nur uClibc-0.9.33.2/test/inet/gethostid.c uClibc-git/test/inet/gethostid.c
+--- uClibc-0.9.33.2/test/inet/gethostid.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/inet/gethostid.c 2014-02-03 12:32:57.000000000 +0100
+@@ -1,6 +1,6 @@
+ #include <unistd.h>
+ #include <stdio.h>
+ int main(void) {
+- printf("hostid=%d\n", gethostid());
++ printf("hostid=%ld\n", gethostid());
+ return 0;
+ }
+diff -Nur uClibc-0.9.33.2/test/inet/getnetent.c uClibc-git/test/inet/getnetent.c
+--- uClibc-0.9.33.2/test/inet/getnetent.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/inet/getnetent.c 2014-02-03 12:32:57.000000000 +0100
+@@ -8,7 +8,7 @@
+ while (net->n_net && !((net->n_net >> 24) & 0xff)) {
+ net->n_net <<= 8;
+ }
+- printf("%lu.%lu.%lu.%lu\n",
++ printf("%u.%u.%u.%u\n",
+ (net->n_net >> 24) & 0xff, (net->n_net >> 16) & 0xff,
+ (net->n_net >> 8) & 0xff, net->n_net & 0xff);
+ }
+diff -Nur uClibc-0.9.33.2/test/inet/Makefile uClibc-git/test/inet/Makefile
+--- uClibc-0.9.33.2/test/inet/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/inet/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/inet/Makefile.in uClibc-git/test/inet/Makefile.in
+--- uClibc-0.9.33.2/test/inet/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/inet/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -7,5 +7,11 @@
+ endif
+
+ ifeq ($(UCLIBC_HAS_SOCKET)$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6),)
+-TESTS_DISABLED := tst-ether_aton tst-ethers tst-ethers-line
++TESTS_DISABLED += tst-ether_aton tst-ethers tst-ethers-line
++endif
++
++ifeq ($(UCLIBC_HAS_RESOLVER_SUPPORT),)
++TESTS_DISABLED += tst-res
++else
++LDFLAGS_tst-res_glibc := -lresolv # assume it's glibc or somebody with that lib
+ endif
+diff -Nur uClibc-0.9.33.2/test/inet/tst-network.c uClibc-git/test/inet/tst-network.c
+--- uClibc-0.9.33.2/test/inet/tst-network.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/inet/tst-network.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <sys/socket.h>
+diff -Nur uClibc-0.9.33.2/test/inet/tst-res.c uClibc-git/test/inet/tst-res.c
+--- uClibc-0.9.33.2/test/inet/tst-res.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/inet/tst-res.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,44 @@
++#include <stdlib.h>
++#include <assert.h>
++#include <sys/types.h>
++#include <netinet/in.h>
++#include <arpa/nameser.h>
++#include <resolv.h>
++#include <netdb.h>
++
++int main(int argc, char **argv)
++{
++ int r;
++ struct __res_state state;
++
++ r = res_ninit(&state);
++ if (r) {
++ herror("ninit");
++ abort();
++ }
++ r = res_init();
++ if (r) {
++ herror("init");
++ abort();
++ }
++
++#ifdef __UCLIBC_HAS_BSD_RES_CLOSE__
++ res_close();
++#endif
++#ifdef __UCLIBC__
++ /* assume there is at least one resolver configured */
++ assert (state._u._ext.nscount > 0);
++#else
++ assert (state._u._ext.nscount == 0);
++#endif
++ assert (state.options & RES_INIT);
++ res_nclose(&state);
++#ifdef __UCLIBC__
++ /* We wipe the whole thing */
++ assert ((state.options & RES_INIT) == 0);
++#endif
++ assert (state._u._ext.nscount == 0);
++
++ return 0;
++}
++
+diff -Nur uClibc-0.9.33.2/test/inet/tst-sock-nonblock.c uClibc-git/test/inet/tst-sock-nonblock.c
+--- uClibc-0.9.33.2/test/inet/tst-sock-nonblock.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/inet/tst-sock-nonblock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,53 @@
++/* vi: set sw=4 ts=4 sts=4: */
++/*
++ * Nonblocking socket test for uClibc
++ * Copyright (C) 2012 by Kevin Cernekee <cernekee@gmail.com>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <errno.h>
++#include <error.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++#include <sys/fcntl.h>
++
++static int
++do_test(void)
++{
++ int fd, ret, result = 0;
++ struct sockaddr_un sa;
++ char buf;
++
++ fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
++ if (fd < 0) {
++ perror("socket()");
++ result = 1;
++ }
++
++ memset(&sa, 0, sizeof(sa));
++ sa.sun_family = AF_UNIX;
++ strcpy(sa.sun_path, "socktest");
++ unlink("socktest");
++ if (bind(fd, (const struct sockaddr *)&sa, sizeof(sa)) < 0) {
++ perror("bind()");
++ result = 1;
++ }
++
++ ret = read(fd, &buf, sizeof(buf));
++ if (ret != -1 || errno != EAGAIN) {
++ error(0, 0, "Nonblocking read returned %d", ret);
++ result = 1;
++ }
++
++ return result;
++}
++
++#define TIMEOUT 5
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -Nur uClibc-0.9.33.2/test/librt/Makefile uClibc-git/test/librt/Makefile
+--- uClibc-0.9.33.2/test/librt/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/librt/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/locale/collate-test.c uClibc-git/test/locale/collate-test.c
+--- uClibc-0.9.33.2/test/locale/collate-test.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/collate-test.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <ctype.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/locale/dump-ctype.c uClibc-git/test/locale/dump-ctype.c
+--- uClibc-0.9.33.2/test/locale/dump-ctype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/dump-ctype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Usage example:
+ $ dump-ctype de_DE.UTF-8
+diff -Nur uClibc-0.9.33.2/test/locale/gen-unicode-ctype.c uClibc-git/test/locale/gen-unicode-ctype.c
+--- uClibc-0.9.33.2/test/locale/gen-unicode-ctype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/gen-unicode-ctype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Usage example:
+ $ gen-unicode /usr/local/share/Unidata/UnicodeData.txt 3.1
+diff -Nur uClibc-0.9.33.2/test/locale/Makefile uClibc-git/test/locale/Makefile
+--- uClibc-0.9.33.2/test/locale/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/locale/tst-C-locale.c uClibc-git/test/locale/tst-C-locale.c
+--- uClibc-0.9.33.2/test/locale/tst-C-locale.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-C-locale.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <ctype.h>
+ #include <langinfo.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-ctype.c uClibc-git/test/locale/tst-ctype.c
+--- uClibc-0.9.33.2/test/locale/tst-ctype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-ctype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <ctype.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-digits.c uClibc-git/test/locale/tst-digits.c
+--- uClibc-0.9.33.2/test/locale/tst-digits.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-digits.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <ctype.h>
+ #include <langinfo.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-fmon.c uClibc-git/test/locale/tst-fmon.c
+--- uClibc-0.9.33.2/test/locale/tst-fmon.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-fmon.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-langinfo.c uClibc-git/test/locale/tst-langinfo.c
+--- uClibc-0.9.33.2/test/locale/tst-langinfo.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-langinfo.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <langinfo.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-langinfo.input uClibc-git/test/locale/tst-langinfo.input
+--- uClibc-0.9.33.2/test/locale/tst-langinfo.input 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-langinfo.input 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ # Lesser General Public License for more details.
+
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+
+ # Run the test program.
+diff -Nur uClibc-0.9.33.2/test/locale/tst-mbswcs1.c uClibc-git/test/locale/tst-mbswcs1.c
+--- uClibc-0.9.33.2/test/locale/tst-mbswcs1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-mbswcs1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-mbswcs2.c uClibc-git/test/locale/tst-mbswcs2.c
+--- uClibc-0.9.33.2/test/locale/tst-mbswcs2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-mbswcs2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-mbswcs3.c uClibc-git/test/locale/tst-mbswcs3.c
+--- uClibc-0.9.33.2/test/locale/tst-mbswcs3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-mbswcs3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-mbswcs4.c uClibc-git/test/locale/tst-mbswcs4.c
+--- uClibc-0.9.33.2/test/locale/tst-mbswcs4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-mbswcs4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-mbswcs5.c uClibc-git/test/locale/tst-mbswcs5.c
+--- uClibc-0.9.33.2/test/locale/tst-mbswcs5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-mbswcs5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-mbswcs6.c uClibc-git/test/locale/tst-mbswcs6.c
+--- uClibc-0.9.33.2/test/locale/tst-mbswcs6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-mbswcs6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-numeric.c uClibc-git/test/locale/tst-numeric.c
+--- uClibc-0.9.33.2/test/locale/tst-numeric.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-numeric.c 2014-02-03 12:32:57.000000000 +0100
+@@ -16,9 +16,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-rpmatch.c uClibc-git/test/locale/tst-rpmatch.c
+--- uClibc-0.9.33.2/test/locale/tst-rpmatch.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-rpmatch.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <locale.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-trans.c uClibc-git/test/locale/tst-trans.c
+--- uClibc-0.9.33.2/test/locale/tst-trans.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-trans.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <locale.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/locale/tst-wctype.c uClibc-git/test/locale/tst-wctype.c
+--- uClibc-0.9.33.2/test/locale/tst-wctype.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/tst-wctype.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <error.h>
+ #include <locale.h>
+diff -Nur uClibc-0.9.33.2/test/locale/xfrm-test.c uClibc-git/test/locale/xfrm-test.c
+--- uClibc-0.9.33.2/test/locale/xfrm-test.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale/xfrm-test.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <ctype.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/locale-mbwc/Makefile uClibc-git/test/locale-mbwc/Makefile
+--- uClibc-0.9.33.2/test/locale-mbwc/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/locale-mbwc/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/Makefile uClibc-git/test/Makefile
+--- uClibc-0.9.33.2/test/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -5,6 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
++top_srcdir=../
+ top_builddir=../
+ include Rules.mak
+
+@@ -46,9 +47,9 @@
+
+ run: compile subdirs_run
+
+-compile: $(top_builddir)/$(LOCAL_INSTALL_PATH) subdirs_compile
++compile: $(top_builddir)$(LOCAL_INSTALL_PATH) subdirs_compile
+
+-$(top_builddir)/$(LOCAL_INSTALL_PATH):
++$(top_builddir)$(LOCAL_INSTALL_PATH):
+ $(Q)$(MAKE) -C $(top_builddir) $(LOCAL_INSTALL_PATH)
+
+ tags:
+@@ -62,13 +63,16 @@
+ subdirs_clean: $(patsubst %, _dirclean_%, $(ALL_SUBDIRS))
+
+ $(patsubst %, _dir_%, $(DIRS)) : dummy
+- $(Q)$(MAKE) -C $(patsubst _dir_%, %, $@)
++ $(Q)$(MAKE) -C $(patsubst _dir_%, %, $@) \
++ KCONFIG_CONFIG=$(KCONFIG_CONFIG)
+
+ $(patsubst %, _dirrun_%, $(DIRS)) : dummy
+- $(Q)$(MAKE) -C $(patsubst _dirrun_%, %, $@) run
++ $(Q)$(MAKE) -C $(patsubst _dirrun_%, %, $@) run \
++ KCONFIG_CONFIG=$(KCONFIG_CONFIG)
+
+ $(patsubst %, _dircompile_%, $(DIRS)) : dummy
+- $(Q)$(MAKE) -C $(patsubst _dircompile_%, %, $@) compile
++ $(Q)$(MAKE) -C $(patsubst _dircompile_%, %, $@) compile \
++ KCONFIG_CONFIG=$(KCONFIG_CONFIG)
+
+ $(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) : dummy
+ $(Q)$(MAKE) -C $(patsubst _dirclean_%, %, $@) clean
+diff -Nur uClibc-0.9.33.2/test/malloc/Makefile uClibc-git/test/malloc/Makefile
+--- uClibc-0.9.33.2/test/malloc/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/malloc/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/malloc/Makefile.in uClibc-git/test/malloc/Makefile.in
+--- uClibc-0.9.33.2/test/malloc/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/malloc/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -2,3 +2,11 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ TESTS_DISABLED := time_malloc
++
++ifneq ($(UCLIBC_SUSV2_LEGACY),y)
++TESTS_DISABLED += tst-valloc
++endif
++
++ifneq ($(UCLIBC_HAS_OBSTACK),y)
++TESTS_DISABLED += tst-obstack
++endif
+diff -Nur uClibc-0.9.33.2/test/malloc/tst-calloc.c uClibc-git/test/malloc/tst-calloc.c
+--- uClibc-0.9.33.2/test/malloc/tst-calloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/malloc/tst-calloc.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <limits.h>
+diff -Nur uClibc-0.9.33.2/test/malloc/tst-malloc.c uClibc-git/test/malloc/tst-malloc.c
+--- uClibc-0.9.33.2/test/malloc/tst-malloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/malloc/tst-malloc.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <malloc.h>
+diff -Nur uClibc-0.9.33.2/test/malloc/tst-mcheck.c uClibc-git/test/malloc/tst-mcheck.c
+--- uClibc-0.9.33.2/test/malloc/tst-mcheck.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/malloc/tst-mcheck.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/malloc/tst-obstack.c uClibc-git/test/malloc/tst-obstack.c
+--- uClibc-0.9.33.2/test/malloc/tst-obstack.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/malloc/tst-obstack.c 2014-02-03 12:32:57.000000000 +0100
+@@ -1,4 +1,8 @@
+-/* Test case by Alexandre Duret-Lutz <duret_g@epita.fr>. */
++/* Test case by Alexandre Duret-Lutz <duret_g@epita.fr>.
++ * test_obstack_printf() added by Anthony G. Basile <blueness.gentoo.org>.
++ */
++
++#include <features.h>
+ #include <obstack.h>
+ #include <stdint.h>
+ #include <stdio.h>
+@@ -26,7 +30,7 @@
+ }
+
+ int
+-main (void)
++test_obstack_alloc (void)
+ {
+ int result = 0;
+ int align = 2;
+@@ -62,3 +66,39 @@
+
+ return result;
+ }
++
++int
++test_obstack_printf (void)
++{
++ int result = 0;
++ int n;
++ char *s;
++ struct obstack ob;
++
++ obstack_init (&ob);
++
++ n = obstack_printf (&ob, "%s%d%c", "testing 1 ... 2 ... ", 3, '\n');
++ result |= (n != 22);
++ printf("obstack_printf => %d\n", n);
++
++ n = obstack_printf (&ob, "%s%d%c", "testing 3 ... 2 ... ", 1, '\0');
++ result |= (n != 22);
++ printf("obstack_printf => %d\n", n);
++
++ s = obstack_finish (&ob);
++ printf("obstack_printf => %s\n", s);
++ obstack_free (&ob, NULL);
++
++ return result;
++}
++
++int
++main (void)
++{
++ int result = 0;
++
++ result |= test_obstack_alloc();
++ result |= test_obstack_printf();
++
++ return result;
++}
+diff -Nur uClibc-0.9.33.2/test/math/basic-test.c uClibc-git/test/math/basic-test.c
+--- uClibc-0.9.33.2/test/math/basic-test.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/basic-test.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _ISOC99_SOURCE
+
+@@ -65,11 +64,6 @@
+ check (#FLOAT " !isnan (1)", !(isnan (one_var))); \
+ check (#FLOAT " !isnan (inf)", !(isnan (Inf_var))); \
+ \
+- check (#FLOAT " inf == inf", Inf_var == Inf_var); \
+- check (#FLOAT " -inf == -inf", -Inf_var == -Inf_var); \
+- check (#FLOAT " inf != -inf", Inf_var != -Inf_var); \
+- check (#FLOAT " NaN != NaN", NaN_var != NaN_var); \
+- \
+ /* \
+ the same tests but this time with NAN from <bits/nan.h> \
+ NAN is a double const \
+@@ -78,7 +72,6 @@
+ check (#FLOAT " isnan (-NAN)", isnan (-NAN)); \
+ check (#FLOAT " !isinf (NAN)", !(isinf (NAN))); \
+ check (#FLOAT " !isinf (-NAN)", !(isinf (-NAN))); \
+- check (#FLOAT " NAN != NAN", NAN != NAN); \
+ \
+ /* \
+ And again with the value returned by the `nan' function. \
+@@ -89,6 +82,48 @@
+ check (#FLOAT " !isinf (-NAN)", !(isinf (-NANFUNC ("")))); \
+ check (#FLOAT " NAN != NAN", NANFUNC ("") != NANFUNC ("")); \
+ \
++ /* test if HUGE_VALx is ok */ \
++ x1 = HUGEVAL; \
++ check (#FLOAT " isinf (HUGE_VALx) == +1", isinf (x1) == +1); \
++ x1 = - HUGEVAL; \
++ check (#FLOAT " isinf (-HUGE_VALx) == -1", isinf (x1) == -1); \
++}
++#ifndef DO_C99_MATH
++# undef TEST_FUNC
++# define TEST_FUNC(NAME, FLOAT, NANFUNC, EPSILON, HUGEVAL) \
++static void \
++NAME(void) \
++{ /* nothing */ }
++#endif
++
++#define TEST_VAL(NAME, FLOAT, NANFUNC, EPSILON, HUGEVAL) \
++static void \
++NAME (void) \
++{ \
++ /* Variables are declared volatile to forbid some compiler \
++ optimizations. */ \
++ volatile FLOAT Inf_var, NaN_var, zero_var, one_var; \
++ FLOAT x1, x2; \
++ \
++ zero_var = 0.0; \
++ one_var = 1.0; \
++ NaN_var = zero_var/zero_var; \
++ Inf_var = one_var / zero_var; \
++ \
++ (void) &zero_var; \
++ (void) &one_var; \
++ (void) &NaN_var; \
++ (void) &Inf_var; \
++ \
++ \
++ check (#FLOAT " inf == inf", Inf_var == Inf_var); \
++ check (#FLOAT " -inf == -inf", -Inf_var == -Inf_var); \
++ check (#FLOAT " inf != -inf", Inf_var != -Inf_var); \
++ check (#FLOAT " NaN != NaN", NaN_var != NaN_var); \
++ \
++ check (#FLOAT " NAN != NAN", NAN != NAN); \
++ \
++ \
+ /* test if EPSILON is ok */ \
+ x1 = 1.0; \
+ x2 = x1 + EPSILON; \
+@@ -98,27 +133,28 @@
+ x2 = x1 - EPSILON; \
+ check (#FLOAT " 1 != 1-EPSILON", x1 != x2); \
+ \
+- /* test if HUGE_VALx is ok */ \
+- x1 = HUGEVAL; \
+- check (#FLOAT " isinf (HUGE_VALx) == +1", isinf (x1) == +1); \
+- x1 = - HUGEVAL; \
+- check (#FLOAT " isinf (-HUGE_VALx) == -1", isinf (x1) == -1); \
+ }
+
+-TEST_FUNC (float_test, float, nanf, FLT_EPSILON, HUGE_VALF)
+-TEST_FUNC (double_test, double, nan, DBL_EPSILON, HUGE_VAL)
++TEST_VAL (float_test_value, float, nanf, FLT_EPSILON, HUGE_VALF)
++TEST_FUNC (float_test_call, float, nanf, FLT_EPSILON, HUGE_VALF)
++TEST_VAL (double_test_value, double, nan, DBL_EPSILON, HUGE_VAL)
++TEST_FUNC (double_test_call, double, nan, DBL_EPSILON, HUGE_VAL)
+ #ifndef NO_LONG_DOUBLE
+-TEST_FUNC (ldouble_test, long double, nanl, LDBL_EPSILON, HUGE_VALL)
++TEST_VAL (ldouble_test_value, long double, nanl, LDBL_EPSILON, HUGE_VALL)
++TEST_FUNC (ldouble_test_call, long double, nanl, LDBL_EPSILON, HUGE_VALL)
+ #endif
+
+ int
+ main (void)
+ {
+- float_test ();
+- double_test ();
++ float_test_value ();
++ float_test_call ();
++ double_test_value ();
++ double_test_call ();
+
+ #ifndef NO_LONG_DOUBLE
+- ldouble_test ();
++ ldouble_test_value ();
++ ldouble_test_call ();
+ #endif
+
+ return errors != 0;
+diff -Nur uClibc-0.9.33.2/test/math/gen-libm-test.pl uClibc-git/test/math/gen-libm-test.pl
+--- uClibc-0.9.33.2/test/math/gen-libm-test.pl 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/gen-libm-test.pl 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ # Lesser General Public License for more details.
+
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+ # This file needs to be tidied up
+ # Note that functions and tests share the same namespace.
+diff -Nur uClibc-0.9.33.2/test/math/libm-test.inc uClibc-git/test/math/libm-test.inc
+--- uClibc-0.9.33.2/test/math/libm-test.inc 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/libm-test.inc 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Part of testsuite for libm.
+
+diff -Nur uClibc-0.9.33.2/test/math/libm-test-ulps-sh uClibc-git/test/math/libm-test-ulps-sh
+--- uClibc-0.9.33.2/test/math/libm-test-ulps-sh 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/math/libm-test-ulps-sh 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,1094 @@
++# Begin of automatic generation
++
++# asin
++Test "asin (-0.5) == -pi/6":
++float: 2
++ifloat: 2
++Test "asin (0.5) == pi/6":
++float: 2
++ifloat: 2
++Test "asin (0.7) == 0.7753974966107530637":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++# atan2
++Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
++float: 3
++ifloat: 3
++Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267":
++float: 3
++ifloat: 3
++Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736":
++float: 4
++ifloat: 4
++
++# atanh
++Test "atanh (0.7) == 0.8673005276940531944":
++double: 1
++idouble: 1
++
++# cabs
++Test "cabs (-0.7 + 12.4 i) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "cabs (-0.7 - 12.4 i) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "cabs (-12.4 + 0.7 i) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "cabs (-12.4 - 0.7 i) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "cabs (0.7 + 1.2 i) == 1.3892443989449804508432547041028554":
++double: 1
++idouble: 1
++Test "cabs (0.7 + 12.4 i) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++
++# cacos
++Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
++float: 1
++ifloat: 1
++
++# cacosh
++Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
++double: 1
++float: 7
++idouble: 1
++ifloat: 7
++Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
++double: 1
++float: 3
++idouble: 1
++ifloat: 3
++Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# casin
++Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
++double: 3
++float: 2
++idouble: 3
++ifloat: 2
++Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
++float: 1
++ifloat: 1
++
++# casinh
++Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
++double: 5
++float: 1
++idouble: 5
++ifloat: 1
++Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
++double: 3
++float: 6
++idouble: 3
++ifloat: 6
++Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
++double: 1
++idouble: 1
++Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
++float: 1
++ifloat: 1
++
++# catan
++Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
++float: 3
++ifloat: 3
++Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
++float: 4
++ifloat: 4
++Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
++double: 1
++idouble: 1
++
++# catanh
++Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
++double: 4
++idouble: 4
++Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
++float: 4
++ifloat: 4
++Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
++double: 1
++float: 6
++idouble: 1
++ifloat: 6
++
++# cbrt
++Test "cbrt (-27.0) == -3.0":
++double: 1
++idouble: 1
++Test "cbrt (0.970299) == 0.99":
++double: 1
++idouble: 1
++
++# ccos
++Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
++float: 1
++ifloat: 1
++Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
++double: 1
++idouble: 1
++Test "Imaginary part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
++double: 1
++idouble: 1
++
++# ccosh
++Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
++float: 1
++ifloat: 1
++Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "Imaginary part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
++double: 1
++idouble: 1
++
++# cexp
++Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
++float: 1
++ifloat: 1
++Test "Real part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i":
++float: 1
++ifloat: 1
++
++# clog
++Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
++double: 1
++float: 3
++idouble: 1
++ifloat: 3
++
++# clog10
++Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
++double: 1
++float: 5
++idouble: 1
++ifloat: 5
++Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Real part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
++double: 1
++idouble: 1
++Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
++float: 1
++ifloat: 1
++
++# cos
++Test "cos (0.7) == 0.7648421872844884262":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "cos (M_PI_6l * 2.0) == 0.5":
++double: 1
++float: 0.5
++idouble: 1
++ifloat: 0.5
++Test "cos (M_PI_6l * 4.0) == -0.5":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "cos (pi/2) == 0":
++double: 0.2758
++float: 0.3667
++idouble: 0.2758
++ifloat: 0.3667
++
++# cpow
++Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
++double: 1
++float: 4
++idouble: 1
++ifloat: 4
++Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
++float: 2
++ifloat: 2
++Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
++double: 1.1031
++float: 1.5
++idouble: 1.1031
++ifloat: 1.5
++
++# csin
++Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i":
++float: 1
++ifloat: 1
++
++# csinh
++Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
++double: 1
++idouble: 1
++Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
++float: 1
++ifloat: 1
++
++# csqrt
++Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
++float: 1
++ifloat: 1
++Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
++float: 1
++ifloat: 1
++Test "Real part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
++float: 1
++ifloat: 1
++
++# ctan
++Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
++double: 1
++idouble: 1
++Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# ctanh
++Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
++float: 1
++ifloat: 1
++Test "Real part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "Imaginary part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++# erfc
++Test "erfc (0.7) == 0.32219880616258152702":
++double: 1
++idouble: 1
++Test "erfc (1.2) == 0.089686021770364619762":
++double: 2
++float: 2
++idouble: 2
++ifloat: 2
++Test "erfc (2.0) == 0.0046777349810472658379":
++double: 1
++idouble: 1
++Test "erfc (4.1) == 0.67000276540848983727e-8":
++double: 24
++float: 12
++idouble: 24
++ifloat: 12
++
++# exp10
++Test "exp10 (-1) == 0.1":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "exp10 (0.7) == 5.0118723362727228500":
++float: 1
++ifloat: 1
++Test "exp10 (3) == 1000":
++double: 6
++float: 2
++idouble: 6
++ifloat: 2
++
++# expm1
++Test "expm1 (1) == M_El - 1.0":
++float: 1
++ifloat: 1
++
++# fmod
++Test "fmod (-6.5, -2.3) == -1.9":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "fmod (-6.5, 2.3) == -1.9":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "fmod (6.5, -2.3) == 1.9":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "fmod (6.5, 2.3) == 1.9":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++# hypot
++Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (0.7, 1.2) == 1.3892443989449804508432547041028554":
++double: 1
++idouble: 1
++Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++
++# j0
++Test "j0 (10.0) == -0.24593576445134833520":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "j0 (2.0) == 0.22389077914123566805":
++float: 2
++ifloat: 2
++Test "j0 (8.0) == 0.17165080713755390609":
++float: 1
++ifloat: 1
++
++# j1
++Test "j1 (10.0) == 0.043472746168861436670":
++float: 2
++ifloat: 2
++Test "j1 (2.0) == 0.57672480775687338720":
++double: 1
++idouble: 1
++Test "j1 (8.0) == 0.23463634685391462438":
++double: 1
++idouble: 1
++
++# jn
++Test "jn (0, 10.0) == -0.24593576445134833520":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "jn (0, 2.0) == 0.22389077914123566805":
++float: 2
++ifloat: 2
++Test "jn (0, 8.0) == 0.17165080713755390609":
++float: 1
++ifloat: 1
++Test "jn (1, 10.0) == 0.043472746168861436670":
++float: 2
++ifloat: 2
++Test "jn (1, 2.0) == 0.57672480775687338720":
++double: 1
++idouble: 1
++Test "jn (1, 8.0) == 0.23463634685391462438":
++double: 1
++idouble: 1
++Test "jn (10, 0.1) == 0.26905328954342155795e-19":
++double: 6
++float: 4
++idouble: 6
++ifloat: 4
++Test "jn (10, 0.7) == 0.75175911502153953928e-11":
++double: 3
++float: 1
++idouble: 3
++ifloat: 1
++Test "jn (10, 10.0) == 0.20748610663335885770":
++double: 4
++float: 3
++idouble: 4
++ifloat: 3
++Test "jn (10, 2.0) == 0.25153862827167367096e-6":
++float: 4
++ifloat: 4
++Test "jn (3, 0.1) == 0.000020820315754756261429":
++double: 1
++idouble: 1
++Test "jn (3, 0.7) == 0.0069296548267508408077":
++float: 1
++ifloat: 1
++Test "jn (3, 10.0) == 0.058379379305186812343":
++double: 3
++float: 1
++idouble: 3
++ifloat: 1
++Test "jn (3, 2.0) == 0.12894324947440205110":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++# lgamma
++Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++# log
++Test "log (0.7) == -0.35667494393873237891263871124118447":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# log10
++Test "log10 (0.7) == -0.15490195998574316929":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "log10 (e) == log10(e)":
++float: 1
++ifloat: 1
++
++# log1p
++Test "log1p (-0.3) == -0.35667494393873237891263871124118447":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# log2
++Test "log2 (0.7) == -0.51457317282975824043":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# sincos
++Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842626 in cos_res":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
++double: 1
++float: 0.5
++idouble: 1
++ifloat: 0.5
++Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.866025403784438646764 in sin_res":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
++double: 0.2758
++float: 0.3667
++idouble: 0.2758
++ifloat: 0.3667
++Test "sincos (pi/6, &sin_res, &cos_res) puts 0.866025403784438646764 in cos_res":
++float: 1
++ifloat: 1
++
++# sinh
++Test "sinh (0.7) == 0.75858370183953350346":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# tan
++Test "tan (pi/4) == 1":
++double: 0.5
++idouble: 0.5
++
++# tanh
++Test "tanh (0.7) == 0.60436777711716349631":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# tgamma
++Test "tgamma (-0.5) == -2 sqrt (pi)":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "tgamma (0.5) == sqrt (pi)":
++float: 1
++ifloat: 1
++Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# y0
++Test "y0 (0.7) == -0.19066492933739506743":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "y0 (1.0) == 0.088256964215676957983":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "y0 (1.5) == 0.38244892379775884396":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "y0 (10.0) == 0.055671167283599391424":
++float: 1
++ifloat: 1
++Test "y0 (8.0) == 0.22352148938756622053":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++# y1
++Test "y1 (0.1) == -6.4589510947020269877":
++double: 1
++idouble: 1
++Test "y1 (0.7) == -1.1032498719076333697":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "y1 (1.5) == -0.41230862697391129595":
++float: 1
++ifloat: 1
++Test "y1 (10.0) == 0.24901542420695388392":
++double: 3
++float: 1
++idouble: 3
++ifloat: 1
++Test "y1 (2.0) == -0.10703243154093754689":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "y1 (8.0) == -0.15806046173124749426":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++# yn
++Test "yn (0, 0.7) == -0.19066492933739506743":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "yn (0, 1.0) == 0.088256964215676957983":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "yn (0, 1.5) == 0.38244892379775884396":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++Test "yn (0, 10.0) == 0.055671167283599391424":
++float: 1
++ifloat: 1
++Test "yn (0, 8.0) == 0.22352148938756622053":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "yn (1, 0.1) == -6.4589510947020269877":
++double: 1
++idouble: 1
++Test "yn (1, 0.7) == -1.1032498719076333697":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "yn (1, 1.5) == -0.41230862697391129595":
++float: 1
++ifloat: 1
++Test "yn (1, 10.0) == 0.24901542420695388392":
++double: 3
++float: 1
++idouble: 3
++ifloat: 1
++Test "yn (1, 2.0) == -0.10703243154093754689":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "yn (1, 8.0) == -0.15806046173124749426":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++Test "yn (10, 0.1) == -0.11831335132045197885e19":
++double: 2
++float: 2
++idouble: 2
++ifloat: 2
++Test "yn (10, 0.7) == -0.42447194260703866924e10":
++double: 3
++idouble: 3
++Test "yn (10, 1.0) == -0.12161801427868918929e9":
++double: 1
++idouble: 1
++Test "yn (10, 10.0) == -0.35981415218340272205":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "yn (10, 2.0) == -129184.54220803928264":
++double: 2
++idouble: 2
++Test "yn (3, 0.1) == -5099.3323786129048894":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "yn (3, 0.7) == -15.819479052819633505":
++double: 3
++float: 1
++idouble: 3
++ifloat: 1
++Test "yn (3, 10.0) == -0.25136265718383732978":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "yn (3, 2.0) == -1.1277837768404277861":
++double: 1
++idouble: 1
++
++# Maximal error of functions:
++Function: "asin":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++Function: "atan2":
++float: 4
++ifloat: 4
++
++Function: "atanh":
++double: 1
++idouble: 1
++
++Function: "cabs":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Real part of "cacos":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Imaginary part of "cacos":
++float: 1
++ifloat: 1
++
++Function: Real part of "cacosh":
++double: 1
++float: 7
++idouble: 1
++ifloat: 7
++
++Function: Imaginary part of "cacosh":
++double: 1
++float: 3
++idouble: 1
++ifloat: 3
++
++Function: Real part of "casin":
++double: 3
++float: 2
++idouble: 3
++ifloat: 2
++
++Function: Imaginary part of "casin":
++float: 1
++ifloat: 1
++
++Function: Real part of "casinh":
++double: 5
++float: 1
++idouble: 5
++ifloat: 1
++
++Function: Imaginary part of "casinh":
++double: 3
++float: 6
++idouble: 3
++ifloat: 6
++
++Function: Real part of "catan":
++float: 4
++ifloat: 4
++
++Function: Imaginary part of "catan":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Real part of "catanh":
++double: 4
++float: 1
++idouble: 4
++ifloat: 1
++
++Function: Imaginary part of "catanh":
++double: 1
++float: 6
++idouble: 1
++ifloat: 6
++
++Function: "cbrt":
++double: 1
++idouble: 1
++
++Function: Real part of "ccos":
++double: 1
++idouble: 1
++
++Function: Imaginary part of "ccos":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Real part of "ccosh":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Imaginary part of "ccosh":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Real part of "cexp":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Imaginary part of "cexp":
++float: 1
++ifloat: 1
++
++Function: Imaginary part of "clog":
++double: 1
++float: 3
++idouble: 1
++ifloat: 3
++
++Function: Real part of "clog10":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Imaginary part of "clog10":
++double: 1
++float: 5
++idouble: 1
++ifloat: 5
++
++Function: "cos":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++Function: Real part of "cpow":
++double: 1
++float: 4
++idouble: 1
++ifloat: 4
++
++Function: Imaginary part of "cpow":
++double: 1.1031
++float: 2
++idouble: 1.1031
++ifloat: 2
++
++Function: Imaginary part of "csin":
++float: 1
++ifloat: 1
++
++Function: Real part of "csinh":
++float: 1
++ifloat: 1
++
++Function: Imaginary part of "csinh":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Real part of "csqrt":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Imaginary part of "csqrt":
++float: 1
++ifloat: 1
++
++Function: Real part of "ctan":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Imaginary part of "ctan":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: Real part of "ctanh":
++double: 2
++float: 2
++idouble: 2
++ifloat: 2
++
++Function: Imaginary part of "ctanh":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++Function: "erfc":
++double: 24
++float: 12
++idouble: 24
++ifloat: 12
++
++Function: "exp10":
++double: 6
++float: 2
++idouble: 6
++ifloat: 2
++
++Function: "expm1":
++float: 1
++ifloat: 1
++
++Function: "fmod":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++Function: "hypot":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "j0":
++double: 2
++float: 2
++idouble: 2
++ifloat: 2
++
++Function: "j1":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++Function: "jn":
++double: 6
++float: 4
++idouble: 6
++ifloat: 4
++
++Function: "lgamma":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++Function: "log":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "log10":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "log1p":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "log2":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "sincos":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "sinh":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "tan":
++double: 0.5
++idouble: 0.5
++
++Function: "tanh":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "tgamma":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "y0":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++Function: "y1":
++double: 3
++float: 2
++idouble: 3
++ifloat: 2
++
++Function: "yn":
++double: 3
++float: 2
++idouble: 3
++ifloat: 2
++
++# end of automatic generation
+diff -Nur uClibc-0.9.33.2/test/math/libm-test-ulps-sh4 uClibc-git/test/math/libm-test-ulps-sh4
+--- uClibc-0.9.33.2/test/math/libm-test-ulps-sh4 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/libm-test-ulps-sh4 1970-01-01 01:00:00.000000000 +0100
+@@ -1,1094 +0,0 @@
+-# Begin of automatic generation
+-
+-# asin
+-Test "asin (-0.5) == -pi/6":
+-float: 2
+-ifloat: 2
+-Test "asin (0.5) == pi/6":
+-float: 2
+-ifloat: 2
+-Test "asin (0.7) == 0.7753974966107530637":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-# atan2
+-Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
+-float: 3
+-ifloat: 3
+-Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267":
+-float: 3
+-ifloat: 3
+-Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736":
+-float: 4
+-ifloat: 4
+-
+-# atanh
+-Test "atanh (0.7) == 0.8673005276940531944":
+-double: 1
+-idouble: 1
+-
+-# cabs
+-Test "cabs (-0.7 + 12.4 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (-0.7 - 12.4 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (-12.4 + 0.7 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (-12.4 - 0.7 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (0.7 + 1.2 i) == 1.3892443989449804508432547041028554":
+-double: 1
+-idouble: 1
+-Test "cabs (0.7 + 12.4 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-
+-# cacos
+-Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
+-float: 1
+-ifloat: 1
+-
+-# cacosh
+-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+-double: 1
+-float: 7
+-idouble: 1
+-ifloat: 7
+-Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+-double: 1
+-float: 3
+-idouble: 1
+-ifloat: 3
+-Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# casin
+-Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
+-double: 3
+-float: 2
+-idouble: 3
+-ifloat: 2
+-Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
+-float: 1
+-ifloat: 1
+-
+-# casinh
+-Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
+-double: 5
+-float: 1
+-idouble: 5
+-ifloat: 1
+-Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
+-double: 3
+-float: 6
+-idouble: 3
+-ifloat: 6
+-Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
+-double: 1
+-idouble: 1
+-Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
+-float: 1
+-ifloat: 1
+-
+-# catan
+-Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+-float: 3
+-ifloat: 3
+-Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
+-float: 4
+-ifloat: 4
+-Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
+-double: 1
+-idouble: 1
+-
+-# catanh
+-Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+-double: 4
+-idouble: 4
+-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+-float: 4
+-ifloat: 4
+-Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
+-double: 1
+-float: 6
+-idouble: 1
+-ifloat: 6
+-
+-# cbrt
+-Test "cbrt (-27.0) == -3.0":
+-double: 1
+-idouble: 1
+-Test "cbrt (0.970299) == 0.99":
+-double: 1
+-idouble: 1
+-
+-# ccos
+-Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
+-double: 1
+-idouble: 1
+-Test "Imaginary part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
+-double: 1
+-idouble: 1
+-
+-# ccosh
+-Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
+-double: 1
+-idouble: 1
+-
+-# cexp
+-Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i":
+-float: 1
+-ifloat: 1
+-
+-# clog
+-Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
+-double: 1
+-float: 3
+-idouble: 1
+-ifloat: 3
+-
+-# clog10
+-Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+-double: 1
+-float: 5
+-idouble: 1
+-ifloat: 5
+-Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
+-double: 1
+-idouble: 1
+-Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+-float: 1
+-ifloat: 1
+-
+-# cos
+-Test "cos (0.7) == 0.7648421872844884262":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "cos (M_PI_6l * 2.0) == 0.5":
+-double: 1
+-float: 0.5
+-idouble: 1
+-ifloat: 0.5
+-Test "cos (M_PI_6l * 4.0) == -0.5":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "cos (pi/2) == 0":
+-double: 0.2758
+-float: 0.3667
+-idouble: 0.2758
+-ifloat: 0.3667
+-
+-# cpow
+-Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+-double: 1
+-float: 4
+-idouble: 1
+-ifloat: 4
+-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+-float: 2
+-ifloat: 2
+-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
+-double: 1.1031
+-float: 1.5
+-idouble: 1.1031
+-ifloat: 1.5
+-
+-# csin
+-Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i":
+-float: 1
+-ifloat: 1
+-
+-# csinh
+-Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+-double: 1
+-idouble: 1
+-Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
+-float: 1
+-ifloat: 1
+-
+-# csqrt
+-Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
+-float: 1
+-ifloat: 1
+-
+-# ctan
+-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+-double: 1
+-idouble: 1
+-Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# ctanh
+-Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+-float: 1
+-ifloat: 1
+-Test "Real part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "Imaginary part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+-# erfc
+-Test "erfc (0.7) == 0.32219880616258152702":
+-double: 1
+-idouble: 1
+-Test "erfc (1.2) == 0.089686021770364619762":
+-double: 2
+-float: 2
+-idouble: 2
+-ifloat: 2
+-Test "erfc (2.0) == 0.0046777349810472658379":
+-double: 1
+-idouble: 1
+-Test "erfc (4.1) == 0.67000276540848983727e-8":
+-double: 24
+-float: 12
+-idouble: 24
+-ifloat: 12
+-
+-# exp10
+-Test "exp10 (-1) == 0.1":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "exp10 (0.7) == 5.0118723362727228500":
+-float: 1
+-ifloat: 1
+-Test "exp10 (3) == 1000":
+-double: 6
+-float: 2
+-idouble: 6
+-ifloat: 2
+-
+-# expm1
+-Test "expm1 (1) == M_El - 1.0":
+-float: 1
+-ifloat: 1
+-
+-# fmod
+-Test "fmod (-6.5, -2.3) == -1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "fmod (-6.5, 2.3) == -1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "fmod (6.5, -2.3) == 1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "fmod (6.5, 2.3) == 1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+-# hypot
+-Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (0.7, 1.2) == 1.3892443989449804508432547041028554":
+-double: 1
+-idouble: 1
+-Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-
+-# j0
+-Test "j0 (10.0) == -0.24593576445134833520":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "j0 (2.0) == 0.22389077914123566805":
+-float: 2
+-ifloat: 2
+-Test "j0 (8.0) == 0.17165080713755390609":
+-float: 1
+-ifloat: 1
+-
+-# j1
+-Test "j1 (10.0) == 0.043472746168861436670":
+-float: 2
+-ifloat: 2
+-Test "j1 (2.0) == 0.57672480775687338720":
+-double: 1
+-idouble: 1
+-Test "j1 (8.0) == 0.23463634685391462438":
+-double: 1
+-idouble: 1
+-
+-# jn
+-Test "jn (0, 10.0) == -0.24593576445134833520":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "jn (0, 2.0) == 0.22389077914123566805":
+-float: 2
+-ifloat: 2
+-Test "jn (0, 8.0) == 0.17165080713755390609":
+-float: 1
+-ifloat: 1
+-Test "jn (1, 10.0) == 0.043472746168861436670":
+-float: 2
+-ifloat: 2
+-Test "jn (1, 2.0) == 0.57672480775687338720":
+-double: 1
+-idouble: 1
+-Test "jn (1, 8.0) == 0.23463634685391462438":
+-double: 1
+-idouble: 1
+-Test "jn (10, 0.1) == 0.26905328954342155795e-19":
+-double: 6
+-float: 4
+-idouble: 6
+-ifloat: 4
+-Test "jn (10, 0.7) == 0.75175911502153953928e-11":
+-double: 3
+-float: 1
+-idouble: 3
+-ifloat: 1
+-Test "jn (10, 10.0) == 0.20748610663335885770":
+-double: 4
+-float: 3
+-idouble: 4
+-ifloat: 3
+-Test "jn (10, 2.0) == 0.25153862827167367096e-6":
+-float: 4
+-ifloat: 4
+-Test "jn (3, 0.1) == 0.000020820315754756261429":
+-double: 1
+-idouble: 1
+-Test "jn (3, 0.7) == 0.0069296548267508408077":
+-float: 1
+-ifloat: 1
+-Test "jn (3, 10.0) == 0.058379379305186812343":
+-double: 3
+-float: 1
+-idouble: 3
+-ifloat: 1
+-Test "jn (3, 2.0) == 0.12894324947440205110":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-# lgamma
+-Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-# log
+-Test "log (0.7) == -0.35667494393873237891263871124118447":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# log10
+-Test "log10 (0.7) == -0.15490195998574316929":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "log10 (e) == log10(e)":
+-float: 1
+-ifloat: 1
+-
+-# log1p
+-Test "log1p (-0.3) == -0.35667494393873237891263871124118447":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# log2
+-Test "log2 (0.7) == -0.51457317282975824043":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# sincos
+-Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842626 in cos_res":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+-double: 1
+-float: 0.5
+-idouble: 1
+-ifloat: 0.5
+-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.866025403784438646764 in sin_res":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
+-double: 0.2758
+-float: 0.3667
+-idouble: 0.2758
+-ifloat: 0.3667
+-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.866025403784438646764 in cos_res":
+-float: 1
+-ifloat: 1
+-
+-# sinh
+-Test "sinh (0.7) == 0.75858370183953350346":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# tan
+-Test "tan (pi/4) == 1":
+-double: 0.5
+-idouble: 0.5
+-
+-# tanh
+-Test "tanh (0.7) == 0.60436777711716349631":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# tgamma
+-Test "tgamma (-0.5) == -2 sqrt (pi)":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "tgamma (0.5) == sqrt (pi)":
+-float: 1
+-ifloat: 1
+-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# y0
+-Test "y0 (0.7) == -0.19066492933739506743":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "y0 (1.0) == 0.088256964215676957983":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "y0 (1.5) == 0.38244892379775884396":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "y0 (10.0) == 0.055671167283599391424":
+-float: 1
+-ifloat: 1
+-Test "y0 (8.0) == 0.22352148938756622053":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# y1
+-Test "y1 (0.1) == -6.4589510947020269877":
+-double: 1
+-idouble: 1
+-Test "y1 (0.7) == -1.1032498719076333697":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "y1 (1.5) == -0.41230862697391129595":
+-float: 1
+-ifloat: 1
+-Test "y1 (10.0) == 0.24901542420695388392":
+-double: 3
+-float: 1
+-idouble: 3
+-ifloat: 1
+-Test "y1 (2.0) == -0.10703243154093754689":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "y1 (8.0) == -0.15806046173124749426":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-# yn
+-Test "yn (0, 0.7) == -0.19066492933739506743":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "yn (0, 1.0) == 0.088256964215676957983":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "yn (0, 1.5) == 0.38244892379775884396":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "yn (0, 10.0) == 0.055671167283599391424":
+-float: 1
+-ifloat: 1
+-Test "yn (0, 8.0) == 0.22352148938756622053":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (1, 0.1) == -6.4589510947020269877":
+-double: 1
+-idouble: 1
+-Test "yn (1, 0.7) == -1.1032498719076333697":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (1, 1.5) == -0.41230862697391129595":
+-float: 1
+-ifloat: 1
+-Test "yn (1, 10.0) == 0.24901542420695388392":
+-double: 3
+-float: 1
+-idouble: 3
+-ifloat: 1
+-Test "yn (1, 2.0) == -0.10703243154093754689":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (1, 8.0) == -0.15806046173124749426":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-Test "yn (10, 0.1) == -0.11831335132045197885e19":
+-double: 2
+-float: 2
+-idouble: 2
+-ifloat: 2
+-Test "yn (10, 0.7) == -0.42447194260703866924e10":
+-double: 3
+-idouble: 3
+-Test "yn (10, 1.0) == -0.12161801427868918929e9":
+-double: 1
+-idouble: 1
+-Test "yn (10, 10.0) == -0.35981415218340272205":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (10, 2.0) == -129184.54220803928264":
+-double: 2
+-idouble: 2
+-Test "yn (3, 0.1) == -5099.3323786129048894":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (3, 0.7) == -15.819479052819633505":
+-double: 3
+-float: 1
+-idouble: 3
+-ifloat: 1
+-Test "yn (3, 10.0) == -0.25136265718383732978":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (3, 2.0) == -1.1277837768404277861":
+-double: 1
+-idouble: 1
+-
+-# Maximal error of functions:
+-Function: "asin":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-Function: "atan2":
+-float: 4
+-ifloat: 4
+-
+-Function: "atanh":
+-double: 1
+-idouble: 1
+-
+-Function: "cabs":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Real part of "cacos":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "cacos":
+-float: 1
+-ifloat: 1
+-
+-Function: Real part of "cacosh":
+-double: 1
+-float: 7
+-idouble: 1
+-ifloat: 7
+-
+-Function: Imaginary part of "cacosh":
+-double: 1
+-float: 3
+-idouble: 1
+-ifloat: 3
+-
+-Function: Real part of "casin":
+-double: 3
+-float: 2
+-idouble: 3
+-ifloat: 2
+-
+-Function: Imaginary part of "casin":
+-float: 1
+-ifloat: 1
+-
+-Function: Real part of "casinh":
+-double: 5
+-float: 1
+-idouble: 5
+-ifloat: 1
+-
+-Function: Imaginary part of "casinh":
+-double: 3
+-float: 6
+-idouble: 3
+-ifloat: 6
+-
+-Function: Real part of "catan":
+-float: 4
+-ifloat: 4
+-
+-Function: Imaginary part of "catan":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Real part of "catanh":
+-double: 4
+-float: 1
+-idouble: 4
+-ifloat: 1
+-
+-Function: Imaginary part of "catanh":
+-double: 1
+-float: 6
+-idouble: 1
+-ifloat: 6
+-
+-Function: "cbrt":
+-double: 1
+-idouble: 1
+-
+-Function: Real part of "ccos":
+-double: 1
+-idouble: 1
+-
+-Function: Imaginary part of "ccos":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Real part of "ccosh":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "ccosh":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Real part of "cexp":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "cexp":
+-float: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "clog":
+-double: 1
+-float: 3
+-idouble: 1
+-ifloat: 3
+-
+-Function: Real part of "clog10":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "clog10":
+-double: 1
+-float: 5
+-idouble: 1
+-ifloat: 5
+-
+-Function: "cos":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+-Function: Real part of "cpow":
+-double: 1
+-float: 4
+-idouble: 1
+-ifloat: 4
+-
+-Function: Imaginary part of "cpow":
+-double: 1.1031
+-float: 2
+-idouble: 1.1031
+-ifloat: 2
+-
+-Function: Imaginary part of "csin":
+-float: 1
+-ifloat: 1
+-
+-Function: Real part of "csinh":
+-float: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "csinh":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Real part of "csqrt":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "csqrt":
+-float: 1
+-ifloat: 1
+-
+-Function: Real part of "ctan":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "ctan":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Real part of "ctanh":
+-double: 2
+-float: 2
+-idouble: 2
+-ifloat: 2
+-
+-Function: Imaginary part of "ctanh":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+-Function: "erfc":
+-double: 24
+-float: 12
+-idouble: 24
+-ifloat: 12
+-
+-Function: "exp10":
+-double: 6
+-float: 2
+-idouble: 6
+-ifloat: 2
+-
+-Function: "expm1":
+-float: 1
+-ifloat: 1
+-
+-Function: "fmod":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+-Function: "hypot":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "j0":
+-double: 2
+-float: 2
+-idouble: 2
+-ifloat: 2
+-
+-Function: "j1":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-Function: "jn":
+-double: 6
+-float: 4
+-idouble: 6
+-ifloat: 4
+-
+-Function: "lgamma":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-Function: "log":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "log10":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "log1p":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "log2":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "sincos":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "sinh":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "tan":
+-double: 0.5
+-idouble: 0.5
+-
+-Function: "tanh":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "tgamma":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "y0":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+-Function: "y1":
+-double: 3
+-float: 2
+-idouble: 3
+-ifloat: 2
+-
+-Function: "yn":
+-double: 3
+-float: 2
+-idouble: 3
+-ifloat: 2
+-
+-# end of automatic generation
+diff -Nur uClibc-0.9.33.2/test/math/libm-test-ulps-xtensa uClibc-git/test/math/libm-test-ulps-xtensa
+--- uClibc-0.9.33.2/test/math/libm-test-ulps-xtensa 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/math/libm-test-ulps-xtensa 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,129 @@
++# Begin of automatic generation
++
++# cos
++Test "cos (M_PI_6l * 2.0) == 0.5":
++double: 1
++idouble: 1
++Test "cos (M_PI_6l * 4.0) == -0.5":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++# erf
++Test "erf (0.75) == 0.711155633653515131598937834591410777":
++double: 1
++idouble: 1
++Test "erf (1.25) == 0.922900128256458230136523481197281140":
++double: 1
++idouble: 1
++
++# erfc
++Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
++double: 1
++idouble: 1
++
++# exp
++Test "exp (1) == e":
++double: 1
++idouble: 1
++
++# expm1
++Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
++double: 1
++idouble: 1
++
++# hypot
++Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
++float: 1
++ifloat: 1
++
++# lgamma
++Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++# log10
++Test "log10 (0.75) == -0.124938736608299953132449886193870744":
++double: 1
++idouble: 1
++Test "log10 (e) == log10(e)":
++float: 1
++ifloat: 1
++
++# Maximal error of functions:
++Function: "cos":
++double: 2
++float: 1
++idouble: 2
++ifloat: 1
++
++Function: "erf":
++double: 1
++idouble: 1
++
++Function: "erfc":
++double: 1
++idouble: 1
++
++Function: "exp":
++double: 1
++idouble: 1
++
++Function: "expm1":
++double: 1
++idouble: 1
++
++Function: "hypot":
++float: 1
++ifloat: 1
++
++Function: "lgamma":
++double: 1
++float: 2
++idouble: 1
++ifloat: 2
++
++Function: "log":
++float: 1
++ifloat: 1
++
++Function: "log10":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++
++Function: "tan":
++double: 1
++idouble: 1
++
++# end of automatic generation
+diff -Nur uClibc-0.9.33.2/test/math/Makefile uClibc-git/test/math/Makefile
+--- uClibc-0.9.33.2/test/math/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/math/Makefile.in uClibc-git/test/math/Makefile.in
+--- uClibc-0.9.33.2/test/math/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/Makefile.in 2014-02-23 19:06:59.000000000 +0100
+@@ -1,14 +1,16 @@
+ # uClibc math tests
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+-TESTS := basic-test tst-definitions test-fpucw test-float test-ifloat test-double test-idouble \
+- rint signgam ilogb
+ # gamma (removed from TESTS, need to add "small errors are ok" machinery there)
+-ifeq ($(UCLIBC_HAS_LONG_DOUBLE_MATH),y)
+-TESTS += test-ldouble test-ildoubl compile_test c99_test
++TESTS_DISABLED := gamma
++ifeq ($(UCLIBC_HAS_LONG_DOUBLE_MATH),)
++TESTS_DISABLED += test-ldouble test-ildoubl compile_test c99_test
+ else
+ CFLAGS_basic-test := -DNO_LONG_DOUBLE
+ endif
++ifeq ($(DO_C99_MATH),)
++TESTS_DISABLED += test-float test-ifloat test-double test-idouble rint signgam ilogb
++endif
+
+ DODIFF_rint := 1
+ DODIFF_signgam := 1
+@@ -23,7 +25,8 @@
+
+ PERL := /usr/bin/perl
+
+-$(TESTS): libm-test.c
++MDEPS := $(wildcard test-*.c)
++$(MDEPS): libm-test.c
+
+ libm-test.c: libm-test-ulps-$(TARGET_ARCH) libm-test.inc gen-libm-test.pl
+ $(Q)$(PERL) ./gen-libm-test.pl -u libm-test-ulps-$(TARGET_ARCH) ./libm-test.inc -o "." 2>&1 > /dev/null
+diff -Nur uClibc-0.9.33.2/test/math/test-double.c uClibc-git/test/math/test-double.c
+--- uClibc-0.9.33.2/test/math/test-double.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-double.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FUNC(function) function
+ #define FLOAT double
+diff -Nur uClibc-0.9.33.2/test/math/test-float.c uClibc-git/test/math/test-float.c
+--- uClibc-0.9.33.2/test/math/test-float.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-float.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FUNC(function) function ## f
+ #define FLOAT float
+diff -Nur uClibc-0.9.33.2/test/math/test-fpucw.c uClibc-git/test/math/test-fpucw.c
+--- uClibc-0.9.33.2/test/math/test-fpucw.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-fpucw.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fpu_control.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/math/test-idouble.c uClibc-git/test/math/test-idouble.c
+--- uClibc-0.9.33.2/test/math/test-idouble.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-idouble.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FUNC(function) function
+ #define FLOAT double
+diff -Nur uClibc-0.9.33.2/test/math/test-ifloat.c uClibc-git/test/math/test-ifloat.c
+--- uClibc-0.9.33.2/test/math/test-ifloat.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-ifloat.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FUNC(function) function ## f
+ #define FLOAT float
+diff -Nur uClibc-0.9.33.2/test/math/test-ildoubl.c uClibc-git/test/math/test-ildoubl.c
+--- uClibc-0.9.33.2/test/math/test-ildoubl.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-ildoubl.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FUNC(function) function##l
+ #define FLOAT long double
+diff -Nur uClibc-0.9.33.2/test/math/test-ldouble.c uClibc-git/test/math/test-ldouble.c
+--- uClibc-0.9.33.2/test/math/test-ldouble.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/test-ldouble.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define FUNC(function) function##l
+ #define FLOAT long double
+diff -Nur uClibc-0.9.33.2/test/math/tst-definitions.c uClibc-git/test/math/tst-definitions.c
+--- uClibc-0.9.33.2/test/math/tst-definitions.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/math/tst-definitions.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <math.h>
+diff -Nur uClibc-0.9.33.2/test/misc/bug-glob2.c uClibc-git/test/misc/bug-glob2.c
+--- uClibc-0.9.33.2/test/misc/bug-glob2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/bug-glob2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/misc/Makefile uClibc-git/test/misc/Makefile
+--- uClibc-0.9.33.2/test/misc/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/misc/Makefile.in uClibc-git/test/misc/Makefile.in
+--- uClibc-0.9.33.2/test/misc/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -4,11 +4,18 @@
+ TESTS_DISABLED := outb tst-fnmatch bug-glob1 tst-gnuglob
+ ifeq ($(UCLIBC_HAS_LFS),)
+ TESTS_DISABLED += dirent64
++TESTS_DISABLED += tst-statfs # assuming host has LFS on
+ endif
+ CFLAGS_dirent64 := -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+
+ DODIFF_dirent := 1
+ DODIFF_dirent64 := 1
++DODIFF_tst-statfs := 1
++DODIFF_tst-statvfs := 1
+
+ OPTS_bug-glob1 := $(PWD)
+ OPTS_tst-fnmatch := < tst-fnmatch.input
++
++MNTENTS = $(shell mount | while read dev on mp rest; do echo $$mp; done)
++OPTS_tst-statfs := $(MNTENTS)
++OPTS_tst-statvfs := $(MNTENTS)
+diff -Nur uClibc-0.9.33.2/test/misc/opendir-tst1.c uClibc-git/test/misc/opendir-tst1.c
+--- uClibc-0.9.33.2/test/misc/opendir-tst1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/opendir-tst1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <dirent.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/test/misc/tst-fnmatch.c uClibc-git/test/misc/tst-fnmatch.c
+--- uClibc-0.9.33.2/test/misc/tst-fnmatch.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/tst-fnmatch.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/misc/tst-fnmatch.input uClibc-git/test/misc/tst-fnmatch.input
+--- uClibc-0.9.33.2/test/misc/tst-fnmatch.input 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/tst-fnmatch.input 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ # Lesser General Public License for more details.
+
+ # You should have received a copy of the GNU Lesser General Public
+-# License along with the GNU C Library; if not, write to the Free
+-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-# 02111-1307 USA.
++# License along with the GNU C Library; see the file COPYING.LIB. If
++# not, see <http://www.gnu.org/licenses/>.
+
+
+ # Derived from the IEEE 2003.2 text. The standard only contains some
+diff -Nur uClibc-0.9.33.2/test/misc/tst-gnuglob.c uClibc-git/test/misc/tst-gnuglob.c
+--- uClibc-0.9.33.2/test/misc/tst-gnuglob.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/tst-gnuglob.c 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <dirent.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/test/misc/tst-inotify.c uClibc-git/test/misc/tst-inotify.c
+--- uClibc-0.9.33.2/test/misc/tst-inotify.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/misc/tst-inotify.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,66 @@
++/* vi: set sw=4 ts=4 sts=4: */
++/*
++ * inotify test for uClibc
++ * Copyright (C) 2012 by Kevin Cernekee <cernekee@gmail.com>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <errno.h>
++#include <error.h>
++#include <inttypes.h>
++#include <sys/inotify.h>
++#include <sys/fcntl.h>
++
++static int
++do_test(void)
++{
++ int ifd, fd, ret, result = 0;
++ struct inotify_event e;
++ char tfile[] = "/tmp/inotify.XXXXXX";
++
++ fd = mkstemp(tfile);
++ close(fd);
++
++ ifd = inotify_init1(IN_NONBLOCK);
++ if (ifd < 0) {
++ perror("inotify_init1()");
++ result = 1;
++ }
++ if (inotify_add_watch(ifd, tfile, IN_DELETE_SELF) < 0) {
++ perror("inotify_add_watch()");
++ result = 1;
++ }
++
++ /* nonblocking inotify should return immediately with no events */
++ ret = read(ifd, &e, sizeof(e));
++ if (ret != -1 || errno != EAGAIN) {
++ error(0, 0, "first read() returned %d", ret);
++ result = 1;
++ }
++
++ /* generate an event */
++ unlink(tfile);
++
++ /* now check whether our event was seen */
++ ret = read(ifd, &e, sizeof(e));
++ if (ret != sizeof(e)) {
++ error(0, 0, "second read() returned %d", ret);
++ result = 1;
++ }
++
++ if (!(e.mask & IN_DELETE_SELF)) {
++ error(0, 0, "incorrect event mask: %" PRIx32, e.mask);
++ result = 1;
++ }
++
++ return result;
++}
++
++#define TIMEOUT 5
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -Nur uClibc-0.9.33.2/test/misc/tst-statfs.c uClibc-git/test/misc/tst-statfs.c
+--- uClibc-0.9.33.2/test/misc/tst-statfs.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/misc/tst-statfs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,31 @@
++#include <sys/vfs.h>
++#include <errno.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++int
++main(int argc, char* argv[])
++{
++ struct statfs s;
++ int ret = 0, i;
++
++ for (i = 1; i < argc; i++) {
++ if (statfs(argv[i], &s) != 0) {
++ fprintf(stderr, "%s: %s: statfs failed. %s\n",
++ *argv, argv[i], strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ ++ret;
++ printf("statfs %s:\n\tblocks=%lld\n\tblkfree=%lld\n\tbsize=%d\n",
++ argv[i], s.f_blocks, s.f_bfree, s.f_bsize);
++#ifdef _STATFS_F_FRSIZE
++ printf("\tfrsize=%lld\n", s.f_frsize);
++#elif defined __mips__
++ printf("\tfrsize=mips, unsupported?\n");
++#else
++# error no _STATFS_F_FRSIZE
++#endif
++ }
++ exit(ret ? EXIT_SUCCESS : EXIT_FAILURE);
++}
+diff -Nur uClibc-0.9.33.2/test/misc/tst-statvfs.c uClibc-git/test/misc/tst-statvfs.c
+--- uClibc-0.9.33.2/test/misc/tst-statvfs.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/misc/tst-statvfs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,26 @@
++#include <sys/statvfs.h>
++#include <errno.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++int
++main(int argc, char* argv[])
++{
++ struct statvfs s;
++ int i;
++
++ for (i = 1; i < argc; i++) {
++ if (statvfs(argv[i], &s) != 0) {
++ fprintf(stderr, "%s: %s: statvfs failed. %s\n",
++ *argv, argv[i], strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ printf("statvfs %s:\n\tblocks=%lld\n\tblkfree=%lld\n\tbsize=%d\n",
++ argv[i], s.f_blocks, s.f_bfree, s.f_bsize);
++#if 1 // def _STATFS_F_FRSIZE
++ printf("\tfrsize=%lld\n", s.f_frsize);
++#endif
++ }
++ exit(EXIT_SUCCESS);
++}
+diff -Nur uClibc-0.9.33.2/test/misc/tst-utmp.c uClibc-git/test/misc/tst-utmp.c
+--- uClibc-0.9.33.2/test/misc/tst-utmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/misc/tst-utmp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/mmap/Makefile uClibc-git/test/mmap/Makefile
+--- uClibc-0.9.33.2/test/mmap/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/mmap/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/nptl/eintr.c uClibc-git/test/nptl/eintr.c
+--- uClibc-0.9.33.2/test/nptl/eintr.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/eintr.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-align2.c uClibc-git/test/nptl/tst-align2.c
+--- uClibc-0.9.33.2/test/nptl/tst-align2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-align2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sched.h>
+ #include <stdbool.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-align3.c uClibc-git/test/nptl/tst-align3.c
+--- uClibc-0.9.33.2/test/nptl/tst-align3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-align3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdbool.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-align.c uClibc-git/test/nptl/tst-align.c
+--- uClibc-0.9.33.2/test/nptl/tst-align.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-align.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdbool.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-atfork1.c uClibc-git/test/nptl/tst-atfork1.c
+--- uClibc-0.9.33.2/test/nptl/tst-atfork1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-atfork1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-attr1.c uClibc-git/test/nptl/tst-attr1.c
+--- uClibc-0.9.33.2/test/nptl/tst-attr1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-attr1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-attr2.c uClibc-git/test/nptl/tst-attr2.c
+--- uClibc-0.9.33.2/test/nptl/tst-attr2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-attr2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-attr3.c uClibc-git/test/nptl/tst-attr3.c
+--- uClibc-0.9.33.2/test/nptl/tst-attr3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-attr3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-barrier1.c uClibc-git/test/nptl/tst-barrier1.c
+--- uClibc-0.9.33.2/test/nptl/tst-barrier1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-barrier1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-barrier2.c uClibc-git/test/nptl/tst-barrier2.c
+--- uClibc-0.9.33.2/test/nptl/tst-barrier2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-barrier2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-barrier3.c uClibc-git/test/nptl/tst-barrier3.c
+--- uClibc-0.9.33.2/test/nptl/tst-barrier3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-barrier3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Test of POSIX barriers. */
+
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-barrier4.c uClibc-git/test/nptl/tst-barrier4.c
+--- uClibc-0.9.33.2/test/nptl/tst-barrier4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-barrier4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This is a test for behavior not guaranteed by POSIX. */
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-basic1.c uClibc-git/test/nptl/tst-basic1.c
+--- uClibc-0.9.33.2/test/nptl/tst-basic1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-basic1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-basic2.c uClibc-git/test/nptl/tst-basic2.c
+--- uClibc-0.9.33.2/test/nptl/tst-basic2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-basic2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-basic3.c uClibc-git/test/nptl/tst-basic3.c
+--- uClibc-0.9.33.2/test/nptl/tst-basic3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-basic3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-basic4.c uClibc-git/test/nptl/tst-basic4.c
+--- uClibc-0.9.33.2/test/nptl/tst-basic4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-basic4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-basic5.c uClibc-git/test/nptl/tst-basic5.c
+--- uClibc-0.9.33.2/test/nptl/tst-basic5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-basic5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-basic6.c uClibc-git/test/nptl/tst-basic6.c
+--- uClibc-0.9.33.2/test/nptl/tst-basic6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-basic6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel10.c uClibc-git/test/nptl/tst-cancel10.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel10.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel10.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel11.c uClibc-git/test/nptl/tst-cancel11.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel11.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel11.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel12.c uClibc-git/test/nptl/tst-cancel12.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel12.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel12.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel13.c uClibc-git/test/nptl/tst-cancel13.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel13.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel13.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel14.c uClibc-git/test/nptl/tst-cancel14.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel14.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel14.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel15.c uClibc-git/test/nptl/tst-cancel15.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel15.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel15.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel16.c uClibc-git/test/nptl/tst-cancel16.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel16.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel16.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel18.c uClibc-git/test/nptl/tst-cancel18.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel18.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel18.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel19.c uClibc-git/test/nptl/tst-cancel19.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel19.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel19.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel1.c uClibc-git/test/nptl/tst-cancel1.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel20.c uClibc-git/test/nptl/tst-cancel20.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel20.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel20.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel21.c uClibc-git/test/nptl/tst-cancel21.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel21.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel21.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel22.c uClibc-git/test/nptl/tst-cancel22.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel22.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel22.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel2.c uClibc-git/test/nptl/tst-cancel2.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel3.c uClibc-git/test/nptl/tst-cancel3.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel4.c uClibc-git/test/nptl/tst-cancel4.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* NOTE: this tests functionality beyond POSIX. POSIX does not allow
+ exit to be called more than once. */
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel6.c uClibc-git/test/nptl/tst-cancel6.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel7.c uClibc-git/test/nptl/tst-cancel7.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel8.c uClibc-git/test/nptl/tst-cancel8.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel8.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cancel9.c uClibc-git/test/nptl/tst-cancel9.c
+--- uClibc-0.9.33.2/test/nptl/tst-cancel9.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cancel9.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fcntl.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cleanup0.c uClibc-git/test/nptl/tst-cleanup0.c
+--- uClibc-0.9.33.2/test/nptl/tst-cleanup0.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cleanup0.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cleanup1.c uClibc-git/test/nptl/tst-cleanup1.c
+--- uClibc-0.9.33.2/test/nptl/tst-cleanup1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cleanup1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cleanup2.c uClibc-git/test/nptl/tst-cleanup2.c
+--- uClibc-0.9.33.2/test/nptl/tst-cleanup2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cleanup2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <setjmp.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cleanup3.c uClibc-git/test/nptl/tst-cleanup3.c
+--- uClibc-0.9.33.2/test/nptl/tst-cleanup3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cleanup3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cleanup4aux.c uClibc-git/test/nptl/tst-cleanup4aux.c
+--- uClibc-0.9.33.2/test/nptl/tst-cleanup4aux.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cleanup4aux.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cleanup4.c uClibc-git/test/nptl/tst-cleanup4.c
+--- uClibc-0.9.33.2/test/nptl/tst-cleanup4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cleanup4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-clock1.c uClibc-git/test/nptl/tst-clock1.c
+--- uClibc-0.9.33.2/test/nptl/tst-clock1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-clock1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-clock2.c uClibc-git/test/nptl/tst-clock2.c
+--- uClibc-0.9.33.2/test/nptl/tst-clock2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-clock2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-clock.c uClibc-git/test/nptl/tst-clock.c
+--- uClibc-0.9.33.2/test/nptl/tst-clock.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-clock.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-clock_nanosleep.c uClibc-git/test/nptl/tst-clock_nanosleep.c
+--- uClibc-0.9.33.2/test/nptl/tst-clock_nanosleep.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-clock_nanosleep.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond10.c uClibc-git/test/nptl/tst-cond10.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond10.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond10.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <error.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond11.c uClibc-git/test/nptl/tst-cond11.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond11.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond11.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond12.c uClibc-git/test/nptl/tst-cond12.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond12.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond12.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond14.c uClibc-git/test/nptl/tst-cond14.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond14.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond14.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond15.c uClibc-git/test/nptl/tst-cond15.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond15.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond15.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond16.c uClibc-git/test/nptl/tst-cond16.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond16.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond16.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond18.c uClibc-git/test/nptl/tst-cond18.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond18.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond18.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond19.c uClibc-git/test/nptl/tst-cond19.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond19.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond19.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond1.c uClibc-git/test/nptl/tst-cond1.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <error.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond20.c uClibc-git/test/nptl/tst-cond20.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond20.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond20.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond23.c uClibc-git/test/nptl/tst-cond23.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond23.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond23.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond2.c uClibc-git/test/nptl/tst-cond2.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <error.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond3.c uClibc-git/test/nptl/tst-cond3.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond4.c uClibc-git/test/nptl/tst-cond4.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond5.c uClibc-git/test/nptl/tst-cond5.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond6.c uClibc-git/test/nptl/tst-cond6.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond7.c uClibc-git/test/nptl/tst-cond7.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond8.c uClibc-git/test/nptl/tst-cond8.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond8.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cond9.c uClibc-git/test/nptl/tst-cond9.c
+--- uClibc-0.9.33.2/test/nptl/tst-cond9.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cond9.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cpuclock1.c uClibc-git/test/nptl/tst-cpuclock1.c
+--- uClibc-0.9.33.2/test/nptl/tst-cpuclock1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cpuclock1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-cpuclock2.c uClibc-git/test/nptl/tst-cpuclock2.c
+--- uClibc-0.9.33.2/test/nptl/tst-cpuclock2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-cpuclock2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-detach1.c uClibc-git/test/nptl/tst-detach1.c
+--- uClibc-0.9.33.2/test/nptl/tst-detach1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-detach1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-eintr1.c uClibc-git/test/nptl/tst-eintr1.c
+--- uClibc-0.9.33.2/test/nptl/tst-eintr1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-eintr1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-eintr2.c uClibc-git/test/nptl/tst-eintr2.c
+--- uClibc-0.9.33.2/test/nptl/tst-eintr2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-eintr2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-eintr3.c uClibc-git/test/nptl/tst-eintr3.c
+--- uClibc-0.9.33.2/test/nptl/tst-eintr3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-eintr3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-eintr4.c uClibc-git/test/nptl/tst-eintr4.c
+--- uClibc-0.9.33.2/test/nptl/tst-eintr4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-eintr4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-eintr5.c uClibc-git/test/nptl/tst-eintr5.c
+--- uClibc-0.9.33.2/test/nptl/tst-eintr5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-eintr5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-exec2.c uClibc-git/test/nptl/tst-exec2.c
+--- uClibc-0.9.33.2/test/nptl/tst-exec2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-exec2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <paths.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-exec3.c uClibc-git/test/nptl/tst-exec3.c
+--- uClibc-0.9.33.2/test/nptl/tst-exec3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-exec3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <paths.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-exec4.c uClibc-git/test/nptl/tst-exec4.c
+--- uClibc-0.9.33.2/test/nptl/tst-exec4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-exec4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-exit1.c uClibc-git/test/nptl/tst-exit1.c
+--- uClibc-0.9.33.2/test/nptl/tst-exit1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-exit1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* NOTE: this tests functionality beyond POSIX. POSIX does not allow
+ exit to be called more than once. */
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-fini1.c uClibc-git/test/nptl/tst-fini1.c
+--- uClibc-0.9.33.2/test/nptl/tst-fini1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-fini1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <unistd.h>
+
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-fini1mod.c uClibc-git/test/nptl/tst-fini1mod.c
+--- uClibc-0.9.33.2/test/nptl/tst-fini1mod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-fini1mod.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-flock1.c uClibc-git/test/nptl/tst-flock1.c
+--- uClibc-0.9.33.2/test/nptl/tst-flock1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-flock1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-flock2.c uClibc-git/test/nptl/tst-flock2.c
+--- uClibc-0.9.33.2/test/nptl/tst-flock2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-flock2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-fork1.c uClibc-git/test/nptl/tst-fork1.c
+--- uClibc-0.9.33.2/test/nptl/tst-fork1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-fork1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-fork2.c uClibc-git/test/nptl/tst-fork2.c
+--- uClibc-0.9.33.2/test/nptl/tst-fork2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-fork2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-fork3.c uClibc-git/test/nptl/tst-fork3.c
+--- uClibc-0.9.33.2/test/nptl/tst-fork3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-fork3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-fork4.c uClibc-git/test/nptl/tst-fork4.c
+--- uClibc-0.9.33.2/test/nptl/tst-fork4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-fork4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-initializers1.c uClibc-git/test/nptl/tst-initializers1.c
+--- uClibc-0.9.33.2/test/nptl/tst-initializers1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-initializers1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-join1.c uClibc-git/test/nptl/tst-join1.c
+--- uClibc-0.9.33.2/test/nptl/tst-join1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-join1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-join2.c uClibc-git/test/nptl/tst-join2.c
+--- uClibc-0.9.33.2/test/nptl/tst-join2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-join2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-join3.c uClibc-git/test/nptl/tst-join3.c
+--- uClibc-0.9.33.2/test/nptl/tst-join3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-join3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-join4.c uClibc-git/test/nptl/tst-join4.c
+--- uClibc-0.9.33.2/test/nptl/tst-join4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-join4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-join5.c uClibc-git/test/nptl/tst-join5.c
+--- uClibc-0.9.33.2/test/nptl/tst-join5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-join5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-key1.c uClibc-git/test/nptl/tst-key1.c
+--- uClibc-0.9.33.2/test/nptl/tst-key1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-key1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-key2.c uClibc-git/test/nptl/tst-key2.c
+--- uClibc-0.9.33.2/test/nptl/tst-key2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-key2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-key3.c uClibc-git/test/nptl/tst-key3.c
+--- uClibc-0.9.33.2/test/nptl/tst-key3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-key3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-key4.c uClibc-git/test/nptl/tst-key4.c
+--- uClibc-0.9.33.2/test/nptl/tst-key4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-key4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-kill1.c uClibc-git/test/nptl/tst-kill1.c
+--- uClibc-0.9.33.2/test/nptl/tst-kill1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-kill1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-kill2.c uClibc-git/test/nptl/tst-kill2.c
+--- uClibc-0.9.33.2/test/nptl/tst-kill2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-kill2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-kill3.c uClibc-git/test/nptl/tst-kill3.c
+--- uClibc-0.9.33.2/test/nptl/tst-kill3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-kill3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-kill4.c uClibc-git/test/nptl/tst-kill4.c
+--- uClibc-0.9.33.2/test/nptl/tst-kill4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-kill4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-kill5.c uClibc-git/test/nptl/tst-kill5.c
+--- uClibc-0.9.33.2/test/nptl/tst-kill5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-kill5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-kill6.c uClibc-git/test/nptl/tst-kill6.c
+--- uClibc-0.9.33.2/test/nptl/tst-kill6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-kill6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue1.c uClibc-git/test/nptl/tst-mqueue1.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue2.c uClibc-git/test/nptl/tst-mqueue2.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue3.c uClibc-git/test/nptl/tst-mqueue3.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <mqueue.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue4.c uClibc-git/test/nptl/tst-mqueue4.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue5.c uClibc-git/test/nptl/tst-mqueue5.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue6.c uClibc-git/test/nptl/tst-mqueue6.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue7.c uClibc-git/test/nptl/tst-mqueue7.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue8.c uClibc-git/test/nptl/tst-mqueue8.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue8.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <mqueue.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue9.c uClibc-git/test/nptl/tst-mqueue9.c
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue9.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue9.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <mqueue.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mqueue.h uClibc-git/test/nptl/tst-mqueue.h
+--- uClibc-0.9.33.2/test/nptl/tst-mqueue.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mqueue.h 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <mqueue.h>
+ #include <search.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex1.c uClibc-git/test/nptl/tst-mutex1.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex2.c uClibc-git/test/nptl/tst-mutex2.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex3.c uClibc-git/test/nptl/tst-mutex3.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex4.c uClibc-git/test/nptl/tst-mutex4.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex5.c uClibc-git/test/nptl/tst-mutex5.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex6.c uClibc-git/test/nptl/tst-mutex6.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex7.c uClibc-git/test/nptl/tst-mutex7.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex8.c uClibc-git/test/nptl/tst-mutex8.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex8.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This test checks behavior not required by POSIX. */
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-mutex9.c uClibc-git/test/nptl/tst-mutex9.c
+--- uClibc-0.9.33.2/test/nptl/tst-mutex9.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-mutex9.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-once1.c uClibc-git/test/nptl/tst-once1.c
+--- uClibc-0.9.33.2/test/nptl/tst-once1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-once1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-once2.c uClibc-git/test/nptl/tst-once2.c
+--- uClibc-0.9.33.2/test/nptl/tst-once2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-once2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-once3.c uClibc-git/test/nptl/tst-once3.c
+--- uClibc-0.9.33.2/test/nptl/tst-once3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-once3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-once4.c uClibc-git/test/nptl/tst-once4.c
+--- uClibc-0.9.33.2/test/nptl/tst-once4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-once4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-popen1.c uClibc-git/test/nptl/tst-popen1.c
+--- uClibc-0.9.33.2/test/nptl/tst-popen1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-popen1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-raise1.c uClibc-git/test/nptl/tst-raise1.c
+--- uClibc-0.9.33.2/test/nptl/tst-raise1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-raise1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock10.c uClibc-git/test/nptl/tst-rwlock10.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock10.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock10.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #define INIT PTHREAD_RWLOCK_INITIALIZER
+ #include "tst-rwlock8.c"
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock11.c uClibc-git/test/nptl/tst-rwlock11.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock11.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock11.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #define INIT PTHREAD_RWLOCK_INITIALIZER
+ #include "tst-rwlock9.c"
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock12.c uClibc-git/test/nptl/tst-rwlock12.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock12.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock12.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock13.c uClibc-git/test/nptl/tst-rwlock13.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock13.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock13.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock14.c uClibc-git/test/nptl/tst-rwlock14.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock14.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock14.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock1.c uClibc-git/test/nptl/tst-rwlock1.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock2.c uClibc-git/test/nptl/tst-rwlock2.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock3.c uClibc-git/test/nptl/tst-rwlock3.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This test case checks more than standard compliance. An
+ implementation may provide this service but it is not required to
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock4.c uClibc-git/test/nptl/tst-rwlock4.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock5.c uClibc-git/test/nptl/tst-rwlock5.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock6.c uClibc-git/test/nptl/tst-rwlock6.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock7.c uClibc-git/test/nptl/tst-rwlock7.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock8.c uClibc-git/test/nptl/tst-rwlock8.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock8.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-rwlock9.c uClibc-git/test/nptl/tst-rwlock9.c
+--- uClibc-0.9.33.2/test/nptl/tst-rwlock9.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-rwlock9.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sched1.c uClibc-git/test/nptl/tst-sched1.c
+--- uClibc-0.9.33.2/test/nptl/tst-sched1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sched1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem10.c uClibc-git/test/nptl/tst-sem10.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem10.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem10.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem1.c uClibc-git/test/nptl/tst-sem1.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem2.c uClibc-git/test/nptl/tst-sem2.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem3.c uClibc-git/test/nptl/tst-sem3.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem4.c uClibc-git/test/nptl/tst-sem4.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem5.c uClibc-git/test/nptl/tst-sem5.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem6.c uClibc-git/test/nptl/tst-sem6.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem7.c uClibc-git/test/nptl/tst-sem7.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem8.c uClibc-git/test/nptl/tst-sem8.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem8.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sem9.c uClibc-git/test/nptl/tst-sem9.c
+--- uClibc-0.9.33.2/test/nptl/tst-sem9.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sem9.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal1.c uClibc-git/test/nptl/tst-signal1.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal2.c uClibc-git/test/nptl/tst-signal2.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal3.c uClibc-git/test/nptl/tst-signal3.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal4.c uClibc-git/test/nptl/tst-signal4.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal5.c uClibc-git/test/nptl/tst-signal5.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal6.c uClibc-git/test/nptl/tst-signal6.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal6.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-signal7.c uClibc-git/test/nptl/tst-signal7.c
+--- uClibc-0.9.33.2/test/nptl/tst-signal7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-signal7.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-spin1.c uClibc-git/test/nptl/tst-spin1.c
+--- uClibc-0.9.33.2/test/nptl/tst-spin1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-spin1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-spin2.c uClibc-git/test/nptl/tst-spin2.c
+--- uClibc-0.9.33.2/test/nptl/tst-spin2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-spin2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-spin3.c uClibc-git/test/nptl/tst-spin3.c
+--- uClibc-0.9.33.2/test/nptl/tst-spin3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-spin3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-stack1.c uClibc-git/test/nptl/tst-stack1.c
+--- uClibc-0.9.33.2/test/nptl/tst-stack1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-stack1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-stack2.c uClibc-git/test/nptl/tst-stack2.c
+--- uClibc-0.9.33.2/test/nptl/tst-stack2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-stack2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Test whether it is possible to create a thread with PTHREAD_STACK_MIN
+ stack size. */
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-stack-align.h uClibc-git/test/nptl/tst-stack-align.h
+--- uClibc-0.9.33.2/test/nptl/tst-stack-align.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-stack-align.h 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdint.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-stdio1.c uClibc-git/test/nptl/tst-stdio1.c
+--- uClibc-0.9.33.2/test/nptl/tst-stdio1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-stdio1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-stdio2.c uClibc-git/test/nptl/tst-stdio2.c
+--- uClibc-0.9.33.2/test/nptl/tst-stdio2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-stdio2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-sysconf.c uClibc-git/test/nptl/tst-sysconf.c
+--- uClibc-0.9.33.2/test/nptl/tst-sysconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-sysconf.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-timer4.c uClibc-git/test/nptl/tst-timer4.c
+--- uClibc-0.9.33.2/test/nptl/tst-timer4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-timer4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls1.c uClibc-git/test/nptl/tst-tls1.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls2.c uClibc-git/test/nptl/tst-tls2.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls3.c uClibc-git/test/nptl/tst-tls3.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls3mod.c uClibc-git/test/nptl/tst-tls3mod.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls3mod.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls3mod.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <semaphore.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls4.c uClibc-git/test/nptl/tst-tls4.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <errno.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls4moda.c uClibc-git/test/nptl/tst-tls4moda.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls4moda.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls4moda.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls4modb.c uClibc-git/test/nptl/tst-tls4modb.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls4modb.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls4modb.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tls5.c uClibc-git/test/nptl/tst-tls5.c
+--- uClibc-0.9.33.2/test/nptl/tst-tls5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tls5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Check alignment, overlapping and layout of TLS variables. */
+ #include <stdint.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tsd1.c uClibc-git/test/nptl/tst-tsd1.c
+--- uClibc-0.9.33.2/test/nptl/tst-tsd1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tsd1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tsd2.c uClibc-git/test/nptl/tst-tsd2.c
+--- uClibc-0.9.33.2/test/nptl/tst-tsd2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tsd2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tsd3.c uClibc-git/test/nptl/tst-tsd3.c
+--- uClibc-0.9.33.2/test/nptl/tst-tsd3.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tsd3.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tsd4.c uClibc-git/test/nptl/tst-tsd4.c
+--- uClibc-0.9.33.2/test/nptl/tst-tsd4.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tsd4.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <limits.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-tsd5.c uClibc-git/test/nptl/tst-tsd5.c
+--- uClibc-0.9.33.2/test/nptl/tst-tsd5.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-tsd5.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <pthread.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-typesizes.c uClibc-git/test/nptl/tst-typesizes.c
+--- uClibc-0.9.33.2/test/nptl/tst-typesizes.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-typesizes.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <pthreadP.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-umask1.c uClibc-git/test/nptl/tst-umask1.c
+--- uClibc-0.9.33.2/test/nptl/tst-umask1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-umask1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <fcntl.h>
+ #include <pthread.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-unload.c uClibc-git/test/nptl/tst-unload.c
+--- uClibc-0.9.33.2/test/nptl/tst-unload.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-unload.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ License along with the GNU C Library; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
+
+ #include <dlfcn.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-vfork1.c uClibc-git/test/nptl/tst-vfork1.c
+--- uClibc-0.9.33.2/test/nptl/tst-vfork1.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-vfork1.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-vfork1x.c uClibc-git/test/nptl/tst-vfork1x.c
+--- uClibc-0.9.33.2/test/nptl/tst-vfork1x.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-vfork1x.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-vfork2.c uClibc-git/test/nptl/tst-vfork2.c
+--- uClibc-0.9.33.2/test/nptl/tst-vfork2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-vfork2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/nptl/tst-vfork2x.c uClibc-git/test/nptl/tst-vfork2x.c
+--- uClibc-0.9.33.2/test/nptl/tst-vfork2x.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/nptl/tst-vfork2x.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/pthread/Makefile uClibc-git/test/pthread/Makefile
+--- uClibc-0.9.33.2/test/pthread/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/pthread/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/pwd_grp/Makefile uClibc-git/test/pwd_grp/Makefile
+--- uClibc-0.9.33.2/test/pwd_grp/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/pwd_grp/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/regex/Makefile uClibc-git/test/regex/Makefile
+--- uClibc-0.9.33.2/test/regex/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/regex/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/regex/tst-regexloc.c uClibc-git/test/regex/tst-regexloc.c
+--- uClibc-0.9.33.2/test/regex/tst-regexloc.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/regex/tst-regexloc.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <sys/types.h>
+ #include <regex.h>
+diff -Nur uClibc-0.9.33.2/test/rpc/Makefile uClibc-git/test/rpc/Makefile
+--- uClibc-0.9.33.2/test/rpc/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/rpc/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/Rules.mak uClibc-git/test/Rules.mak
+--- uClibc-0.9.33.2/test/Rules.mak 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/Rules.mak 2014-02-03 12:32:57.000000000 +0100
+@@ -8,18 +8,34 @@
+ .SUFFIXES:
+
+ top_builddir ?= ../
++abs_top_builddir ?= $(shell cd $(top_builddir); pwd)/
+
+ TESTDIR=$(top_builddir)test/
+
+-include $(top_builddir)/Rules.mak
+-ifndef TEST_INSTALLED_UCLIBC
++include $(top_srcdir)Rules.mak
++ifeq ($(filter $(clean_targets) CLEAN_%,$(MAKECMDGOALS)),)
++ifeq ($(HAVE_DOT_CONFIG),)
++$(error no HAVE_DOT_CONFIG, failed to read .config)
++endif
++endif
++
+ ifdef UCLIBC_LDSO
+ ifeq (,$(findstring /,$(UCLIBC_LDSO)))
+-UCLIBC_LDSO := $(top_builddir)lib/$(UCLIBC_LDSO)
++UCLIBC_LDSO := $(UCLIBC_LDSO)
++else
++UCLIBC_LDSO := $(notdir $(UCLIBC_LDSO))
+ endif
+ else
+-UCLIBC_LDSO := $(firstword $(wildcard $(top_builddir)lib/ld*))
++UCLIBC_LDSO := $(notdir $(firstword $(wildcard $(top_builddir)lib/ld*)))
+ endif
++ifndef TEST_INSTALLED_UCLIBC
++ifeq ($(LDSO_SAFE_RUNPATH),y)
++UCLIBC_PATH := $(abs_top_builddir)lib
++else
++UCLIBC_PATH := $(top_builddir)lib
++endif
++else
++UCLIBC_PATH := $(RUNTIME_PREFIX)$(MULTILIB_DIR)
+ endif
+ #--------------------------------------------------------
+ # Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc.
+@@ -81,15 +97,14 @@
+ LDFLAGS += -Wl,-static -static-libgcc
+ endif
+
+-LDFLAGS += -B$(top_builddir)lib -Wl,-rpath,$(top_builddir)lib -Wl,-rpath-link,$(top_builddir)lib
+-UCLIBC_LDSO_ABSPATH=$(shell pwd)
+-ifdef TEST_INSTALLED_UCLIBC
+-LDFLAGS += -Wl,-rpath,./
+-UCLIBC_LDSO_ABSPATH=$(RUNTIME_PREFIX)$(MULTILIB_DIR)
++ifndef TEST_INSTALLED_UCLIBC
++LDFLAGS += -B$(UCLIBC_PATH) -Wl,-rpath,$(UCLIBC_PATH):$(shell pwd) -Wl,-rpath-link,$(UCLIBC_PATH):$(shell pwd)
++else
++LDFLAGS += -Wl,-rpath,$(shell pwd)
+ endif
+
+ ifeq ($(findstring -static,$(LDFLAGS)),)
+-LDFLAGS += -Wl,--dynamic-linker,$(UCLIBC_LDSO_ABSPATH)/$(UCLIBC_LDSO)
++LDFLAGS += -Wl,--dynamic-linker,$(UCLIBC_PATH)/$(UCLIBC_LDSO)
+ endif
+
+ ifeq ($(LDSO_GNU_HASH_SUPPORT),y)
+diff -Nur uClibc-0.9.33.2/test/setjmp/bug269-setjmp.c uClibc-git/test/setjmp/bug269-setjmp.c
+--- uClibc-0.9.33.2/test/setjmp/bug269-setjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/setjmp/bug269-setjmp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */ ;
++ License along with the GNU C Library; If not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* Test case for Bugzilla # 269 */
+
+diff -Nur uClibc-0.9.33.2/test/setjmp/Makefile uClibc-git/test/setjmp/Makefile
+--- uClibc-0.9.33.2/test/setjmp/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/setjmp/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/setjmp/tst-setjmp.c uClibc-git/test/setjmp/tst-setjmp.c
+--- uClibc-0.9.33.2/test/setjmp/tst-setjmp.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/setjmp/tst-setjmp.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <setjmp.h>
+diff -Nur uClibc-0.9.33.2/test/signal/Makefile uClibc-git/test/signal/Makefile
+--- uClibc-0.9.33.2/test/signal/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/signal/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/signal/tst-raise.c uClibc-git/test/signal/tst-raise.c
+--- uClibc-0.9.33.2/test/signal/tst-raise.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/signal/tst-raise.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/signal/tst-signalfd.c uClibc-git/test/signal/tst-signalfd.c
+--- uClibc-0.9.33.2/test/signal/tst-signalfd.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/signal/tst-signalfd.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,63 @@
++/* vi: set sw=4 ts=4 sts=4: */
++/*
++ * signalfd test for uClibc
++ * Copyright (C) 2012 by Kevin Cernekee <cernekee@gmail.com>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <errno.h>
++#include <error.h>
++#include <signal.h>
++#include <sys/signalfd.h>
++#include <sys/fcntl.h>
++
++static int
++do_test(void)
++{
++ int fd, ret, result = 0;
++ struct signalfd_siginfo ssi;
++ sigset_t mask;
++
++ sigemptyset(&mask);
++ sigaddset(&mask, SIGUSR1);
++ sigprocmask(SIG_BLOCK, &mask, NULL);
++
++ fd = signalfd(-1, &mask, SFD_NONBLOCK);
++ if (fd < 0) {
++ printf("signalfd() failed: %s\n", strerror(errno));
++ result = 1;
++ }
++
++ /* this should return immediately with EAGAIN due to SFD_NONBLOCK */
++ memset(&ssi, 0, sizeof(ssi));
++ ret = read(fd, &ssi, sizeof(ssi));
++ if (ret != -1 || errno != EAGAIN) {
++ error(0, 0, "first read() returned %d", ret);
++ result = 1;
++ }
++
++ kill(getpid(), SIGUSR1);
++
++ /* this should return a struct ssi indicating receipt of SIGUSR1 */
++ ret = read(fd, &ssi, sizeof(ssi));
++ if (ret != sizeof(ssi)) {
++ error(0, 0, "second read() returned %d", ret);
++ result = 1;
++ }
++
++ if (ssi.ssi_signo != SIGUSR1) {
++ error(0, 0, "ssi contains bogus signo");
++ result = 1;
++ }
++
++ return result;
++}
++
++#define TIMEOUT 5
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -Nur uClibc-0.9.33.2/test/signal/tst-sigsimple.c uClibc-git/test/signal/tst-sigsimple.c
+--- uClibc-0.9.33.2/test/signal/tst-sigsimple.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/signal/tst-sigsimple.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <signal.h>
+diff -Nur uClibc-0.9.33.2/test/silly/Makefile uClibc-git/test/silly/Makefile
+--- uClibc-0.9.33.2/test/silly/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/silly/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/stat/Makefile uClibc-git/test/stat/Makefile
+--- uClibc-0.9.33.2/test/stat/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/stat/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/stdio/Makefile uClibc-git/test/stdio/Makefile
+--- uClibc-0.9.33.2/test/stdio/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/stdio/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/stdlib/Makefile uClibc-git/test/stdlib/Makefile
+--- uClibc-0.9.33.2/test/stdlib/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/stdlib/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/stdlib/testarc4random.c uClibc-git/test/stdlib/testarc4random.c
+--- uClibc-0.9.33.2/test/stdlib/testarc4random.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/stdlib/testarc4random.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,12 @@
++#include <stdlib.h>
++#include <stdio.h>
++
++int main(void)
++{
++#ifdef __UCLIBC_HAS_ARC4RANDOM__
++ int random_number;
++ random_number = arc4random() % 65536;
++ printf("%d\n", random_number);
++#endif
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/test/stdlib/test-canon2.c uClibc-git/test/stdlib/test-canon2.c
+--- uClibc-0.9.33.2/test/stdlib/test-canon2.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/stdlib/test-canon2.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <string.h>
+diff -Nur uClibc-0.9.33.2/test/stdlib/test-canon.c uClibc-git/test/stdlib/test-canon.c
+--- uClibc-0.9.33.2/test/stdlib/test-canon.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/stdlib/test-canon.c 2014-02-03 12:32:57.000000000 +0100
+@@ -15,9 +15,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ /* This file must be run from within a directory called "stdlib". */
+
+diff -Nur uClibc-0.9.33.2/test/string/Makefile uClibc-git/test/string/Makefile
+--- uClibc-0.9.33.2/test/string/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/string/stratcliff.c uClibc-git/test/string/stratcliff.c
+--- uClibc-0.9.33.2/test/string/stratcliff.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/stratcliff.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define _GNU_SOURCE 1
+
+diff -Nur uClibc-0.9.33.2/test/string/testcopy.c uClibc-git/test/string/testcopy.c
+--- uClibc-0.9.33.2/test/string/testcopy.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/testcopy.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/string/tester.c uClibc-git/test/string/tester.c
+--- uClibc-0.9.33.2/test/string/tester.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/tester.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+diff -Nur uClibc-0.9.33.2/test/string/test-ffs.c uClibc-git/test/string/test-ffs.c
+--- uClibc-0.9.33.2/test/string/test-ffs.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/test-ffs.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdlib.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/string/tst-bswap.c uClibc-git/test/string/tst-bswap.c
+--- uClibc-0.9.33.2/test/string/tst-bswap.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/tst-bswap.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <byteswap.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/string/tst-inlcall.c uClibc-git/test/string/tst-inlcall.c
+--- uClibc-0.9.33.2/test/string/tst-inlcall.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/string/tst-inlcall.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+diff -Nur uClibc-0.9.33.2/test/termios/Makefile uClibc-git/test/termios/Makefile
+--- uClibc-0.9.33.2/test/termios/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/termios/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/Test.mak uClibc-git/test/Test.mak
+--- uClibc-0.9.33.2/test/Test.mak 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/Test.mak 2014-02-03 12:32:57.000000000 +0100
+@@ -35,7 +35,9 @@
+ CLEAN_TARGETS := $(U_TARGETS) $(G_TARGETS)
+ CLEAN_TARGETS += $(TESTS_DISABLED) $(addsuffix _glibc,$(TESTS_DISABLED)) $(GLIBC_TESTS_DISABLED)
+ COMPILE_TARGETS := $(TARGETS)
+-RUN_TARGETS := $(addsuffix .exe,$(TARGETS))
++# We sort the targets so uClibc and host-libc tests are run adjacent
++RUN_TARGETS := $(sort $(addsuffix .exe,$(TARGETS)))
++COMPILE_TARGETS := $(sort $(COMPILE_TARGETS))
+ # provide build rules even for disabled tests:
+ U_TARGETS += $(TESTS_DISABLED)
+ G_TARGETS += $(addsuffix _glibc,$(TESTS_DISABLED)) $(GLIBC_TESTS_DISABLED)
+@@ -99,13 +101,15 @@
+
+ $(U_TARGETS): $(U_TARGET_SRCS) $(MAKE_SRCS)
+ $(showlink)
+- $(Q)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(notdir $(CURDIR))) $(CFLAGS_$@) -c $@.c -o $@.o
++ $(Q)$(CC) $(filter-out $(CFLAGS-OMIT-$@),$(CFLAGS)) $(EXTRA_CFLAGS) $(CFLAGS_$(notdir $(CURDIR))) $(CFLAGS_$@) -c $@.c -o $@.o
+ $(Q)$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LDFLAGS) $(LDFLAGS_$@)
+
+ $(G_TARGETS): $(U_TARGET_SRCS) $(MAKE_SRCS)
+ $(showlink)
+- $(Q)$(HOSTCC) $(HOST_CFLAGS) $(CFLAGS_$(notdir $(CURDIR))) $(CFLAGS_$(patsubst %_glibc,%,$@)) -c $(patsubst %_glibc,%,$@).c -o $@.o
+- $(Q)$(HOSTCC) $(HOST_LDFLAGS) $@.o -o $@ $(EXTRA_LDFLAGS) $(LDFLAGS_$(patsubst %_glibc,%,$@))
++ $(Q)$(HOSTCC) $(filter-out $(HOST_CFLAGS-OMIT-$(patsubst %_glibc,%,$@)),$(HOST_CFLAGS)) \
++ $(CFLAGS_$(notdir $(CURDIR))) $(CFLAGS_$(patsubst %_glibc,%,$@)) \
++ -c $(patsubst %_glibc,%,$@).c -o $@.o
++ $(Q)$(HOSTCC) $(HOST_LDFLAGS) $@.o -o $@ $(EXTRA_LDFLAGS) $(LDFLAGS_$(patsubst %_glibc,%,$@)) $(LDFLAGS_$@)
+
+
+ shell_%:
+@@ -117,9 +121,11 @@
+ %.so: %.c
+ $(showlink)
+ $(Q)$(CC) \
+- $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(patsubst %_glibc,%,$@)) \
++ $(filter-out $(CFLAGS-OMIT-$<),$(CFLAGS)) $(EXTRA_CFLAGS) \
++ $(CFLAGS_$(patsubst %_glibc,%,$@)) \
+ -fPIC -shared $< -o $@ -Wl,-soname,$@ \
+- $(LDFLAGS) $(EXTRA_LIBS) $(LDFLAGS_$(patsubst %_glibc,%,$@))
++ $(filter-out $(LDFLAGS-OMIT-$<),$(LDFLAGS)) $(EXTRA_LIBS) \
++ $(LDFLAGS_$(patsubst %_glibc,%,$@))
+
+ clean:
+ $(showclean)
+diff -Nur uClibc-0.9.33.2/test/test-skeleton.c uClibc-git/test/test-skeleton.c
+--- uClibc-0.9.33.2/test/test-skeleton.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/test-skeleton.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <getopt.h>
+@@ -104,7 +103,7 @@
+ create_temp_file (const char *base, char **filename)
+ {
+ char *fname;
+- int fd;
++ int _fd;
+
+ fname = (char *) malloc (strlen (test_dir) + 1 + strlen (base)
+ + sizeof ("XXXXXX"));
+@@ -115,8 +114,8 @@
+ }
+ strcpy (stpcpy (stpcpy (stpcpy (fname, test_dir), "/"), base), "XXXXXX");
+
+- fd = mkstemp (fname);
+- if (fd == -1)
++ _fd = mkstemp (fname);
++ if (_fd == -1)
+ {
+ printf ("cannot open temporary file '%s': %s\n", fname, strerror(errno));
+ free (fname);
+@@ -127,13 +126,13 @@
+ if (filename != NULL)
+ *filename = fname;
+
+- return fd;
++ return _fd;
+ }
+
+ /* Timeout handler. We kill the child and exit with an error. */
+ static void
+ __attribute__ ((noreturn))
+-timeout_handler (int sig __attribute__ ((unused)))
++signal_handler (int sig __attribute__ ((unused)))
+ {
+ int killed = 0;
+ int status;
+@@ -168,6 +167,12 @@
+ CLEANUP_HANDLER;
+ #endif
+
++ if (sig == SIGINT)
++ {
++ signal (sig, SIG_DFL);
++ raise (sig);
++ }
++
+ /* If we expected this signal: good! */
+ #ifdef EXPECTED_SIGNAL
+ if (EXPECTED_SIGNAL == SIGALRM)
+@@ -190,6 +195,7 @@
+ exit (1);
+ }
+
++#ifdef __XXX_HANDLE_CTRL_C
+ static void
+ __attribute__ ((noreturn))
+ handler_killpid(int sig)
+@@ -199,6 +205,7 @@
+ raise(sig); /* kill ourself */
+ _exit(128 + sig); /* paranoia */
+ }
++#endif
+
+ /* We provide the entry point here. */
+ int
+@@ -345,18 +352,23 @@
+ exit (1);
+ }
+
++#ifdef __XXX_HANDLE_CTRL_C
+ signal (SIGTERM, handler_killpid);
+ signal (SIGINT, handler_killpid);
+ signal (SIGQUIT, handler_killpid);
++#endif
+
+ /* Set timeout. */
+ #ifndef TIMEOUT
+ /* Default timeout is two seconds. */
+ # define TIMEOUT 2
+ #endif
+- signal (SIGALRM, timeout_handler);
++ signal (SIGALRM, signal_handler);
+ alarm (TIMEOUT * timeoutfactor);
+
++ /* Make sure we clean up if the wrapper gets interrupted. */
++ signal (SIGINT, signal_handler);
++
+ /* Wait for the regular termination. */
+ termpid = TEMP_FAILURE_RETRY (waitpid (pid, &status, 0));
+ if (termpid == -1)
+diff -Nur uClibc-0.9.33.2/test/testsuite.h uClibc-git/test/testsuite.h
+--- uClibc-0.9.33.2/test/testsuite.h 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/testsuite.h 2014-02-03 12:32:57.000000000 +0100
+@@ -27,11 +27,12 @@
+ {
+ failures++;
+
+- printf("\nFAILED TEST %lu: \n\t%s\n", (unsigned long)test_number, command);
++ printf("\nFAILED TEST %lu: \n\t%s\nResult: %d",
++ (unsigned long)test_number, command, result);
+ printf("AT LINE: %d, FILE: %s\n\n", line, file);
+ }
+
+-void success_msg(int result, const char* command)
++void success_msg(int result __attribute__((unused)), const char* command __attribute__((unused)))
+ {
+ #if 0
+ printf("passed test: %s == 0\n", command);
+diff -Nur uClibc-0.9.33.2/test/time/Makefile uClibc-git/test/time/Makefile
+--- uClibc-0.9.33.2/test/time/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/time/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/time/test_time.c uClibc-git/test/time/test_time.c
+--- uClibc-0.9.33.2/test/time/test_time.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/time/test_time.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,9 +12,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -Nur uClibc-0.9.33.2/test/time/tst-strptime.c uClibc-git/test/time/tst-strptime.c
+--- uClibc-0.9.33.2/test/time/tst-strptime.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/time/tst-strptime.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <locale.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/time/tst-timerfd.c uClibc-git/test/time/tst-timerfd.c
+--- uClibc-0.9.33.2/test/time/tst-timerfd.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/time/tst-timerfd.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,71 @@
++/* vi: set sw=4 ts=4 sts=4: */
++/*
++ * timerfd test for uClibc
++ * Copyright (C) 2012 by Kevin Cernekee <cernekee@gmail.com>
++ *
++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <errno.h>
++#include <error.h>
++#include <signal.h>
++#include <stdint.h>
++#include <inttypes.h>
++#include <time.h>
++#include <sys/timerfd.h>
++#include <sys/fcntl.h>
++
++static int
++do_test(void)
++{
++ int fd, ret, result = 0;
++ struct itimerspec s;
++ uint64_t val;
++ time_t start, now;
++
++ fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);
++ if (fd < 0) {
++ perror("timerfd() failed");
++ result = 1;
++ }
++ s.it_value.tv_sec = 1;
++ s.it_value.tv_nsec = 0;
++ s.it_interval.tv_sec = 0;
++ s.it_interval.tv_nsec = 0;
++ timerfd_settime(fd, 0, &s, NULL);
++ start = time(NULL);
++
++ /* this should return immediately with EAGAIN due to TFD_NONBLOCK */
++ ret = read(fd, &val, sizeof(val));
++ if (ret != -1 || errno != EAGAIN) {
++ error(0, 0, "first read() returned %d", ret);
++ result = 1;
++ }
++
++ /* let the timer expire, then check it again */
++ do {
++ now = time(NULL);
++ } while (now - start < 2);
++
++ ret = read(fd, &val, sizeof(val));
++ if (ret != sizeof(val)) {
++ error(0, 0, "second read() returned %d", ret);
++ result = 1;
++ }
++
++ /* we are expecting a single expiration, since it_interval is 0 */
++ if (val != 1) {
++ error(0, 0, "wrong number of expirations: %" PRIx64, val);
++ result = 1;
++ }
++
++ return result;
++}
++
++#define TIMEOUT 5
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -Nur uClibc-0.9.33.2/test/time/tst-timezone.c uClibc-git/test/time/tst-timezone.c
+--- uClibc-0.9.33.2/test/time/tst-timezone.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/time/tst-timezone.c 2014-02-03 12:32:57.000000000 +0100
+@@ -13,9 +13,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <time.h>
+ #include <stdio.h>
+diff -Nur uClibc-0.9.33.2/test/tls/Makefile.in uClibc-git/test/tls/Makefile.in
+--- uClibc-0.9.33.2/test/tls/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/tls/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -102,9 +102,9 @@
+ LDFLAGS_tst-tls7 := -ldl
+ LDFLAGS_tst-tls8 := -ldl
+ LDFLAGS_tst-tls9 := -ldl
+-LDFLAGS_tst-tls10 := -Wl,-rpath-link=. tst-tlsmod8.so
+-LDFLAGS_tst-tls11 := -Wl,-rpath-link=. tst-tlsmod10.so
+-LDFLAGS_tst-tls12 := -Wl,-rpath-link=. tst-tlsmod12.so
++LDFLAGS_tst-tls10 := -Wl,-rpath-link=. tst-tlsmod8.so tst-tlsmod7.so
++LDFLAGS_tst-tls11 := -Wl,-rpath-link=. tst-tlsmod9.so tst-tlsmod10.so
++LDFLAGS_tst-tls12 := -Wl,-rpath-link=. tst-tlsmod11.so tst-tlsmod12.so
+ LDFLAGS_tst-tls13 := -ldl -Wl,-rpath-link=.
+ LDFLAGS_tst-tls14 := -ldl -Wl,-rpath-link=. tst-tlsmod14a.so
+ LDFLAGS_tst-tls15 := -ldl -Wl,-rpath-link=.
+diff -Nur uClibc-0.9.33.2/test/tls/tst-tls6.c uClibc-git/test/tls/tst-tls6.c
+--- uClibc-0.9.33.2/test/tls/tst-tls6.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/tls/tst-tls6.c 2014-02-15 14:18:15.000000000 +0100
+@@ -38,13 +38,12 @@
+ time. The value of the first round is used. */
+ #ifdef __UCLIBC__
+ if (modid == -1)
+- modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
+- else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
+- != (size_t) modid)
++ modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
++ else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
+ {
+ printf ("round %d: modid now %zu, initially %d\n",
+ i,
+- ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
++ ((struct dyn_elf *)h)->dyn->l_tls_modid,
+ modid);
+ result = 1;
+ }
+diff -Nur uClibc-0.9.33.2/test/tls/tst-tls7.c uClibc-git/test/tls/tst-tls7.c
+--- uClibc-0.9.33.2/test/tls/tst-tls7.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/tls/tst-tls7.c 2014-02-15 14:18:15.000000000 +0100
+@@ -36,13 +36,12 @@
+ time. The value of the first round is used. */
+ #ifdef __UCLIBC__
+ if (modid == -1)
+- modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
+- else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
+- != (size_t) modid)
++ modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
++ else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
+ {
+ printf ("round %d: modid now %zu, initially %d\n",
+ i,
+- ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
++ ((struct dyn_elf *)h)->dyn->l_tls_modid,
+ modid);
+ result = 1;
+ }
+diff -Nur uClibc-0.9.33.2/test/tls/tst-tls8.c uClibc-git/test/tls/tst-tls8.c
+--- uClibc-0.9.33.2/test/tls/tst-tls8.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/tls/tst-tls8.c 2014-02-15 14:18:15.000000000 +0100
+@@ -41,13 +41,12 @@
+ time. The value of the first round is used. */
+ #ifdef __UCLIBC__
+ if (modid1 == (size_t) -1)
+- modid1 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
+- else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
+- != (size_t) modid1)
++ modid1 = ((struct dyn_elf *) h1)->dyn->l_tls_modid;
++ else if (((struct dyn_elf *)h1)->dyn->l_tls_modid != (size_t) modid1)
+ {
+ printf ("round %d: modid now %zd, initially %zd\n",
+ i,
+- ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
++ ((struct dyn_elf *)h1)->dyn->l_tls_modid,
+ modid1);
+ result = 1;
+ }
+@@ -85,23 +84,23 @@
+ time. The value of the first round is used. */
+ #ifdef __UCLIBC__
+ if (modid2 == (size_t) -1)
+- modid2 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
+- else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
++ modid2 = ((struct dyn_elf *)h2)->dyn->l_tls_modid;
++ else if (((struct dyn_elf *)h2)->dyn->l_tls_modid
+ != (size_t) modid2)
+ {
+ printf ("round %d: modid now %zd, initially %zd\n",
+ i,
+- ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
++ ((struct dyn_elf *)h2)->dyn->l_tls_modid,
+ modid2);
+ result = 1;
+ }
+ #else
+ if (modid2 == (size_t) -1)
+- modid2 = ((struct link_map *) h1)->l_tls_modid;
+- else if (((struct link_map *) h1)->l_tls_modid != modid2)
++ modid2 = ((struct link_map *) h2)->l_tls_modid;
++ else if (((struct link_map *) h2)->l_tls_modid != modid2)
+ {
+ printf ("round %d: modid now %zd, initially %zd\n",
+- i, ((struct link_map *) h1)->l_tls_modid, modid2);
++ i, ((struct link_map *) h2)->l_tls_modid, modid2);
+ result = 1;
+ }
+ #endif
+@@ -139,12 +138,12 @@
+ We make sure that the module gets assigned the same ID every
+ time. The value of the first round is used. */
+ #ifdef __UCLIBC__
+- if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
++ if (((struct dyn_elf *)h1)->dyn->l_tls_modid
+ != modid1)
+ {
+ printf ("round %d: modid now %zd, initially %zd\n",
+ i,
+- ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
++ ((struct dyn_elf *)h1)->dyn->l_tls_modid,
+ modid1);
+ result = 1;
+ }
+@@ -179,20 +178,20 @@
+ We make sure that the module gets assigned the same ID every
+ time. The value of the first round is used. */
+ #ifdef __UCLIBC__
+- if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
++ if (((struct dyn_elf *)h2)->dyn->l_tls_modid
+ != modid2)
+ {
+ printf ("round %d: modid now %zd, initially %zd\n",
+ i,
+- ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
++ ((struct dyn_elf *)h2)->dyn->l_tls_modid,
+ modid2);
+ result = 1;
+ }
+ #else
+- if (((struct link_map *) h1)->l_tls_modid != modid2)
++ if (((struct link_map *) h2)->l_tls_modid != modid2)
+ {
+ printf ("round %d: modid now %zd, initially %zd\n",
+- i, ((struct link_map *) h1)->l_tls_modid, modid2);
++ i, ((struct link_map *) h2)->l_tls_modid, modid2);
+ result = 1;
+ }
+ #endif
+diff -Nur uClibc-0.9.33.2/test/unistd/Makefile uClibc-git/test/unistd/Makefile
+--- uClibc-0.9.33.2/test/unistd/Makefile 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/unistd/Makefile 2014-02-03 12:32:57.000000000 +0100
+@@ -2,6 +2,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ top_builddir=../../
++top_srcdir=../../
+ include ../Rules.mak
+ -include Makefile.in
+ include ../Test.mak
+diff -Nur uClibc-0.9.33.2/test/unistd/Makefile.in uClibc-git/test/unistd/Makefile.in
+--- uClibc-0.9.33.2/test/unistd/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/unistd/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -2,7 +2,10 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ ifeq ($(UCLIBC_HAS_LFS),)
+-TESTS_DISABLED := tst-preadwrite64
++TESTS_DISABLED := tst-preadwrite64 tst-posix_fallocate64
++endif
++ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),)
++TESTS_DISABLED += tst-posix_fallocate
+ endif
+ OPTS_getopt := -abcXXX -9
+ OPTS_getopt_long := --add XXX --delete YYY --verbose
+diff -Nur uClibc-0.9.33.2/test/unistd/tst-posix_fallocate64.c uClibc-git/test/unistd/tst-posix_fallocate64.c
+--- uClibc-0.9.33.2/test/unistd/tst-posix_fallocate64.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/unistd/tst-posix_fallocate64.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,2 @@
++#define TST_POSIX_FALLOCATE64
++#include "tst-posix_fallocate.c"
+diff -Nur uClibc-0.9.33.2/test/unistd/tst-posix_fallocate.c uClibc-git/test/unistd/tst-posix_fallocate.c
+--- uClibc-0.9.33.2/test/unistd/tst-posix_fallocate.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-git/test/unistd/tst-posix_fallocate.c 2014-02-03 12:32:57.000000000 +0100
+@@ -0,0 +1,127 @@
++#include <fcntl.h>
++#include <sys/stat.h>
++
++#ifndef TST_POSIX_FALLOCATE64
++# define stat64 stat
++# define fstat64 fstat
++# else
++# ifndef O_LARGEFILE
++# error no O_LARGEFILE but you want to test with LFS enabled
++# endif
++#endif
++
++static void do_prepare (void);
++#define PREPARE(argc, argv) do_prepare ()
++static int do_test (void);
++#define TEST_FUNCTION do_test ()
++#include <test-skeleton.c>
++
++static int fd;
++static void
++do_prepare (void)
++{
++ fd = create_temp_file ("tst-posix_fallocate.", NULL);
++ if (fd == -1)
++ {
++ printf ("cannot create temporary file: %m\n");
++ exit (1);
++ }
++}
++
++
++static int
++do_test (void)
++{
++ struct stat64 st;
++
++ if (fstat64 (fd, &st) != 0)
++ {
++ puts ("1st fstat failed");
++ return 1;
++ }
++
++ if (st.st_size != 0)
++ {
++ puts ("file not created with size 0");
++ return 1;
++ }
++
++ if (posix_fallocate (fd, 512, 768) != 0)
++ {
++ puts ("1st posix_fallocate call failed");
++ return 1;
++ }
++
++ if (fstat64 (fd, &st) != 0)
++ {
++ puts ("2nd fstat failed");
++ return 1;
++ }
++
++ if (st.st_size != 512 + 768)
++ {
++ printf ("file size after 1st posix_fallocate call is %llu, expected %u\n",
++ (unsigned long long int) st.st_size, 512u + 768u);
++ return 1;
++ }
++
++ if (posix_fallocate (fd, 0, 1024) != 0)
++ {
++ puts ("2nd posix_fallocate call failed");
++ return 1;
++ }
++
++ if (fstat64 (fd, &st) != 0)
++ {
++ puts ("3rd fstat failed");
++ return 1;
++ }
++
++ if (st.st_size != 512 + 768)
++ {
++ puts ("file size changed in 2nd posix_fallocate");
++ return 1;
++ }
++
++ if (posix_fallocate (fd, 2048, 64) != 0)
++ {
++ puts ("3rd posix_fallocate call failed");
++ return 1;
++ }
++
++ if (fstat64 (fd, &st) != 0)
++ {
++ puts ("4th fstat failed");
++ return 1;
++ }
++
++ if (st.st_size != 2048 + 64)
++ {
++ printf ("file size after 3rd posix_fallocate call is %llu, expected %u\n",
++ (unsigned long long int) st.st_size, 2048u + 64u);
++ return 1;
++ }
++#ifdef TST_POSIX_FALLOCATE64
++ if (posix_fallocate64 (fd, 4097ULL, 4294967295ULL + 2ULL) != 0)
++ {
++ puts ("4th posix_fallocate call failed");
++ return 1;
++ }
++
++ if (fstat64 (fd, &st) != 0)
++ {
++ puts ("5th fstat failed");
++ return 1;
++ }
++
++ if (st.st_size != 4097ULL + 4294967295ULL + 2ULL)
++ {
++ printf ("file size after 4th posix_fallocate call is %llu, expected %llu\n",
++ (unsigned long long int) st.st_size, 4097ULL + 4294967295ULL + 2ULL);
++ return 1;
++ }
++#endif
++ close (fd);
++
++ return 0;
++}
+diff -Nur uClibc-0.9.33.2/test/unistd/tst-preadwrite64.c uClibc-git/test/unistd/tst-preadwrite64.c
+--- uClibc-0.9.33.2/test/unistd/tst-preadwrite64.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/unistd/tst-preadwrite64.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #define PREAD pread64
+ #define PWRITE pwrite64
+diff -Nur uClibc-0.9.33.2/test/unistd/tst-preadwrite.c uClibc-git/test/unistd/tst-preadwrite.c
+--- uClibc-0.9.33.2/test/unistd/tst-preadwrite.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/test/unistd/tst-preadwrite.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,9 +14,8 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
+
+ #include <errno.h>
+ #include <error.h>
+diff -Nur uClibc-0.9.33.2/TODO uClibc-git/TODO
+--- uClibc-0.9.33.2/TODO 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/TODO 2014-02-03 12:32:56.000000000 +0100
+@@ -88,6 +88,11 @@
+ *) Cleanup/scrub all the Makefile copyright junk
+ *) Fix dlopen, for both static and dynamic cases, and make it
+ fully comply with SuSv3
++ *) check if sched_getcpu is only pulled in where it should be
++ *) remove HANDLE_OLDER_RLIMIT, NEW_GETRLIMIT (conditionalize on
++ ugetrlimit, it seems, else use the modern variant)
++ *) simplify exec*() in the light of execvpe (perhaps single internal
++ impl); USE_GNU for execvpe (and other GNU extensions, see psm).
+
+
+ TODO list for AFTER the uClibc 1.0.0 release:
+@@ -180,3 +185,4 @@
+ b) Write a space-efficient gettext substitute, to avoid storing large amounts
+ of redundant data.
+
++
+diff -Nur uClibc-0.9.33.2/utils/chroot_realpath.c uClibc-git/utils/chroot_realpath.c
+--- uClibc-0.9.33.2/utils/chroot_realpath.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/utils/chroot_realpath.c 2014-02-03 12:32:57.000000000 +0100
+@@ -14,8 +14,7 @@
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; see the file COPYING.LIB. If not,
+- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- * Boston, MA 02111-1307, USA.
++ * see <http://www.gnu.org/licenses/>.
+ *
+ * 2005/09/12: Dan Howell (modified from realpath.c to emulate chroot)
+ */
+diff -Nur uClibc-0.9.33.2/utils/getconf.c uClibc-git/utils/getconf.c
+--- uClibc-0.9.33.2/utils/getconf.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/utils/getconf.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,10 +12,10 @@
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software Foundation,
+- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++ along with this program; if not, see <http://www.gnu.org/licenses/>. */
+
+ #define _GNU_SOURCE 1
++#include "porting.h"
+ #include <unistd.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -1052,13 +1052,11 @@
+ };
+ static const int nspecs = sizeof (specs) / sizeof (specs[0]);
+
+-#ifdef __UCLIBC_HAS___PROGNAME__
+-extern const char *__progname;
+-#else
+-#define __progname "foo"
++#ifndef __UCLIBC_HAS___PROGNAME__
++static const char *__progname = "getconf";
+ #endif
+
+-static void
++static attribute_noreturn void
+ usage (void)
+ {
+ fprintf (stderr,
+@@ -1070,7 +1068,7 @@
+ }
+
+
+-static void
++static attribute_noreturn void
+ print_all (const char *path)
+ {
+ register const struct conf *c;
+diff -Nur uClibc-0.9.33.2/utils/iconv.c uClibc-git/utils/iconv.c
+--- uClibc-0.9.33.2/utils/iconv.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/utils/iconv.c 2014-02-03 12:32:57.000000000 +0100
+@@ -12,8 +12,8 @@
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the Free
+- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
+ */
+
+ /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
+@@ -98,15 +98,22 @@
+ * Manuel
+ */
+
++/* keep libgen before string.h - and porting.h to use the
++ * XPG version of basename */
++#include <libgen.h>
+ #include "porting.h"
+ #include <string.h>
+ #include <iconv.h>
+ #include <stdarg.h>
+-#include <libgen.h>
+ #include <wchar.h>
+ #include "wchar.c" /* for _UC_iconv_t and __iconv_codesets */
+
+-extern const unsigned char __iconv_codesets[];
++#ifdef L_iconv_main
++static
++#else
++extern
++#endif
++const unsigned char __iconv_codesets[];
+
+ #define IBUF BUFSIZ
+ #define OBUF BUFSIZ
+diff -Nur uClibc-0.9.33.2/utils/ldconfig.c uClibc-git/utils/ldconfig.c
+--- uClibc-0.9.33.2/utils/ldconfig.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/utils/ldconfig.c 2014-02-03 12:32:57.000000000 +0100
+@@ -57,8 +57,6 @@
+ /* Code indicating core file. */
+ #define CMAGIC 0421
+
+-char *___strtok = NULL;
+-
+ char *prog = NULL;
+ int debug = 0; /* debug mode */
+ int verbose = 0; /* verbose mode */
+@@ -96,6 +94,7 @@
+ extern char *chroot_realpath(const char *chroot, const char *path,
+ char resolved_path[]);
+
++#if defined __UCLIBC_STATIC_LDCONFIG__ || !defined __UCLIBC_HAS_BSD_ERR__
+ /* These two are used internally -- you shouldn't need to use them */
+ static void verror_msg(const char *s, va_list p)
+ {
+@@ -114,8 +113,7 @@
+ fprintf(stderr, "\n");
+ }
+
+-static void err(int errnum, const char *s, ...) attribute_noreturn;
+-static void err(int errnum, const char *s, ...)
++static attribute_noreturn void err(int errnum, const char *s, ...)
+ {
+ va_list p;
+
+@@ -146,6 +144,9 @@
+ vperror_msg(s, p);
+ va_end(p);
+ }
++#else
++# include <err.h>
++#endif
+
+ static void *xmalloc(size_t size)
+ {
+@@ -257,10 +258,10 @@
+ && N_MAGIC_SWAP(exec) != QMAGIC) {
+ elf_hdr = (ElfW(Ehdr) *) & exec;
+ if (elf_hdr->e_ident[0] != 0x7f ||
+- strncmp((char *)elf_hdr->e_ident + 1, "ELF", 3) != 0)
++ strncmp((const char *)elf_hdr->e_ident + 1, "ELF", 3) != 0)
+ {
+ /* silently ignore linker scripts */
+- if (strncmp((char *)&exec, "/* GNU ld", 9) != 0)
++ if (strncmp((const char *)&exec, "/* GNU ld", 9) != 0)
+ warnx("%s is not a shared library, skipping", buff);
+ } else {
+ /* always call readsoname to update type */
+@@ -282,7 +283,7 @@
+ /* if the soname does not match the filename,
+ issue a warning, but only in debug mode. */
+ int len = strlen(good);
+- if (debug && (strncmp(good, name, len) != 0
++ if (debug && (strncmp((const char *)good, name, len) != 0
+ || (name[len] != '\0' && name[len] != '.')))
+ warnx("%s has inconsistent soname (%s)", buff, good);
+ }
+@@ -784,8 +785,7 @@
+ }
+ #endif
+
+-static void usage(void) attribute_noreturn;
+-static void usage(void)
++static attribute_noreturn void usage(void)
+ {
+ fprintf(stderr,
+ #ifdef __LDSO_CACHE_SUPPORT__
+diff -Nur uClibc-0.9.33.2/utils/ldd.c uClibc-git/utils/ldd.c
+--- uClibc-0.9.33.2/utils/ldd.c 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/utils/ldd.c 2014-02-03 12:32:57.000000000 +0100
+@@ -20,6 +20,11 @@
+ #define ELFCLASSM ELFCLASS64
+ #endif
+
++#if defined(__arc__)
++#define MATCH_MACHINE(x) (x == EM_ARCOMPACT)
++#define ELFCLASSM ELFCLASS32
++#endif
++
+ #if defined(__arm__) || defined(__thumb__)
+ #define MATCH_MACHINE(x) (x == EM_ARM)
+ #define ELFCLASSM ELFCLASS32
+@@ -63,6 +68,11 @@
+ #define ELFCLASSM ELFCLASS32
+ #endif
+
++#if defined(__metag__)
++#define MATCH_MACHINE(x) (x == EM_METAG)
++#define ELFCLASSM ELFCLASS32
++#endif
++
+ #if defined(__mips__)
+ #define MATCH_MACHINE(x) (x == EM_MIPS || x == EM_MIPS_RS3_LE)
+ #define ELFCLASSM ELFCLASS32
+@@ -106,6 +116,11 @@
+ #define ELFCLASSM ELFCLASS32
+ #endif
+
++#if defined(__xtensa__)
++#define MATCH_MACHINE(x) (x == EM_XTENSA)
++#define ELFCLASSM ELFCLASS32
++#endif
++
+ #ifndef MATCH_MACHINE
+ # ifdef __linux__
+ # include <asm/elf.h>
+@@ -127,7 +142,6 @@
+ #define ELFDATAM ELFDATA2MSB
+ #endif
+
+-#define ARRAY_SIZE(v) (sizeof(v) / sizeof(*v))
+ #define TRUSTED_LDSO UCLIBC_RUNTIME_PREFIX "lib/" UCLIBC_LDSO
+
+ struct library {
+@@ -145,7 +159,7 @@
+
+ static __inline__ uint32_t byteswap32_to_host(uint32_t value)
+ {
+- if (byteswap == 1) {
++ if (byteswap) {
+ return (bswap_32(value));
+ } else {
+ return (value);
+@@ -153,7 +167,7 @@
+ }
+ static __inline__ uint64_t byteswap64_to_host(uint64_t value)
+ {
+- if (byteswap == 1) {
++ if (byteswap) {
+ return (bswap_64(value));
+ } else {
+ return (value);
+@@ -232,14 +246,7 @@
+ }
+
+ /* Check if the target endianness matches the host's endianness */
+- byteswap = 0;
+- if (UCLIBC_ENDIAN_HOST == UCLIBC_ENDIAN_LITTLE) {
+- if (ehdr->e_ident[5] == ELFDATA2MSB)
+- byteswap = 1;
+- } else if (UCLIBC_ENDIAN_HOST == UCLIBC_ENDIAN_BIG) {
+- if (ehdr->e_ident[5] == ELFDATA2LSB)
+- byteswap = 1;
+- }
++ byteswap = !(ehdr->e_ident[5] == ELFDATAM);
+
+ /* Be very lazy, and only byteswap the stuff we use */
+ if (byteswap) {
+@@ -707,6 +714,7 @@
+ };
+ # ifdef __LDSO_STANDALONE_SUPPORT__
+ char * lib_path = getenv("LD_LIBRARY_PATH");
++
+ /* The 'extended' environment inclusing the LD_LIBRARY_PATH */
+ static char *ext_environment[ARRAY_SIZE(environment) + 1];
+ char **envp = (char **) environment;
+diff -Nur uClibc-0.9.33.2/utils/Makefile.in uClibc-git/utils/Makefile.in
+--- uClibc-0.9.33.2/utils/Makefile.in 2012-05-15 09:20:09.000000000 +0200
++++ uClibc-git/utils/Makefile.in 2014-02-03 12:32:57.000000000 +0100
+@@ -10,6 +10,7 @@
+
+ CFLAGS-utils := \
+ $(SSP_ALL_CFLAGS) \
++ -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \
+ -I$(top_srcdir)ldso/include \
+ -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \
+ -DUCLIBC_LDSO=\"$(UCLIBC_LDSO)\" \
+@@ -36,8 +37,7 @@
+ # Need CFLAGS-utils explicitly, because the source file is not located in utils
+ CFLAGS-iconv := $(CFLAGS-utils) \
+ $(CFLAGS-utils-shared) \
+- -I$(top_srcdir)libc/misc/wchar \
+- -DL_iconv_main \
++ -I$(top_srcdir)libc/misc/wchar
+
+ CFLAGS-locale := $(CFLAGS-utils)
+ CFLAGS-getconf :=$(CFLAGS-utils) \
+@@ -56,9 +56,11 @@
+ $(UTILS_CONFIG_FLAGS-y)
+ BUILD_CFLAGS-ldconfig.host := \
+ -DBUILDING_LINKAGE \
++ -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \
+ -I$(top_srcdir)ldso/include
+ BUILD_CFLAGS-ldd.host := \
+ -DBUILDING_LINKAGE \
++ -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \
+ -I$(top_srcdir)ldso/include \
+ -include $(top_srcdir)include/elf.h
+ BUILD_CFLAGS-locale.host := \
diff --git a/toolchain/uclibc/patches/xxx-origin.patch b/toolchain/uclibc/patches/xxx-origin.patch
new file mode 100644
index 000000000..42b524017
--- /dev/null
+++ b/toolchain/uclibc/patches/xxx-origin.patch
@@ -0,0 +1,177 @@
+diff -Nur uClibc-git/ldso/ldso/dl-elf.c uClibc-origin/ldso/ldso/dl-elf.c
+--- uClibc-git/ldso/ldso/dl-elf.c 2014-02-03 12:32:56.000000000 +0100
++++ uClibc-origin/ldso/ldso/dl-elf.c 2014-02-17 14:44:13.000000000 +0100
+@@ -133,56 +133,59 @@
+ * in uClibc/ldso/util/ldd.c */
+ static struct elf_resolve *
+ search_for_named_library(const char *name, unsigned rflags, const char *path_list,
+- struct dyn_elf **rpnt)
++ struct dyn_elf **rpnt, const char *origin)
+ {
+- char *path, *path_n, *mylibname;
++ char *mylibname;
++ const char *p, *pn;
+ struct elf_resolve *tpnt;
+- int done;
++ int plen;
+
+ if (path_list==NULL)
+ return NULL;
+
+- /* We need a writable copy of this string, but we don't
+- * need this allocated permanently since we don't want
+- * to leak memory, so use alloca to put path on the stack */
+- done = _dl_strlen(path_list);
+- path = alloca(done + 1);
+-
+ /* another bit of local storage */
+ mylibname = alloca(2050);
+
+- _dl_memcpy(path, path_list, done+1);
+-
+ /* Unlike ldd.c, don't bother to eliminate double //s */
+
+ /* Replace colons with zeros in path_list */
+ /* : at the beginning or end of path maps to CWD */
+ /* :: anywhere maps CWD */
+ /* "" maps to CWD */
+- done = 0;
+- path_n = path;
+- do {
+- if (*path == 0) {
+- *path = ':';
+- done = 1;
++ for (p = path_list; p != NULL; p = pn) {
++ pn = _dl_strchr(p + 1, ':');
++ if (pn != NULL) {
++ plen = pn - p;
++ pn++;
++ } else
++ plen = _dl_strlen(p);
++
++ if (plen >= 7 && _dl_memcmp(p, "$ORIGIN", 7) == 0) {
++ int olen;
++ if (rflags && plen != 7)
++ continue;
++ if (origin == NULL)
++ continue;
++ for (olen = _dl_strlen(origin) - 1; olen >= 0 && origin[olen] != '/'; olen--)
++ ;
++ if (olen <= 0)
++ continue;
++ _dl_memcpy(&mylibname[0], origin, olen);
++ _dl_memcpy(&mylibname[olen], p + 7, plen - 7);
++ mylibname[olen + plen - 7] = 0;
++ } else if (plen != 0) {
++ _dl_memcpy(mylibname, p, plen);
++ mylibname[plen] = 0;
++ } else {
++ _dl_strcpy(mylibname, ".");
+ }
+- if (*path == ':') {
+- *path = 0;
+- if (*path_n)
+- _dl_strcpy(mylibname, path_n);
+- else
+- _dl_strcpy(mylibname, "."); /* Assume current dir if empty path */
+- _dl_strcat(mylibname, "/");
+- _dl_strcat(mylibname, name);
+-#ifdef __LDSO_SAFE_RUNPATH__
+- if (*mylibname == '/')
+-#endif
+- if ((tpnt = _dl_load_elf_shared_library(rflags, rpnt, mylibname)) != NULL)
+- return tpnt;
+- path_n = path+1;
+- }
+- path++;
+- } while (!done);
++ _dl_strcat(mylibname, "/");
++ _dl_strcat(mylibname, name);
++
++ tpnt = _dl_load_elf_shared_library(rflags, rpnt, mylibname);
++ if (tpnt != NULL)
++ return tpnt;
++ }
+ return NULL;
+ }
+
+@@ -234,7 +237,7 @@
+ if (pnt) {
+ pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
+ _dl_if_debug_dprint("\tsearching RPATH='%s'\n", pnt);
+- if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt, tpnt->libname)) != NULL)
+ return tpnt1;
+ }
+ #endif
+@@ -243,7 +246,7 @@
+ /* Check in LD_{ELF_}LIBRARY_PATH, if specified and allowed */
+ if (_dl_library_path) {
+ _dl_if_debug_dprint("\tsearching LD_LIBRARY_PATH='%s'\n", _dl_library_path);
+- if ((tpnt1 = search_for_named_library(libname, rflags, _dl_library_path, rpnt)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, rflags, _dl_library_path, rpnt, NULL)) != NULL)
+ {
+ return tpnt1;
+ }
+@@ -257,7 +260,7 @@
+ if (pnt) {
+ pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
+ _dl_if_debug_dprint("\tsearching RUNPATH='%s'\n", pnt);
+- if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt, NULL)) != NULL)
+ return tpnt1;
+ }
+ #endif
+@@ -291,7 +294,7 @@
+ /* Look for libraries wherever the shared library loader
+ * was installed */
+ _dl_if_debug_dprint("\tsearching ldso dir='%s'\n", _dl_ldsopath);
+- tpnt1 = search_for_named_library(libname, rflags, _dl_ldsopath, rpnt);
++ tpnt1 = search_for_named_library(libname, rflags, _dl_ldsopath, rpnt, NULL);
+ if (tpnt1 != NULL)
+ return tpnt1;
+ #endif
+@@ -304,7 +307,7 @@
+ #ifndef __LDSO_CACHE_SUPPORT__
+ ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib"
+ #endif
+- , rpnt);
++ , rpnt, NULL);
+ if (tpnt1 != NULL)
+ return tpnt1;
+
+diff -Nur uClibc-git/ldso/ldso/ldso.c uClibc-origin/ldso/ldso/ldso.c
+--- uClibc-git/ldso/ldso/ldso.c 2014-02-03 12:32:56.000000000 +0100
++++ uClibc-origin/ldso/ldso/ldso.c 2014-02-17 12:34:00.000000000 +0100
+@@ -403,6 +403,20 @@
+ return p - list;
+ }
+
++static void _dl_setup_progname(const char *argv0)
++{
++ char image[PATH_MAX];
++ ssize_t s;
++
++ s = _dl_readlink("/proc/self/exe", image, sizeof(image));
++ if (s > 0 && image[0] == '/') {
++ image[s] = 0;
++ _dl_progname = _dl_strdup(image);
++ } else if (argv0) {
++ _dl_progname = argv0;
++ }
++}
++
+ void *_dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
+ ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp, char **argv
+ DL_GET_READY_TO_RUN_EXTRA_PARMS)
+@@ -454,9 +468,7 @@
+ * been fixed up by now. Still no function calls outside of this
+ * library, since the dynamic resolver is not yet ready.
+ */
+- if (argv[0]) {
+- _dl_progname = argv[0];
+- }
++ _dl_setup_progname(argv[0]);
+
+ #ifdef __DSBT__
+ _dl_ldso_dsbt = (void *)tpnt->dynamic_info[DT_DSBT_BASE_IDX];
diff --git a/toolchain/uclibc/patches/xxx-sparc-wait4.patch b/toolchain/uclibc/patches/xxx-sparc-wait4.patch
new file mode 100644
index 000000000..e219ed773
--- /dev/null
+++ b/toolchain/uclibc/patches/xxx-sparc-wait4.patch
@@ -0,0 +1,12 @@
+diff -Nur uClibc-0.9.33.2.orig/include/sys/wait.h uClibc-0.9.33.2/include/sys/wait.h
+--- uClibc-0.9.33.2.orig/include/sys/wait.h 2014-03-01 19:15:53.000000000 +0100
++++ uClibc-0.9.33.2/include/sys/wait.h 2014-03-01 19:16:42.000000000 +0100
+@@ -176,7 +176,7 @@
+ #endif /* Use BSD. */
+
+ #ifdef _LIBC
+-extern __pid_t __wait4_nocancel(__pid_t, __WAIT_STATUS, int, struct rusage *) attribute_hidden;
++extern __pid_t __wait4_nocancel(__pid_t, __WAIT_STATUS, int, struct rusage *);
+ #endif
+
+